用js原生方法封装跨浏览器注册事件的方法系列一(事件入门)

xiaoxiao2021-02-28  14

前言:

        本人是一个有着三年开发经验的前端开发人员,开始是android,现在是html5,在自学js的过程中发现前端最恶心的事情之一就是各种浏览器的兼容问题,本人自学js过程中主要参考的是李彦恢老师的js基础教程,但是在现代开发过程中,各种框架横行,使用原生js的地方实在太少,但是由于爱钻牛角尖,所以喜欢学js最基础的东西,毕竟基础功底还是很重要的,本文是我的第一篇学习博客,有不足之处,敬请谅解!

正文开始:

    javascript事件主要三种模型:内联模型,脚本模型,DOM2模型,

1.内联模型:

    内联模型其实就是大家写demo时最常用的一种事件绑定方法,从肉眼上很好区分,其最明显的特征就是js事件直接卸载html标签当中,主要有一下两种常见写法:

    第一种是直接在双引号里面写方法体,第二种是直接在html标签种绑定js函数;但是这两种写法违反了Html与javascipt代码层次分离的原则。所以在做生产项目时,不建议使用,但是自己写demo的时候用起来还是比较方便的。

2.脚本模型:

    脚本模型最大的优点就是实现的html和js代码的分离,使得代码维护变得更加方便!

    三:事件对象

   事件处理三要素:对象.事件处理函数(名称)=函数。

    其实上图中的事件处理函数名称不包括前面的“on”部份,点击事件的名称就是“ckick”,“on”只是一种事件前缀!

上图中的事件处理函数采用的是匿名函数的绑定方式,也可以采用独立函数进行绑定,实现效果实际上是一样的。如下图

相信大家也发现了,在上面的demo中,大家并没有发现这个所谓的对象到底是什么?请看下面:

上图中我们通过两种调用方式来打印函数体内的参数个数,可以发现直接调用的时候函数内部的参数个数为零!但是当我们把函数作为事件函数绑定到dom对象的时候,可以发现函数内部莫名的多个一个参数!这个参数其实就是我们要讲的事件对象,只是这个对象我们可以不用作为形式参数传递,在绑定的过程种会默认把这个对像传入方法体内,当然我们也可以显示的传入,如下图,无论是显示传递还是不传,实现效果都是一样的;

,虽然说实现效果是一样的,但是在不同浏览器之间的写法可能不一样,这也就带来了浏览器的兼容问题;因为直接接收事件对象是W3C的作为,ie浏览器是不支持的,但是ie浏览器自己定义了一个event对象,这个对象其实是window的一个属性,可以直接通过window.event.获得!因此在获取事件对象时可以采用以下兼容写法:

但是我亲自测试了一下发现ie9以上版本已经支持了W3C的事件对象写法,所以如果你的页面只运行在高版本的浏览器上面的话,上面的兼容写法就显得多余了。

W3C与Ie的兼容:

通过上图种的对比大家可以发现W3C标准和Ie标准在事件对象的属性发面有很大不同,但是在开发过程中我们必须对其进行兼容处理,所以我们必须以Ie为基础进行金融处理,因为它少嘛!

1.目标对象的兼容

W3c标准使用target属性,Ie采用srcElement属性,兼容写法如下

2.阻止冒泡的兼容:

W3c标准使用stopPropagation()方法,Ie采用cancelBubble=true属性,兼容写法如下

3:阻止默认事件的兼容

W3c标准使用preventDefault()方法,Ie采用returnValue=false属性,兼容写法如下

第一次写博客,虽然说都是简单的东西,但是真的好累,就当是给自己加深印象了,本文只是总结那些常见的兼容问题并不是进行js事件的详细讲解,本篇文章还有鼠标事件以及键盘事件的兼容处理,以后有时间慢慢加入进来,未完待续.......!

下篇文章会总结一下DoM2级事件绑定的兼容处理。

转载请注明原文地址: https://www.6miu.com/read-1600166.html

最新回复(0)