主頁 > 企業開發 > JavaScript事件處理

JavaScript事件處理

2021-02-16 11:56:31 企業開發

       Js以事件驅動來實作界面互動,事件驅動的核心:以訊息為基礎,以事件來驅動,通俗地說,事件就是檔案或瀏覽器視窗中發生的一些特定

互動行為,如加載、單擊、輸入、選擇等,

1.1事件基礎

       Js與HTML之間互動就是通過事件實作的,事件就是檔案或瀏覽器視窗中發生的一些特定的互動瞬間,事件在瀏覽器中是以物件的形式存在的,即event,觸發一個事件,就會產生一個事件物件event,該物件包含著所有與事件有關的資訊,包括導致事件的元素、事件的型別以及其他與特定事件相關的資訊,

1.1.1事件模型

在瀏覽器的發展歷史中,先后出現了以下4種事件處理模型:

  1. 基本事件模型:也稱為DOM0級事件模型,是瀏覽器發展初期出現的一種比較簡單的事件模型,主要通過事件屬性;為指定標簽系結事件處理函式,

 優點:

      由于這種模型應用比較廣泛,獲得了所有瀏覽器的支持,目前依然比較流行,

 點:

      但是這種模型對HTML檔案標簽的依賴較為嚴重,不利于Js獨立開發,

    2. DOM事件模型:有W3C制定,是目前標準的事件處理模型,所有符合標準的瀏覽器都支持該事件模型,DOM事件模型包括DOM2事件模型和DOM3事件模型,

DOM3事件模型為DOM2事件模型的升級版,略有完善,主要是新增了一些事情型別,以適應移動設備的開發需要,但大部分規范和用法保持一致,

    3. IE事件模型:IE4.0及其以上版本瀏覽器支持,與DOM事件模型相似,但用法不同,

    4. Netscape事件模型:由Netscape4瀏覽器實作,在Netscape6中停止支持,

1.1.2事件流

事件流就是多個節點物件對同一種事件進行回應的先后順序,主要包括3種型別,

1.冒泡型

從最特定的目標向最不特定的目標依次觸發事件,也就是事件從下向上進行回應,這個傳遞程序被形象地稱為冒泡,

下面用法:

function bubble() {
var div = document.getElementsByTagName('div');
var show = document.getElementById('show');
for (var i = 0; i < div.length; i++) {

div[i].onclick = (function (i) {

return function () {

div[i].style.border = '1px dashed orange';

show.innerHTML += div[i].className + '>';

}

})(i);

}

}

window.onload = bubble;
2.捕獲

事件從最不特定的目標開始被觸發,最后到最特定的目標,也就是事件從上向下進行回應,

下面用法:

for (var i = 0; i < div.length; i++) {
div[i]. /*onclick*/ addEventListener('click', (function (i) {
return function () {
div[i].style.border = '1px dashed orange';
show.innerHTML += div[i].className + '>';
}
})(i), true);
}
3.混合

       W3C的DOM事件模型支持捕獲型和冒泡型兩種事件流,但是捕獲型事件流先發生,然后才發生冒泡型事件流,兩種事件流會觸及DOM中的所

有層級物件,從document物件開始,最后回傳document物件結束,

根據事件流型別,

以下可以把事件傳播的整個程序分為3個階段:

捕獲階段

事件從document物件沿檔案樹向下傳播到目標節點,

目標階段

注冊在目標節點上的事件被執行,

冒泡階段

事件從目標節點向上觸發,

1.1.3事件型別

根據觸發物件不同,可以將瀏覽器中發生的事件分成不同的型別,

DOM0級事件定義了以下事件型別:

① 滑鼠事件:與滑鼠操作相關的各種行為,可以細分為兩類:

如(mouseover、mouseout)

跟蹤滑鼠當前定位的事件

如(mouseup、mousedown、click)

跟蹤滑鼠單擊的事件

② 鍵盤事件:與鍵盤操作相關的各種行為,包括追蹤鍵盤敲擊及其背景關系,

追蹤鍵盤包括3種型別:

  1. keyup

  2. keydown

  3. keypress

③ 頁面事件:關于頁面本身的行為,例如,當首次載入頁面時觸發load事件和離開頁面時觸發unloadbeforeunload事件,

④ UI事件:追蹤用戶在頁面中的各種行為,例如,監聽用戶在表單中的輸入,可以通過focusblur兩個事件來實作,

DOM2事件模型中,事件模型包含4個子模塊,每個子模塊提供對某類事件的支持,

‘默認動作’列定義了事件型別是否支持preventDefault()方法,取消事件的默認動作,

DOM3事件模型新增了一些新事件,

DOM3事件型別簡單說明如下:

UI(User Interface,用戶界面)事件

當用戶與頁面上的元素互動時觸發,

焦點事件

