Javascript 事件对象

1.前言

  • 定义 :当一个Dom元素触发事件时,系统会生成一个对象来记录事件触发时的一些信息,比如鼠标坐标,按键信息,并将此作为参数传入回调函数中
document.querySelector('#box').onclick = function(e) {
    //IE8不需要传递参数,直接用window.event获取
   //最新的谷歌和火狐也支持window.event
    var e = e || window.event;
    console.log(e);
}
  • 通过HTML标签直接绑定事件时,可通过event直接访问事件对象
<button onclick="func(event,123)" id="btn">点我</button>
function func(event,num){
        console.log(event,num)
    }

2.点击位置的坐标信息

属性 说明
e.offsetX/e.offsetY 距离当前元素边框的距离
e.clientX/e.clientY 距离浏览器边框的可视距离
e.pageX/e.pageY 距离浏览器边框的距离(加上被滚动条隐藏的距离)
e.screenX/e.screenY 距离屏幕边框的距离

3.事件Dom

属性 说明
e.target 事件源头,通俗的说就是Dom嵌套时,最里面的Dom元素,利用这个属性可以做事件代理
e.currentTarget 当前回调函数对应的Dom,也就是函数中的this

4.阻止默认事件

  • 标准浏览器 e.preventDefault()
  • IE8浏览器 e.returnValue = false; (最新的谷歌火狐浏览器也支持这个,IE8以上不支持,奇葩)
  • return false可以阻止默认事件,但不能阻止冒泡(用addEventListener添加事件监听,不能使用return false来阻止)
<body>
    <a href="http://www.baidu.com/">百度一下</a>
</body>
<script>
window.onload = function(){
    var a = document.querySelector('a');
    a.onclick = function(e){
        e = e || window.event
        if (e.preventDefault) {
            //iE8没有这个属性,有这个属性的都是更高级的浏览器
            e.preventDefault();//阻止默认
        } else {
            //IE8
            e.returnValue = false;//阻止默认
        }
    }    
}
</script>

5.阻止事件传递

  • e.stopPropagation():用来阻止事件传递,包括冒泡和捕获(IE8浏览器用 e.cancelBubble=true最新的标准浏览器也支持这个)
<body>
    <ul>
        <li onclick="console.log('click li')">li</li>
    </ul>
</body>
<script>
    var ul = document.querySelector('ul')
    ul.addEventListener('click',function(e){
        console.log('click ul')
        //阻止传递(捕获)
        e.stopPropagation()
    },true)

    //点击后只打印click ul
</script>
<body>
    <ul onclick="console.log('click ul')">
        <li>li</li>
    </ul>
</body>
<script>
    var li = document.querySelector('li')
    li.addEventListener('click',function(e){
        console.log('click li')
        //阻止传递(冒泡)
        e.stopPropagation()
    },false)

    //点击后只打印click li
</script>
  • e.stopImmediatePropagation():不仅阻止事件传递,还可以阻止同元素同事件名称下的后续回调执行
<script>
    var li = document.querySelector('li')
    li.addEventListener('click',function(e){
        console.log('click li - 1')
        //阻止同类事件后续回调
        e.stopImmediatePropagation()
    },false)

    li.addEventListener('click',function(e){
        console.log('click li - 2')
    },false)

    //点击后只打印click li - 1
</script>
posted @ 2019-09-25 16:50  ---空白---  阅读(168)  评论(0编辑  收藏  举报