12.8事件和事件應(yīng)用

阻止默認(rèn)行為

標(biāo)準(zhǔn)下: event.preventDefault();//默認(rèn)菜單
ie下: event.returnValue = false;

target

Element 只讀 觸發(fā)事件的目標(biāo)元素

事件處理函數(shù)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div>aaaaa</div>
<script>
var div = document.getElementsByTagName('div')[0];

// div.onclick = function(){
//  alert(1);
// }


// div.onclick = function(){
//  alert(2);
// }

//給元素添加相應(yīng)的事件屬性
//缺點(diǎn): 只能添加一個(gè)相同類型的事件處理函數(shù)
//參數(shù)說明:
//1. 事件類型(字符串)
//2. 事件處理函數(shù)
// 3. true/false  就寫false  
div.addEventListener( 'click', function(ev){ alert(ev.target.innerHTML) }, false  );
div.addEventListener( 'click', function(ev){ alert(2) }, false  );

//推薦使用addEventListener

</script>
</body>
</html>

移除事件綁定函數(shù)

div.onclick = null;

DOM2級事件定義了兩個(gè)方法用于處理指定和刪除事件處理程序的操作:

綁定事件處理函數(shù): addEventListener

function fn1() {
 alert(1);
}

document.addEventListener('click', fn1, false);
移除事件綁定函數(shù): removeEventListener
document.removeEventListener('click', fn1, false);

事件的捕獲

事件流包括三個(gè)階段,事件捕獲階段,處于目標(biāo)階段,事件冒泡階段,首先發(fā)生的是事件捕獲,為截取事件提供機(jī)會(huì),然后是實(shí)際目標(biāo)接收事件,最后是冒泡階段

<body>
<div id="div1">
    <div id="div2">
        <div id="div3"></div>
    </div>
</div>

<script>

var oDiv1 = document.getElementById('div1');

var oDiv2 = document.getElementById('div2');

var oDiv3 = document.getElementById('div3');


oDiv1.addEventListener('click', function(ev){  

    alert( '我是捕獲階段'+this.id );
}, true);//在捕獲階段觸發(fā)


oDiv1.addEventListener('click', function(ev){  

    alert( '我是冒泡階段'+this.id );

}, false);

oDiv3.addEventListener('click', function(){
    alert('目標(biāo)階段'+this.id);
}, false);

</script>
</body>

鍵盤事件

keydown:當(dāng)鍵盤按鍵按下的時(shí)候觸發(fā);
能夠捕獲焦點(diǎn)的能夠觸發(fā)keydown事件;
//input
keyup : 當(dāng)鍵盤按鍵抬起的時(shí)候觸發(fā)

與鍵盤事件相關(guān)的事件對象的屬性值

event.keyCode : 數(shù)字類型 鍵盤按鍵的值 鍵值;
event.ctrlKey, event.shiftKey, event.altKey
當(dāng)一個(gè)事件發(fā)生的時(shí)候,如果ctrl || shift || alt 是按下的狀態(tài),相應(yīng)的屬性值返回true,否則返回false
示例: 留言板 當(dāng)輸入完成, 并且按住ctrl +enter(回車) ,添加留言

<body>
<input type="text">
<p></p>
<script>
var input = document.getElementsByTagName('input')[0];
var p = document.getElementsByTagName('p')[0];
input.addEventListener('keydown',function(ev){
    if(ev.keyCode===13 && ev.ctrlKey){
        var value=input.value
        var span=document.createElement('span');
        span.innerHTML=value;
        p.appendChild(span);
    }
},false)
</script>
</body>

讓div上下左右移動(dòng),使用鍵盤

<body>
    <div></div>
    <script>
        var div=document.getElementsByTagName('div')[0];
  //注意在window上加keydown事件!
        window.addEventListener('keydown',function(ev){
            if(ev.keyCode==37){
                var left=div.offsetLeft;
                left-=10;
                div.style.left=left+'px';
            }
            else if(ev.keyCode==38){
                var Top=div.offsetTop;
                Top-=10;
                div.style.top=Top+'px';
            }
            else if(ev.keyCode==39){
                var left=div.offsetLeft;
                left+=10;
                div.style.left=left+'px';
            }
            else if(ev.keyCode==40){
                var Top=div.offsetTop;
                Top+=10;
                div.style.top=Top+'px';
            }
        },false)
    </script>
</body>

oncontextmenu

自定義菜單環(huán)境

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    #contextmenu{
    display: none;
    width: 100px;
    height: 200px;
    background: red;
    position: absolute; 
}
    </style>
</head>
<body style="height: 2000px;">
<div id="contextmenu"></div>
    <script>
    var contextmenu = document.getElementById('contextmenu');
        // document.oncontextmenu = function(){
        //       alert(1);
        //       return false;//阻止默認(rèn)行為
        // }
        //自定義菜單環(huán)境
        window.addEventListener('contextmenu',function(ev){
            ev.preventDefault();//阻止默認(rèn)行為
            ev.stopPropagation();//阻止冒泡
            contextmenu.style.display='block';
            contextmenu.style.left=ev.clientX+window.scrollX+'px';
            contextmenu.style.top=ev.clientY+window.scrollY+'px';

        },false)
    </script>
</body>
</html>

拖拽div

拖拽原理

三大事件

onmousedown : 選擇元素
onmousemove : 移動(dòng)元素
onmouseup : 釋放元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> </title>
    <style> 
        div{
            width:100px;
            height:100px;
            background:#cac;
            position: absolute;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        var div=document.getElementsByTagName('div')[0];
        div.addEventListener('mousedown',function(ev){
            var disX=ev.clientX-div.offsetLeft;
            var disY=ev.clientY-div.offsetTop;
            function moveEvent(ev){
                div.style.left=ev.clientX-disX+'px';
                div.style.top=ev.clientY-disY+'px';
            }
            //移動(dòng)div時(shí),給window加事件,
            window.addEventListener('mousemove',moveEvent,false);
            function mouseUp(){
                window.removeEventListener('mousemove',moveEvent,false);
                div.removeEventListener('mouseup',mouseUp,false);
            }
            //添加onmouseup 事件,在里面放移出事件函數(shù)
            div.addEventListener('mouseup',mouseUp,false);
        },false)
        //封裝添加事件
        function bindEvent(obj,eventType,fn){
            obj.addEventListener(eventType,fn,false);
        }
        //封裝移出事件
        function bindEvent(obj,eventType,fn){
            obj.removeEventListener(eventType,fn,false);
        }
    </script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,724評論 2 10
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,528評論 0 8
  • 1.JQuery 基礎(chǔ) 改變web開發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級特性。 1....
    LaBaby_閱讀 1,515評論 0 2
  • 老師 補(bǔ)交的作業(yè) 上次沒畫好 昨天晚上重畫的 遲到已久的作業(yè) 希望老師原諒 感覺型好難找 還有鉛筆不好勾線
    達(dá)芬奇的萌辣麗莎閱讀 236評論 0 0
  • 從商業(yè)交易式的雇傭關(guān)系轉(zhuǎn)變?yōu)榛セ莼ダ南嗷ネ顿Y關(guān)系。 沒有員工,只有事業(yè)伙伴;沒有雇傭,只有合作;沒有固定工資,只...
    沙皮狗的憂傷事兒閱讀 213評論 0 0

友情鏈接更多精彩內(nèi)容