當元素獲得或失去焦點時觸發,

滑鼠事件

當用戶通過滑鼠在頁面上執行操作時觸發,

滾輪事件

當使用滑鼠滾輪或類似設備時觸發,

文本事件

在檔案中輸入文本時觸發,

鍵盤事件

當用戶通過鍵盤在頁面上執行操作時觸發,

合成事件

當為IME輸入字符時觸發,

變動事件

當底層DOM結構發生變化時觸發,

1.1.4系結事件

在基本事件模型中,Js支持兩種系結方式,

1. 靜態系結

把Js腳本作為屬性值,直接賦予事件屬性,

下面用法:

 <button onclick="document.write('我是程式員!');">按鈕</button> 

2. 動態系結

使用DOM物件的事件屬性進行賦值,

下面用法:

var button = document.getElementById('btn');
button.onclick = function () {
document.write('我是程式員!');
}

這種方法可以在腳本中直接為頁面元素附加事件,不用破壞HTML結構,比上一種靈活,

1.1.5事件處理函式

事件處理函式是一類特殊的函式,其結構與函式直接量相同,主要任務是實作事件處理,使用方法是異步呼叫,由事件觸發進行回應,

事件處理函式一般沒有明確的回傳值,不過在特定事件中,用戶可以利用事件處理函式的回傳值影響程式的執行,

下面用法:

function btn1(event) {
event = event || window.event;
var btn11 = event.srcElement ? event.srcElement : Event.target;
btn11.style.background = 'green';
}
function btn2(event) {
event = event || window.event;
var src = https://www.cnblogs.com/hjy0806/archive/2021/02/16/event.srcElement ? event.srcElement : Event.target;
src.style.background ='skyblue';
}

1.1.6注冊事件

在DOM事件模型中,通過呼叫物件的addEventListener()方法注冊事件,

語法:

 element.addEventListener(type, listener, useCapture); 

引數:

  • type(表示監聽事件型別的字串,)

  • listener(當所監聽的事件型別觸發時,會接收到一個事件通知(實作了 Event 介面的物件)物件,

  • listener 必須是一個實作了 EventListener 介面的物件,或者是一個函式,)

  • useCapture(Boolean,在DOM樹中,注冊了listener的元素,是否要先于它下面的EventTarget,呼叫該listener,

  • useCapture(設為true) 時,沿著DOM樹向上冒泡的事件,不會觸發listener,

  • 當一個元素嵌套了另一個元素,并且兩個元素都對同一事件注冊了一個處理函式時,所發生的事件冒泡和事件捕獲是兩種不同的事件傳播方式,

  • 事件傳播模式決定了元素以哪個順序接收事件,如果沒有指定,useCapture默認為 false ,)

下面用法:

var p1 = document.getElementById('p1');
p1.addEventListener('mouseover', function () {
p1.style.background = 'green';
}, true);
p1.addEventListener('mouseout', function () {
p1.style.background = 'red';
}, true);

1.1.7銷毀事件

在DOM事件模型中,使用removeEventListener()方法可以從指定物件中洗掉已經注冊的事件處理函式,

用法:

element.removeEventListener(event, function, useCapture)

引數:

event 必須,要移除的事件名稱,
function 必須,指定要移除的函式,
useCapture 可選,布林值,指定移除事件句柄的階段,

可能值:

 true - 在捕獲階段移除事件句柄,

 false- 默認,在冒泡階段移除事件句柄,

 注意: 如果添加兩次事件句柄,一次在捕獲階段,一次在冒泡階段,你必須單獨移除該事件,

下面用法:

var span1 = document.getElementById('span1');
var f1 = function () {
span1.style.background = 'pink';
};
var f2 = function () {
span1.style.background = 'skyblue';
span1.removeEventListener('mouseover', f1);
span1.removeEventListener('mouseout', f2);
};
span1.addEventListener('mouseover', f1);
span1.addEventListener('mouseout', f2);

1.1.8事件委托

 Js事件委托就是利用冒泡的原理,把本應該添加到某個元素上的事件委托給他的父級,從而減少DOM互動達到網頁優化,

這樣做的好處:

優化代碼

提升運行性能

真正把HTML和Js分離,也能防止在動態添加或洗掉節點的程序中注冊的事件丟失,

下面用法:

var ul = document.getElementById('list');
ul.addEventListener('click', function (e) {
var e = e || window.event;
var target = e.target || e.srcElement;
if (e.target && e.target.nodeName.toUpperCase() == 'LI') {
document.write(e.target.innerHTML);
}
}, true);
var i = 4;
var btn = document.getElementById('btn');
btn.addEventListener('click', function () {
var li = document.createElement('li');
li.innerHTML = '我是程式員' + i++;
ul.appendChild(li);
});

1.2使用滑鼠事件

滑鼠事件是Web開發中最常用的事件型別,

