日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

JavaScript基础14-day16【事件委派、事件绑定、事件传播、滚轮事件、键盘事件、键盘移动div】

發(fā)布時(shí)間:2024/9/30 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript基础14-day16【事件委派、事件绑定、事件传播、滚轮事件、键盘事件、键盘移动div】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)習(xí)地址:

  • 谷粒學(xué)院——尚硅谷
  • 嗶哩嗶哩網(wǎng)站——尚硅谷最新版JavaScript基礎(chǔ)全套教程完整版(140集實(shí)戰(zhàn)教學(xué),JS從入門(mén)到精通)

  • JavaScript基礎(chǔ)、高級(jí)學(xué)習(xí)筆記匯總表【尚硅谷最新版JavaScript基礎(chǔ)全套教程完整版(140集實(shí)戰(zhàn)教學(xué),JS從入門(mén)到精通)】

    目? ?錄

    P114?114.尚硅谷_JS基礎(chǔ)_事件的委派?19:49

    IE 屬性 / 標(biāo)準(zhǔn) Event 屬性

    事件的委派——案例

    P115?115.尚硅谷_JS基礎(chǔ)_事件的綁定?18:06

    “對(duì)象.事件 = 函數(shù)”的形式綁定響應(yīng)函數(shù),不能綁定多個(gè)

    addEventListener():為元素綁定響應(yīng)函數(shù)

    attachEvent():綁定事件【IE8】

    定義一個(gè)函數(shù),用來(lái)為指定元素綁定響應(yīng)函數(shù)

    P116?116.尚硅谷_JS基礎(chǔ)_完成bind函數(shù)?08:58

    P117?117.尚硅谷_JS基礎(chǔ)_事件的傳播?14:46

    P118?118.尚硅谷_JS基礎(chǔ)_拖拽(一)?19:15

    P119?119.尚硅谷_JS基礎(chǔ)_拖拽(二)?09:42

    P120?120.尚硅谷_JS基礎(chǔ)_拖拽(三)?24:27

    測(cè)試IE8

    拖拽2 代碼

    拖拽3 代碼——拖拽圖片

    P121?121.尚硅谷_JS基礎(chǔ)_滾輪的事件?22:27

    onmousewheel():鼠標(biāo)滾輪滾動(dòng)的事件,會(huì)在滾輪滾動(dòng)時(shí)觸發(fā)

    event.wheelDelta:獲取鼠標(biāo)滾輪滾動(dòng)的方向

    在火狐中使用event.detail來(lái)獲取滾動(dòng)的方向

    處理“滾動(dòng)條”

    滾輪事件-代碼

    P122?122.尚硅谷_JS基礎(chǔ)_鍵盤(pán)事件?24:02

    事件句柄(Event Handlers)

    鼠標(biāo) / 鍵盤(pán) 屬性

    IE 屬性

    通過(guò)keyCode來(lái)獲取按鍵的編碼

    在onkeydown中取消默認(rèn)行為:輸入的內(nèi)容,不會(huì)出現(xiàn)在文本框中

    使文本框中不能輸入數(shù)字

    P123?123.尚硅谷_JS基礎(chǔ)_鍵盤(pán)移動(dòng)div?08:59

    使div可以根據(jù)不同的方向鍵向不同的方向移動(dòng)


    P114?114.尚硅谷_JS基礎(chǔ)_事件的委派?19:49

    IE 屬性 / 標(biāo)準(zhǔn) Event 屬性

    事件的委派——案例

    我們希望,只綁定一次事件,即可應(yīng)用到多個(gè)的元素上,即使元素是后添加的。我們可以嘗試將其綁定給元素的共同的祖先元素

    事件的委派:指將事件統(tǒng)一綁定給元素的共同的祖先元素,這樣當(dāng)后代元素上的事件觸發(fā)時(shí),會(huì)一直冒泡到祖先元素,從而通過(guò)祖先元素的響應(yīng)函數(shù)來(lái)處理事件。

    事件委派是利用了冒泡,通過(guò)委派可以減少事件綁定的次數(shù),提高程序的性能。

    <!DOCTYPE html> <html><head><meta charset="utf-8" /><title></title><script type="text/javascript">window.onload = function() {var u1 = document.getElementById("u1");//點(diǎn)擊按鈕以后添加超鏈接var btn01 = document.getElementById("btn01");btn01.onclick = function() {var li = document.createElement("li"); // 創(chuàng)建一個(gè)lili.innerHTML = "<a href='javascript:;' class='link'>新建的超鏈接</a>";u1.appendChild(li); // 將li添加到ul中};/** 為每一個(gè)超鏈接都綁定一個(gè)單擊響應(yīng)函數(shù)* 這里我們?yōu)槊恳粋€(gè)超鏈接都綁定了一個(gè)單擊響應(yīng)函數(shù),這種操作比較麻煩,* 而且這些操作只能為已有的超鏈接設(shè)置事件,而新添加的超鏈接必須重新綁定*/var allA = document.getElementsByTagName("a"); // 獲取所有的a/* for (var i = 0; i < allA.length; i++) { // 遍歷allA[i].onclick = function() {alert("我是a的單擊響應(yīng)函數(shù)!!!");};} *//** 我們希望,只綁定一次事件,即可應(yīng)用到多個(gè)的元素上,即使元素是后添加的* 我們可以嘗試將其綁定給元素的共同的祖先元素* * 事件的委派* - 指將事件統(tǒng)一綁定給元素的共同的祖先元素,這樣當(dāng)后代元素上的事件觸發(fā)時(shí),會(huì)一直冒泡到祖先元素* 從而通過(guò)祖先元素的響應(yīng)函數(shù)來(lái)處理事件。* - 事件委派是利用了冒泡,通過(guò)委派可以減少事件綁定的次數(shù),提高程序的性能*/u1.onclick = function(event) { // 為ul綁定一個(gè)單擊響應(yīng)函數(shù)event = event || window.event;/** target* - event中的target表示的觸發(fā)事件的對(duì)象*/// alert(event.target);//如果觸發(fā)事件的對(duì)象是我們期望的元素,則執(zhí)行否則不執(zhí)行if (event.target.className == "link") {alert("我是ul的單擊響應(yīng)函數(shù)");}};};</script></head><body><button id="btn01">添加超鏈接</button><ul id="u1" style="background-color: #bfa;"><li><p>我是p元素</p></li><li><a href="javascript:;" class="link">超鏈接一</a></li><li><a href="javascript:;" class="link">超鏈接二</a></li><li><a href="javascript:;" class="link">超鏈接三</a></li></ul></body> </html>

    P115?115.尚硅谷_JS基礎(chǔ)_事件的綁定?18:06

    “對(duì)象.事件 = 函數(shù)”的形式綁定響應(yīng)函數(shù),不能綁定多個(gè)

    addEventListener():為元素綁定響應(yīng)函數(shù)

    addEventListener():通過(guò)這個(gè)方法也可以為元素綁定響應(yīng)函數(shù)。
    參數(shù):

  • 事件的字符串,click不要on。
  • 回調(diào)函數(shù),當(dāng)事件觸發(fā)時(shí) 該函數(shù)會(huì)被調(diào)用。
  • 是否在捕獲階段觸發(fā)事件,需要一個(gè)布爾值,一般都傳false。
  • 使用addEventListener()可以同時(shí)為一個(gè)元素的相同事件同時(shí)綁定多個(gè)響應(yīng)函數(shù),這樣當(dāng)事件被觸發(fā)時(shí),響應(yīng)函數(shù)將會(huì)按照函數(shù)的綁定順序執(zhí)行,這個(gè)方法不支持IE8及以下的瀏覽器

    attachEvent():綁定事件【IE8】

    attachEvent():在IE8中可以使用attachEvent()來(lái)綁定事件
    參數(shù):

  • 事件的字符串,onclick要on。
  • 回調(diào)函數(shù)。
  • 這個(gè)方法也可以同時(shí)為一個(gè)事件綁定多個(gè)處理函數(shù),不同的是它是后綁定先執(zhí)行,執(zhí)行順序和addEventListener()相反。

    ??

    定義一個(gè)函數(shù),用來(lái)為指定元素綁定響應(yīng)函數(shù)

    addEventListener()中的this,是綁定事件的對(duì)象;attachEvent()中的this,是window。需要統(tǒng)一兩個(gè)方法this。

    P116?116.尚硅谷_JS基礎(chǔ)_完成bind函數(shù)?08:58

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><script type="text/javascript">window.onload = function() {// 點(diǎn)擊按鈕以后彈出一個(gè)內(nèi)容var btn01 = document.getElementById("btn01"); // 獲取按鈕對(duì)象/** 使用 對(duì)象.事件 = 函數(shù) 的形式綁定響應(yīng)函數(shù),* 它只能同時(shí)為一個(gè)元素的一個(gè)事件綁定一個(gè)響應(yīng)函數(shù),* 不能綁定多個(gè),如果綁定了多個(gè),則后邊會(huì)覆蓋掉前邊的*//* btn01.onclick = function() { // 為btn01綁定第1個(gè)單擊響應(yīng)函數(shù)alert(1);};btn01.onclick = function() { // 為btn01綁定第2個(gè)響應(yīng)函數(shù)alert(2);}; *//** addEventListener()* - 通過(guò)這個(gè)方法也可以為元素綁定響應(yīng)函數(shù)* - 參數(shù):* 1.事件的字符串,click不要on* 2.回調(diào)函數(shù),當(dāng)事件觸發(fā)時(shí) 該函數(shù)會(huì)被調(diào)用* 3.是否在捕獲階段觸發(fā)事件,需要一個(gè)布爾值,一般都傳false* * 使用addEventListener()可以同時(shí)為一個(gè)元素的相同事件同時(shí)綁定多個(gè)響應(yīng)函數(shù),* 這樣當(dāng)事件被觸發(fā)時(shí),響應(yīng)函數(shù)將會(huì)按照函數(shù)的綁定順序執(zhí)行* * 這個(gè)方法不支持IE8及以下的瀏覽器*//* btn01.addEventListener("click", function() {alert(1);}, false);btn01.addEventListener("click", function() {alert(2);}, false);btn01.addEventListener("click", function() {alert(3);}, false); *//** attachEvent()* - 在IE8中可以使用attachEvent()來(lái)綁定事件* - 參數(shù):* 1.事件的字符串,要on* 2.回調(diào)函數(shù)* * - 這個(gè)方法也可以同時(shí)為一個(gè)事件綁定多個(gè)處理函數(shù),* 不同的是它是后綁定先執(zhí)行,執(zhí)行順序和addEventListener()相反*//* btn01.attachEvent("onclick", function() {alert(1);});btn01.attachEvent("onclick", function() {alert(2);});btn01.attachEvent("onclick", function() {alert(3);}); *//* btn01.addEventListener("click", function() {alert(this);}, false);btn01.attachEvent("onclick", function() {alert(this);}); */bind(btn01, "click", function() {alert(this);});};//定義一個(gè)函數(shù),用來(lái)為指定元素綁定響應(yīng)函數(shù)/** addEventListener()中的this,是綁定事件的對(duì)象* attachEvent()中的this,是window* 需要統(tǒng)一兩個(gè)方法this*//** 參數(shù):* obj 要綁定事件的對(duì)象* eventStr 事件的字符串(不要on)* callback 回調(diào)函數(shù)*/function bind(obj, eventStr, callback) {if (obj.addEventListener) {//大部分瀏覽器兼容的方式obj.addEventListener(eventStr, callback, false);} else {/** this是誰(shuí)由調(diào)用方式?jīng)Q定* callback.call(obj)*///IE8及以下obj.attachEvent("on" + eventStr, function() {//在匿名函數(shù)中調(diào)用回調(diào)函數(shù)callback.call(obj);});}}</script></head><body><button id="btn01">點(diǎn)我一下</button></body> </html>

    P117?117.尚硅谷_JS基礎(chǔ)_事件的傳播?14:46

    事件的傳播

    • 關(guān)于事件的傳播網(wǎng)景公司和微軟公司有不同的理解
    • 微軟公司認(rèn)為事件應(yīng)該是由內(nèi)向外傳播,也就是當(dāng)事件觸發(fā)時(shí),應(yīng)該先觸發(fā)當(dāng)前元素上的事件,然后再向當(dāng)前元素的祖先元素上傳播,也就說(shuō)事件應(yīng)該在冒泡階段執(zhí)行。
    • 網(wǎng)景公司認(rèn)為事件應(yīng)該是由外向內(nèi)傳播的,也就是當(dāng)前事件觸發(fā)時(shí),應(yīng)該先觸發(fā)當(dāng)前元素的最外層的祖先元素的事件,然后在向內(nèi)傳播給后代元素。
    • W3C綜合了兩個(gè)公司的方案,將事件傳播分成了三個(gè)階段:
  • 捕獲階段:在捕獲階段時(shí)從最外層的祖先元素,向目標(biāo)元素進(jìn)行事件的捕獲,但是默認(rèn)此時(shí)不會(huì)觸發(fā)事件。
  • 目標(biāo)階段:事件捕獲到目標(biāo)元素,捕獲結(jié)束開(kāi)始在目標(biāo)元素上觸發(fā)事件。
  • 冒泡階段:事件從目標(biāo)元素向他的祖先元素傳遞,依次觸發(fā)祖先元素上的事件。
    • 如果希望在捕獲階段就觸發(fā)事件,可以將addEventListener()的第三個(gè)參數(shù)設(shè)置為true。一般情況下我們不會(huì)希望在捕獲階段觸發(fā)事件,所以這個(gè)參數(shù)一般都是false,IE8及以下的瀏覽器中沒(méi)有捕獲階段。

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/css">#box1 {width: 300px;height: 300px;background-color: yellowgreen;}#box2 {width: 200px;height: 200px;background-color: yellow;}#box3 {width: 150px;height: 150px;background-color: skyblue;}</style><script type="text/javascript">window.onload = function() {// 分別為三個(gè)div綁定單擊響應(yīng)函數(shù)var box1 = document.getElementById("box1");var box2 = document.getElementById("box2");var box3 = document.getElementById("box3");bind(box1, "click", function() {alert("我是box1的響應(yīng)函數(shù)")});bind(box2, "click", function() {alert("我是box2的響應(yīng)函數(shù)")});bind(box3, "click", function() {alert("我是box3的響應(yīng)函數(shù)")});};function bind(obj, eventStr, callback) {if (obj.addEventListener) {//大部分瀏覽器兼容的方式obj.addEventListener(eventStr, callback, true);} else {/** this是誰(shuí)由調(diào)用方式?jīng)Q定* callback.call(obj)*///IE8及以下obj.attachEvent("on" + eventStr, function() {//在匿名函數(shù)中調(diào)用回調(diào)函數(shù)callback.call(obj);});}}</script></head><body><div id="box1"><div id="box2"><div id="box3"></div></div></div></body> </html>

    P118?118.尚硅谷_JS基礎(chǔ)_拖拽(一)?19:15

    拖拽的流程:

  • 當(dāng)鼠標(biāo)在被拖拽元素上按下時(shí),開(kāi)始拖拽:onmousedown。
  • 當(dāng)鼠標(biāo)移動(dòng)時(shí)被拖拽元素跟隨鼠標(biāo)移動(dòng):onmousemove。
  • 當(dāng)鼠標(biāo)松開(kāi)時(shí),被拖拽元素固定在當(dāng)前位置:onmouseup。
  • ??

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/css">#box1 {width: 100px;height: 100px;background-color: red;position: absolute;}#box2 {width: 100px;height: 100px;background-color: yellow;position: absolute;left: 200px;top: 200px;}</style><script type="text/javascript">window.onload = function() { // 拖拽box1元素? //獲取box1var box1 = document.getElementById("box1");//為box1綁定一個(gè)鼠標(biāo)按下事件//當(dāng)鼠標(biāo)在被拖拽元素上按下時(shí),開(kāi)始拖拽 onmousedownbox1.onmousedown = function(event) {event = event || window.event;//為document綁定一個(gè)onmousemove事件document.onmousemove = function(event) {event = event || window.event;//當(dāng)鼠標(biāo)移動(dòng)時(shí)被拖拽元素跟隨鼠標(biāo)移動(dòng) onmousemove//獲取鼠標(biāo)的坐標(biāo)var left = event.clientX;var top = event.clientY;//修改box1的位置box1.style.left = left + "px";box1.style.top = top + "px";};//為document綁定一個(gè)鼠標(biāo)松開(kāi)事件document.onmouseup = function() {//當(dāng)鼠標(biāo)松開(kāi)時(shí),被拖拽元素固定在當(dāng)前位置 onmouseup//取消document的onmousemove事件document.onmousemove = null;//取消document的onmouseup事件document.onmouseup = null;};};};</script></head><body><div id="box1"></div><div id="box2"></div></body> </html>

    P119?119.尚硅谷_JS基礎(chǔ)_拖拽(二)?09:42

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/css">#box1 {width: 100px;height: 100px;background-color: red;position: absolute;}#box2 {width: 100px;height: 100px;background-color: yellow;position: absolute;left: 200px;top: 200px;}</style><script type="text/javascript">window.onload = function() { // 拖拽box1元素? //獲取box1var box1 = document.getElementById("box1");//為box1綁定一個(gè)鼠標(biāo)按下事件//當(dāng)鼠標(biāo)在被拖拽元素上按下時(shí),開(kāi)始拖拽 onmousedownbox1.onmousedown = function(event) {event = event || window.event;//div的偏移量 鼠標(biāo).clentX - 元素.offsetLeft//div的偏移量 鼠標(biāo).clentY - 元素.offsetTopvar ol = event.clientX - box1.offsetLeft;var ot = event.clientY - box1.offsetTop;//為document綁定一個(gè)onmousemove事件document.onmousemove = function(event) {event = event || window.event;//當(dāng)鼠標(biāo)移動(dòng)時(shí)被拖拽元素跟隨鼠標(biāo)移動(dòng) onmousemove//獲取鼠標(biāo)的坐標(biāo)var left = event.clientX - ol;var top = event.clientY - ot;//修改box1的位置box1.style.left = left + "px";box1.style.top = top + "px";};//為document綁定一個(gè)鼠標(biāo)松開(kāi)事件document.onmouseup = function() {//當(dāng)鼠標(biāo)松開(kāi)時(shí),被拖拽元素固定在當(dāng)前位置 onmouseup//取消document的onmousemove事件document.onmousemove = null;//取消document的onmouseup事件document.onmouseup = null;};};};</script></head><body><div id="box1"></div><div id="box2"></div></body> </html>

    P120?120.尚硅谷_JS基礎(chǔ)_拖拽(三)?24:27

    測(cè)試IE8

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><script type="text/javascript">window.onload = function() {//分別為兩個(gè)按鈕綁定單擊響應(yīng)函數(shù)var btn01 = document.getElementById("btn01");var btn02 = document.getElementById("btn02");btn01.onclick = function() {alert(1);};btn02.onclick = function() {alert(2);};//設(shè)置btn01對(duì)鼠標(biāo)按下相關(guān)的事件進(jìn)行捕獲//當(dāng)調(diào)用一個(gè)元素的setCapture()方法以后,這個(gè)元素將會(huì)把下一次所有的鼠標(biāo)按下相關(guān)的事件捕獲到自身上btn01.setCapture();};</script></head><body><button id="btn01">按鈕01</button><button id="btn02">按鈕02</button></body> </html>

    拖拽2 代碼

    ??

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/css">#box1 {width: 100px;height: 100px;background-color: red;position: absolute;}#box2 {width: 100px;height: 100px;background-color: yellow;position: absolute;left: 200px;top: 200px;}</style><script type="text/javascript">window.onload = function() {/** 拖拽box1元素* - 拖拽的流程* 1.當(dāng)鼠標(biāo)在被拖拽元素上按下時(shí),開(kāi)始拖拽 onmousedown* 2.當(dāng)鼠標(biāo)移動(dòng)時(shí)被拖拽元素跟隨鼠標(biāo)移動(dòng) onmousemove* 3.當(dāng)鼠標(biāo)松開(kāi)時(shí),被拖拽元素固定在當(dāng)前位置 onmouseup*///獲取box1var box1 = document.getElementById("box1");var box2 = document.getElementById("box2");//為box1綁定一個(gè)鼠標(biāo)按下事件//當(dāng)鼠標(biāo)在被拖拽元素上按下時(shí),開(kāi)始拖拽 onmousedownbox1.onmousedown = function(event) {//設(shè)置box1捕獲所有鼠標(biāo)按下的事件/** setCapture()* - 只有IE支持,但是在火狐中調(diào)用時(shí)不會(huì)報(bào)錯(cuò),* 而如果使用chrome調(diào)用,會(huì)報(bào)錯(cuò)*//* if (box1.setCapture) {box1.setCapture();} */box1.setCapture && box1.setCapture();event = event || window.event;//div的偏移量 鼠標(biāo).clentX - 元素.offsetLeft//div的偏移量 鼠標(biāo).clentY - 元素.offsetTopvar ol = event.clientX - box1.offsetLeft;var ot = event.clientY - box1.offsetTop;//為document綁定一個(gè)onmousemove事件document.onmousemove = function(event) {event = event || window.event;//當(dāng)鼠標(biāo)移動(dòng)時(shí)被拖拽元素跟隨鼠標(biāo)移動(dòng) onmousemove//獲取鼠標(biāo)的坐標(biāo)var left = event.clientX - ol;var top = event.clientY - ot;//修改box1的位置box1.style.left = left + "px";box1.style.top = top + "px";};//為document綁定一個(gè)鼠標(biāo)松開(kāi)事件document.onmouseup = function() {//當(dāng)鼠標(biāo)松開(kāi)時(shí),被拖拽元素固定在當(dāng)前位置 onmouseup//取消document的onmousemove事件document.onmousemove = null;//取消document的onmouseup事件document.onmouseup = null;//當(dāng)鼠標(biāo)松開(kāi)時(shí),取消對(duì)事件的捕獲box1.releaseCapture && box1.releaseCapture();};/** 當(dāng)我們拖拽一個(gè)網(wǎng)頁(yè)中的內(nèi)容時(shí),瀏覽器會(huì)默認(rèn)去搜索引擎中搜索內(nèi)容,* 此時(shí)會(huì)導(dǎo)致拖拽功能的異常,這個(gè)是瀏覽器提供的默認(rèn)行為,* 如果不希望發(fā)生這個(gè)行為,則可以通過(guò)return false來(lái)取消默認(rèn)行為* * 但是這招對(duì)IE8不起作用*/return false;};};</script></head><body>我是一段文字<div id="box1"></div><div id="box2"></div></body> </html>

    拖拽3 代碼——拖拽圖片

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/css">#box1 {width: 100px;height: 100px;background-color: red;position: absolute;}#box2 {width: 100px;height: 100px;background-color: yellow;position: absolute;left: 200px;top: 200px;}</style><script type="text/javascript">window.onload = function() {/** 拖拽box1元素* - 拖拽的流程* 1.當(dāng)鼠標(biāo)在被拖拽元素上按下時(shí),開(kāi)始拖拽 onmousedown* 2.當(dāng)鼠標(biāo)移動(dòng)時(shí)被拖拽元素跟隨鼠標(biāo)移動(dòng) onmousemove* 3.當(dāng)鼠標(biāo)松開(kāi)時(shí),被拖拽元素固定在當(dāng)前位置 onmouseup*///獲取box1var box1 = document.getElementById("box1");var box2 = document.getElementById("box2");var img1 = document.getElementById("img1");drag(box1); // 開(kāi)啟box1的拖拽drag(box2); // 開(kāi)啟box2的拖拽drag(img1);};/** 提取一個(gè)專門(mén)用來(lái)設(shè)置拖拽的函數(shù)* 參數(shù):開(kāi)啟拖拽的元素*/function drag(obj) {//當(dāng)鼠標(biāo)在被拖拽元素上按下時(shí),開(kāi)始拖拽 onmousedownobj.onmousedown = function(event) {//設(shè)置box1捕獲所有鼠標(biāo)按下的事件/** setCapture()* - 只有IE支持,但是在火狐中調(diào)用時(shí)不會(huì)報(bào)錯(cuò),* 而如果使用chrome調(diào)用,會(huì)報(bào)錯(cuò)*//*if(box1.setCapture){box1.setCapture();}*/obj.setCapture && obj.setCapture();event = event || window.event;//div的偏移量 鼠標(biāo).clentX - 元素.offsetLeft//div的偏移量 鼠標(biāo).clentY - 元素.offsetTopvar ol = event.clientX - obj.offsetLeft;var ot = event.clientY - obj.offsetTop;//為document綁定一個(gè)onmousemove事件document.onmousemove = function(event) {event = event || window.event;//當(dāng)鼠標(biāo)移動(dòng)時(shí)被拖拽元素跟隨鼠標(biāo)移動(dòng) onmousemove//獲取鼠標(biāo)的坐標(biāo)var left = event.clientX - ol;var top = event.clientY - ot;//修改box1的位置obj.style.left = left + "px";obj.style.top = top + "px";};//為document綁定一個(gè)鼠標(biāo)松開(kāi)事件document.onmouseup = function() {//當(dāng)鼠標(biāo)松開(kāi)時(shí),被拖拽元素固定在當(dāng)前位置 onmouseup//取消document的onmousemove事件document.onmousemove = null;//取消document的onmouseup事件document.onmouseup = null;//當(dāng)鼠標(biāo)松開(kāi)時(shí),取消對(duì)事件的捕獲obj.releaseCapture && obj.releaseCapture();};/** 當(dāng)我們拖拽一個(gè)網(wǎng)頁(yè)中的內(nèi)容時(shí),瀏覽器會(huì)默認(rèn)去搜索引擎中搜索內(nèi)容,* 此時(shí)會(huì)導(dǎo)致拖拽功能的異常,這個(gè)是瀏覽器提供的默認(rèn)行為,* 如果不希望發(fā)生這個(gè)行為,則可以通過(guò)return false來(lái)取消默認(rèn)行為* * 但是這招對(duì)IE8不起作用*/return false;};}</script></head><body>我是一段文字!<div id="box1"></div><div id="box2"></div><img src="img/an.jpg" id="img1" style="position: absolute;" /></body> </html>

    P121?121.尚硅谷_JS基礎(chǔ)_滾輪的事件?22:27

    onmousewheel():鼠標(biāo)滾輪滾動(dòng)的事件,會(huì)在滾輪滾動(dòng)時(shí)觸發(fā)

    ??

    event.wheelDelta:獲取鼠標(biāo)滾輪滾動(dòng)的方向

    在火狐中使用event.detail來(lái)獲取滾動(dòng)的方向

    wheelDelta 這個(gè)值,我們不看大小、只看正負(fù)。

    處理“滾動(dòng)條”

    滾輪事件-代碼

    ??

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/css">#box1 {width: 100px;height: 100px;background-color: red;}</style><script type="text/javascript">window.onload = function() {//獲取id為box1的divvar box1 = document.getElementById("box1");//為box1綁定一個(gè)鼠標(biāo)滾輪滾動(dòng)的事件/** onmousewheel鼠標(biāo)滾輪滾動(dòng)的事件,會(huì)在滾輪滾動(dòng)時(shí)觸發(fā),* 但是火狐不支持該屬性* * 在火狐中需要使用 DOMMouseScroll 來(lái)綁定滾動(dòng)事件* 注意該事件需要通過(guò)addEventListener()函數(shù)來(lái)綁定*/box1.onmousewheel = function(event) {event = event || window.event;//event.wheelDelta 可以獲取鼠標(biāo)滾輪滾動(dòng)的方向//向上滾 120 向下滾 -120//wheelDelta這個(gè)值我們不看大小,只看正負(fù)//alert(event.wheelDelta);//wheelDelta這個(gè)屬性火狐中不支持//在火狐中使用event.detail來(lái)獲取滾動(dòng)的方向//向上滾 -3 向下滾 3//alert(event.detail);/** 當(dāng)鼠標(biāo)滾輪向下滾動(dòng)時(shí),box1變長(zhǎng)* 當(dāng)滾輪向上滾動(dòng)時(shí),box1變短*///判斷鼠標(biāo)滾輪滾動(dòng)的方向if (event.wheelDelta > 0 || event.detail < 0) {//向上滾,box1變短box1.style.height = box1.clientHeight - 10 + "px";} else {//向下滾,box1變長(zhǎng)box1.style.height = box1.clientHeight + 10 + "px";}/** 使用addEventListener()方法綁定響應(yīng)函數(shù),取消默認(rèn)行為時(shí)不能使用return false* 需要使用event來(lái)取消默認(rèn)行為event.preventDefault();* 但是IE8不支持event.preventDefault();這個(gè)玩意,如果直接調(diào)用會(huì)報(bào)錯(cuò)*/event.preventDefault && event.preventDefault();/** 當(dāng)滾輪滾動(dòng)時(shí),如果瀏覽器有滾動(dòng)條,滾動(dòng)條會(huì)隨之滾動(dòng),* 這是瀏覽器的默認(rèn)行為,如果不希望發(fā)生,則可以取消默認(rèn)行為*/return false;};//為火狐綁定滾輪事件bind(box1, "DOMMouseScroll", box1.onmousewheel);};function bind(obj, eventStr, callback) {if (obj.addEventListener) {//大部分瀏覽器兼容的方式obj.addEventListener(eventStr, callback, false);} else {/** this是誰(shuí)由調(diào)用方式?jīng)Q定* callback.call(obj)*///IE8及以下obj.attachEvent("on" + eventStr, function() {//在匿名函數(shù)中調(diào)用回調(diào)函數(shù)callback.call(obj);});}}</script></head><body style="height: 2000px;"><div id="box1"></div></body> </html>

    P122?122.尚硅谷_JS基礎(chǔ)_鍵盤(pán)事件?24:02

    事件句柄(Event Handlers)

    鼠標(biāo) / 鍵盤(pán) 屬性

    IE 屬性

    鍵盤(pán)事件

    onkeydown

    • 按鍵被按下。
    • 對(duì)于onkeydown來(lái)說(shuō):如果一直按著某個(gè)按鍵不松手,則事件會(huì)一直觸發(fā)。
    • 當(dāng)onkeydown連續(xù)觸發(fā)時(shí),第一次和第二次之間會(huì)間隔稍微長(zhǎng)一點(diǎn),其他的會(huì)非常的快。這種設(shè)計(jì)是為了防止誤操作的發(fā)生。

    onkeyup

    • 按鍵被松開(kāi)。

    鍵盤(pán)事件,一般都會(huì)綁定給一些可以獲取到焦點(diǎn)的對(duì)象或者是document。

    通過(guò)keyCode來(lái)獲取按鍵的編碼

    在onkeydown中取消默認(rèn)行為:輸入的內(nèi)容,不會(huì)出現(xiàn)在文本框中

    使文本框中不能輸入數(shù)字

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><script type="text/javascript">window.onload = function() {document.onkeydown = function(event) {event = event || window.event;/** 可以通過(guò)keyCode來(lái)獲取按鍵的編碼* 通過(guò)它可以判斷哪個(gè)按鍵被按下* 除了keyCode,事件對(duì)象中還提供了幾個(gè)屬性* altKey* ctrlKey* shiftKey* - 這個(gè)三個(gè)用來(lái)判斷alt ctrl 和 shift是否被按下* 如果按下則返回true,否則返回false*///console.log(event.keyCode);//判斷一個(gè)y是否被按下//判斷y和ctrl是否同時(shí)被按下if (event.keyCode === 89 && event.ctrlKey === 17) {console.log("ctrl和y都被按下了");}};/* document.onkeyup = function() {console.log("按鍵松開(kāi)了");}; */var input = document.getElementsByTagName("input")[0]; // 獲取inputinput.onkeydown = function(event) {event = event || window.event;//console.log(event.keyCode);//數(shù)字 48 - 57//使文本框中不能輸入數(shù)字if (event.keyCode >= 48 && event.keyCode <= 57) {//在文本框中輸入內(nèi)容,屬于onkeydown的默認(rèn)行為//如果在onkeydown中取消了默認(rèn)行為,則輸入的內(nèi)容,不會(huì)出現(xiàn)在文本框中return false;}};};</script></head><body><input type="text" /></body> </html>

    P123?123.尚硅谷_JS基礎(chǔ)_鍵盤(pán)移動(dòng)div?08:59

    使div可以根據(jù)不同的方向鍵向不同的方向移動(dòng)

    按方向鍵的同時(shí),按“Ctrl”鍵? ?會(huì)加速。

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><style type="text/css">#box1 {width: 100px;height: 100px;background-color: red;position: absolute;}</style><script type="text/javascript">//使div可以根據(jù)不同的方向鍵向不同的方向移動(dòng)/** 按左鍵,div向左移* 按右鍵,div向右移...*/window.onload = function() {//為document綁定一個(gè)按鍵按下的事件document.onkeydown = function(event) {event = event || window.event;//定義一個(gè)變量,來(lái)表示移動(dòng)的速度var speed = 10;//當(dāng)用戶按了ctrl以后,速度加快if (event.ctrlKey) {speed = 50;}/** 37 左* 38 上* 39 右* 40 下*/switch (event.keyCode) {case 37://alert("向左"); left值減小box1.style.left = box1.offsetLeft - speed + "px";break;case 39://alert("向右");box1.style.left = box1.offsetLeft + speed + "px";break;case 38://alert("向上");box1.style.top = box1.offsetTop - speed + "px";break;case 40://alert("向下");box1.style.top = box1.offsetTop + speed + "px";break;}};};</script></head><body><div id="box1"></div></body> </html>

    理論上,明天能看完~? ?沖沖沖~

    總結(jié)

    以上是生活随笔為你收集整理的JavaScript基础14-day16【事件委派、事件绑定、事件传播、滚轮事件、键盘事件、键盘移动div】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。