18、事件对象

作者: 宁公子_5dce | 来源:发表于2019-08-26 21:36 被阅读0次

    事件:用户的行为

    事件对象 event :

    储存[描述]了事件更详细的信息.

    • 事件对象就是event,类似一个盒子[其实就是一个对象],里面装了跟当前事件想换的所有详细信息,用什么自己取出来就可以了.
      比如event中就有鼠标在页面中的坐标:
      event.clientX:页面的X轴坐标
      event.clientY:页面的Y轴坐标
      event中的信息有非常多,如果我们想查看,可以将event对象打印出来:
      console.log(event)
      但是注意,事件对象只能在事件内部使用或打印,如:
    document.onclick = function (){
        console.log(event)//在这里面打印或使用才可以
    }
    

    如果在事件外部打印,会返回undefined.

    下面列举几种常见的事件和事件对象:

    事件:

    单击鼠标:onclick

    用法:

    obj.onclick = function (){
        //当obj被点击时执行的代码
        alert('你点击了,我就执行!')
    }
    
    鼠标右键事件:oncontextmenu
    双击鼠标:ondblclick
    鼠标被按下:onmousedown
    鼠标被松开:onmouseup
    鼠标被移动:onmousemove
    鼠标移动到某元素上:onmouseover
    鼠标从某元素上移开:onmouseout

    事件对象:

    鼠标相对浏览器窗口可视区X轴坐标:event.clientX

    用法:

    obj.onclick = function (){
        //当obj被点击时执行的代码
        var x = evnet.clientX;
        alert('这里是页面X轴'+x+'px ')
    }
    
    鼠标相对浏览器窗口可视区Y轴坐标:event.clientY
    鼠标相对于屏幕X轴坐标:event.screenX
    鼠标相对于屏幕Y轴坐标:event.screenY
    浏览器可视区的宽高:
    document.body.clientWidth:宽度
    document.body.clientHeight:高度
    元素的宽高:
    obj.offsetWidth:宽度

    用法:

    obj.onclick = function (){
    var w = obj.offsetWidth;
        //当obj被点击时执行的代码
        alert('我的宽度是'+w+'px');
    }
    
    obj.offsetHeight:高度
    元素的位置信息:
    obj.offsetLeft:元素到左边的距离
    obj.offsetTop元素到上边的距离

    更多事件 W3school Event

    事件的绑定:

    在js中,同一个元素的相同事件只能绑定一个,再次绑定就会把之前的事件覆盖掉,所以,如果想要绑定多个相同事件,只能通过事件绑定方法来完成

    addEventListener():绑定事件方法
    • obj.addEventListener(事件字符串,绑定的函数,真假值)

    1.事件字符串:需要绑定的事件的字符串形式,注意,不加on,如:
    点击鼠标事件,原本是onclick,但是在这里面传入的是'click'.
    2.绑定的函数:绑定的事件触发后所执行的函数,可以是回调函数,也可以是一个函数名.
    3.真假值:是否阻止事件冒泡行为,默认是false,我们也可以写入false,大部分情况下保持默认就好.
    注意: 此方法并不兼容IE8及以下的浏览器,所以在ie中,我们使用的是另一个方法:

    • attachEvent(事件字符串,绑定的函数)
      它只有两个参数可传
      1.事件字符串:和上面的基本一致,只不过它需要加上on,如点击事件,需传入'onclick'
      2.绑定的函数:和上面的一致.
      讲到这个我们需要注意一点, addEventListener()绑定事件的执行顺序是先绑定先执行,就像1,2,3的顺序,但是attachEvent()绑定的事件顺序是先绑定后执行,就像3,2,1的顺序,但是这个不是很重要
      重点是: addEventListener()的回调函数中的this是绑定的元素,但attachEvent()的回调函数中的this 是window

    说到事件绑定不得不说一下事件的委托:

    事件的委托:

    比如有一下代码:

    <ul>
    <li>我的原来的li</li>
    <li>我是原来的li</li>
    </ul>
    <button>点我添加li</button>
    

    这是我们的html文档,原本ul中有两个li,我们给所有li添加单击响应函数,而且给按钮添加js代码,使其能够在被点击的时候向ul中添加li
    但是我们马上就会发现,点击原本就存在的li管用,但是点击js生成的li就不管用了,这是由于我们的功能是由li执行的,但他们并不能把自己的功能分给新添加的兄弟,所以新添加li并会触发函数,那怎么解决呢?

    • 我们把原本属于它的功能交给原本就存在的它的祖先元素来执行,这就是事件的委托
      把原本属于li的功能委托给原本就存在的它的父级:ul来执行
    ul.onclick = function(){
        if(event.target === li){
            alert('我弹出来了');
        }
    }
    

    所以我们还有补充一个新的event属性:

    event.target:返回触发事件的源目标
    • 简单来说,就是我们点击li它就会返回li,如果li中有个a标签,我们点击a标签,它就会返回a

    滚轮滚动事件:

    首先声明: 获取滚动方向,我们不看返回值大小,只看正负

    非火狐浏览器:onmousewheel
    • 获取滚动方向:event.wheelDelta
    • 向上滚返回120,向下滚返回-120
    火狐浏览器:DOMMouseScroll
    • 获取滚动方向:event.detail
    • 向上滚返回-3,向下滚返回3

    取消默认行为:

    什么是默认行为:
    如input的输入框,取消后则输入不进去内容
    如滚轮滚动浏览器滚动条自动滚动,取消则浏览器滚动条不会滚动
    由于某些原因,我们可能会遇到需要取消默认行为的地方

    return false
    

    相关文章

      网友评论

        本文标题:18、事件对象

        本文链接:https://www.haomeiwen.com/subject/ssljectx.html