1.2.1滑鼠點擊

滑鼠點擊事件包括4個:

click

單擊

dbclick

雙擊

mousedown

按下

mouseup

松開

        其中click事件型別最為常用,而mousedownmouseup事件型別多用于在滑鼠拖放、拉伸操作中,當這些事件處理函式的回傳值為false時,

則會禁止系結物件的默認行為,

下面用法:

var a = document.getElementsByTagName('a');
for (var i = 0; i < a.length; i++) {
if ((new RegExp(window.location.href)).test(a[i].href)) {
a[i].onclick = function () {
return false;
}
}
}

1.2.2滑鼠移動

        mousemove事件型別是一個實時回應的事件,當滑鼠指標的位置發生變化時(至少移動一個像素),就會觸發mousemove事件,

該事件回應的靈敏度主要參考滑鼠的指標的移動速度的快慢,以及瀏覽器跟新的速度,

下面用法:

var box = document.getElementById('box');
box.style.position = 'absolute';
box.style.width = '200px';
box.style.height = '200px';
box.style.background = 'green';
var mx, my, ox, oy;

function e(event) {
if (!event) {
event = window.event;
event.target = event.srcElement;
event.layerX = event.offsetX;
event.layerY = event.offsetY;
}

event.mx = event.pageX || event.clientX + document.body.scrollLeft;
event.my = event.pageY || event.clientY + document.body.scrollTop;
return event;
}

document.onmousedown = function (event) {
event = e(event);
o = event.target;
ox = parseInt(o.offsetLeft);
oy = parseInt(o.offsetTop);
mx = event.mx;
my = event.my;
document.onmousemove = move;
document.onmouseup = stop;
}

function move(event) {
event = e(event);
o.style.left = ox + event.mx - mx + 'px';
o.style.Top = oy + event.my - my + 'px';
}

function stop(event) {
event = e(event);
ox = parseInt(o.offsetLeft);
oy = parseInt(o.offsetTop);
mx = event.mx;
my = event.my;
o = document.onmousemove = document.onmouseup = null;
}

1.2.3滑鼠經過

滑鼠經過包括下面兩種事件型別:

移過

當移動滑鼠指標到某個元素上時,將觸發mouseover事件,

移出

當把滑鼠指標移出某個元素時,將觸發mouseout事件,

如果從父元素中移到子元素中時,也會觸發父元素的mouseover事件型別,

下面用法:

var div = document.getElementsByTagName('div');
for (var i = 0; i < div.length; i++) {
div[i].onmousemove = function (e) {
this.style.color = 'orange';
this.style.fontSize = '24px';
this.style.fontWeight = '600';
}
div[i].onmouseout = function () {
this.style.color = 'red';
}
}

1.3使用鍵盤事件

當用戶操作鍵盤時會觸發鍵盤事件,

鍵盤事件主要包括下面3種型別

keydown

在鍵盤上按下某個鍵時觸發,

keypress

按下某個鍵盤鍵并釋放時觸發,

Keyup

釋放某個鍵盤鍵時觸發,

1.3.1鍵盤事件屬性

鍵盤事件定義了很多屬性,利用這些屬性可以精確控制鍵盤操作,鍵盤事件屬性一般只在鍵盤相關事件發生時才會存在于事件物件中,

下面用法:

var box = document.getElementById('box');
box.style.position = 'absolute';
box.style.width = '100px';
box.style.height = '100px';
box.style.background = 'green';
document.keyDown = keyDown;
function keyDown(event) {
var event = event || window.event;
switch (event.keyCode) {
case 37:
box.style.left = box.offsetLeft - 5 + 'px';
break;
case 38:
box.style.left = box.offsetLeft + 5 + 'px';
break;
case 39:
box.style.top = box.offsetTop - 5 + 'px';
break;
case 40:
box.style.top = box.offsetTop + 5 + 'px';
break;
}
return false;
}

1.4使用頁面事件

所有頁面事件都明確地處理整個頁面的函式和狀態,

1.4.1視窗重置

        resize事件型別是在瀏覽器視窗被重置時觸發的,當用戶調整視窗大小,或者最大化,最小化、恢復視窗大小顯示時均可觸發resize事件,

利用該時間可以根據視窗大小的變化以便動態調整頁面元素的顯示大小,

下面用法:

var box = document.getElementById("box");
box.style.position = "absolute";
box.style.backgroundColor = "red";
box.style.width = w() * 0.8 + "px";
box.style.height = h() * 0.8 + "px";
window.onresize = function () {
box.style.width = w() * 0.8 + "px";
box.style.height = h() * 0.8 + "px";
}
function w() {
if (window.innerWidth) { //兼容DOM
return window.innerWidth;
} else if (document.body) {
return document.body.clientWidth; //兼容IE
}
}
function h() {
if (window.innerHeight) {
return window.innerHeight;
} else if (document.body) {
return document.body.clientHeight;
}
}

