JS事件对象

2017-09-19  本文已影响17人  哪树繁花

概念

当某个对象触发了某种事件时,所发生的一切详细信息保存在一个临时的地方,这个地方叫做事件对象(黑匣子)

获取事件对象

要考虑兼容
标准浏览器:通过事件触发函数的第一个形参获得
arguments:伪数组,接收函数调用时所传递的所有实参
IE9以下:通过内置的全局对象window.event获得

兼容:
oDiv.onclick = function(event){
var e = event || window.event;
};

使用事件对象

获取鼠标按键的编码
event.button
oDiv.onmousedown = function(event){
    //var e = event || window.event;
    //console.log(e.button);

    console.log(getButton(event));
};
//兼容
function getButton(event){
    var e = event || window.event;
    if(e){
        return e.button;
    } else if(window.event) {
        switch(e.button){//  IE左中右键值为 1 4 2
            case 1:return 0;
            case 4:return 1;
            case 2:return 2;
        }
    }
}
获取鼠标坐标值

可视区坐标值
event.clientX, event.clientY
相对坐标值
event.offsetX, event.offsetY
绝对坐标值(页面坐标值)
event.pageX, event.pageY
屏幕坐标值
event.screenX, event.screenY

获取键盘的编码
onkeydown/onkeyup  //监听整个键盘
    event.keyCode  //字母的大写的值
onkeypress
    event.keyCode //火狐返回0,google和IE可区分字母大小写
    event.charCode, event.which//火狐,google可区分大小写,IE不识别
兼容
oDiv.onkeypress = function(event){
    var e = event || window.event;
    var keyValue = e.keyCode || e.charCode || e.which;
    return keyValue;
}

组合键(表示按住这些键的同时)
event.ctrlKey, event.shiftKey, event.altKey
demo:

document.onclick = function(event){
  event = event || window.event;
  if(event.ctrlKey){
    alert("hello");//按住 ctrl 的时候点击鼠标  
  }
};
document.onkeydown = function(event){
  event = event || window.event;
  var key = event.keyCode || event.charCode || event.which;
  if(event.shiftKey && event.key == 13){
    alert("你同时按下了shift 和 enter(回车)");
  }
};

事件流(系统默认采用事件冒泡)

事件捕获(IE,opera不支持)

由祖先节点依次向他的子节点依次传递事件的过程

事件冒泡

由子节点一次向他的祖先节点传递事件的过程,成为事件冒泡,如果那个祖先节点有事件触发函数,则执行该函数。具体表现为,我在一个子元素上添加了一个点击事件,他的所有父级元素上也都添加了点击事件,当我点击这个子元素的时候,程序会依次从子元素逐级向上调用点击事件。下面的 demo 里会依次弹出:btn , box , body

阻止事件冒泡

e.stopPropagation();//只有标准能用
e.cancelBubble = true;//都能用
demo:

<div id="box">
    <input id="btn" type="button" >
</div>
<script type="text/javascript">
    /*
    事件冒泡
    清除事件冒泡:
    e.stopPropagation();IE不能用
    e.cancelBubble();都能用,但还是要做兼容(滑稽~)
    e.cancelBubble?e.cancelBubble = true : e.stopPropagation();
     */
    var btn = document.getElementById("btn");
    var box = document.getElementById("box");
    btn.onclick = function(event){

        var e = event || window.event;
        //e.cancelBubble = true;
        //e.stopPropagation();
        e.cancelBubble?e.cancelBubble = true : e.stopPropagation();
            alert("btn");
        };
        box.onclick = function(){
            alert("box");
        };
        document.body.onclick = function(){
            alert("body");
    };

</script>
上一篇下一篇

猜你喜欢

热点阅读