1.4.2頁面滾動

scroll事件型別是在元素滾動條在滾動時觸發,

下面用法:

    var box = document.getElementById("box");
        box.style.position = 'absolute';
        box.style.width = '100px';
        box.style.height = '100px';
        box.style.background = 'green';
        window.onload = f;
        window.onscroll = f;
        function f() {
            box.style.left = 100 + parseInt(document.body.scrollLeft) + 'px';
            box.style.top = 100 + parseInt(document.body.scrollTop) + 'px';
        }

1.5使用UI事件

UI事件負責回應用戶與頁面元素的互動,

1.5.1焦點處理

焦點處理主要包括以下兩種事件型別:

focus

獲得焦點

blur

失去焦點

所謂獲得焦點;就是激活表單欄位,使其可以回應鍵盤事件,

所謂失去焦點:就是指定元素當失去焦點就會觸發此事件,(通常應用于表單元素,)

下面用法:

var form = document.getElementById('myform');
var field = form.elements['name'];
window.onload = function () {
field.focus();
field.blur();
}

1.5.2選擇文本

當在文本框或文本區域內選擇文本時,將觸發select事件,

下面用法:

var a = document.getElementsByTagName('input')[0];
var b = document.getElementsByTagName('input')[1];
a.onselect = function () {
if (document.selection) {
o = document.selection.createRange();
if (o.text.length > 0)
b.value = https://www.cnblogs.com/hjy0806/archive/2021/02/16/o.text;
} else {
p1 = a.selectionStart;
p2 = a.selectionEnd;
b.value = a.value.substring(p1, p2);
}
}

1.5.3字串變化檢測

change事件型別是在表單元素的值發生變化時觸發,它主要用于input、select、和textarea元素,

下面用法:

  var a = document.getElementsByTagName('select')[0];
        a.onchange = function () {
            window.open(this.value, '');
        }

1.5.4提交表單

使用<input>或<button>標簽都可以定義提交按鈕,

下面用法:

var t = document.getElementsByTagName('input')[0];
var f = document.getElementsByTagName('form')[0];
f.onsubmit = function (e) {
document.write(t.value);
}

1.5.5重置表單

當單擊重置按鈕時,表單被重置,所有表單欄位恢復初始值,這時會觸發resct事件,

下面用法:

var t = document.getElementsByTagName('input')[0];
var f = document.getElementsByTagName('form')[0];
f.onreset = function (e) {
document.write(t.value);
}
1.5.6剪貼板資料

HTML5規范了剪貼板資料操作,

主要包括6個剪貼板事件:

beforecopy

在發生復制操作前觸發,

copy

在發生復制操作時觸發,

beforecut

在發生剪切操作前觸發,

cut

在發生剪切操作時觸發,

beforepaste

在發生粘貼操作前觸發,

paste

在發生粘貼操作時觸發,

至于copy、cut和paste事件,只要是在背景關系選單中選擇了相應選項等,所有瀏覽器都會觸發它們,

下面用法:

var form = document.getElementById('myform');
var field1 = form.elements[0];
var getClipboardText = function (event) {
var clipboardData = https://www.cnblogs.com/hjy0806/archive/2021/02/16/(event.clipboardData || window.clipboardData);
return clipboardData.getData('text');
};
var setClipboardText = function (event, value) {
if (event.clipboardData) {
event.clipboardData.setData('text/plain', value);
} else if (window.clipboardData) {
window.clipboardData.setData('text', value);
}
};
var addHandler = function (element, type, handler) {
if (document.addEventListener) {
document.addEventListener(type, handler, false);
} else if (element.attachEvent) {
element.attachEvent('on' + type, handler);
} else {
element['on' + type] = handler;
}
};
addHandler(field1, 'paste', function (event) {
event = event || window.event;
var text = getClipboardText(event);
if (!/^\d*$/.text(text)) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = https://www.cnblogs.com/hjy0806/archive/2021/02/16/false;
}
}
})

1.6 實戰案例

1.6.1 設計彈出對話框

無論從事Web前端開發,還是從事Vue前端開發,事件都是經常用到的,

下面用法:

function Dialog(id) {
this.id = id;
var that = this;
document.getElementById(id).children[0].onclick = function () {
that.close();
}
}
Dialog.prototype.show = function () {
var dlg = document.getElementById(this.id);
dlg.style.display = 'block';
dlg = null;
}
Dialog.prototype.close = function () {
var dlg = document.getElementById(this.id);
dlg.style.display = 'none';
dlg = null;
}
function openDialog() {
var dlg = new Dialog('dlgText');
dlg.show();
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/259949.html

標籤:其他

上一篇:單例模式

下一篇:vue中怎么動態生成form表單

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more