当前位置: 首页 > Web前端 > HTML5

浏览器事件分析

时间:2023-04-05 18:52:22 HTML5

JavaScript、浏览器和事件的关系JavaScript程序采用异步事件驱动编程(Event-drivenprogramming)模型,维基百科解释为:事件驱动编程(Event-drivenprogramming))是一种计算机编程模型。该模型的程序运行过程是由用户动作(如鼠标按键、键盘按键动作)或来自其他程序的消息决定的。与批处理编程(batchprogramming)相比,程序运行的过程是由程序员决定的。批处理编程是初级编程教学课程中的一种方式。然而,事件驱动编程的设计模型是在交互式程序的情况下诞生的。进入。因为用户的行为是不确定的。这种场景是传统的同步编程模型无法解决的,因为你不能等到用户完成操作之后再执行下面的代码。所以javascript中使用了异步事件,也就是说:js中的事件是异步执行的。事件驱动程序模型的基本实现原理基本上都是使用事件循环(EventLoop),涉及到浏览器事件模型和回调原理。在JavaScriptDOM和BOM模型中,setTimeout和XMLHTTPRequest等API也是异步的,不是JavaScript语言本身的原生API。事件绑定的方法事件绑定有3种方法:直接在DOM元素上内联绑定,通过设置on+eventType来绑定事件处理器。例如:clickme这种方法有两个缺点:事件处理程序和HTML结构混合在一起,不符合到MVX规范。为了将内容、表现和行为分开,我们应该避免这种写作风格。这样写的代码被判断为全局作用域,可能会引起命名冲突,导致不可预见的严重后果。直接在DOM元素上重写事件回调函数在DOM元素API上使用on+eventType属性varel=getElementById('button');//button是一个$("#button").click(function(){//注册一个点击事件,当然你也可以用其他事件名的函数注册其他事件console.log("clicked");});方法2//不会发生覆盖,有利于释放,不是动态操作事件这里//注册一个事件$("#button").bind("click",function(){//注册一个点击事件,当然你可以用其他事件名的函数注册其他事件console.log("clicked");});//当然也可以这样写这,为事件指定命名空间$(document).bind('click.handler1',function(){console.log(1);})$(document).bind('click.handler2',function(){console.log(2);})//释放一个事件$("#button").unbind(".handler1");//释放元素上handler1命名空间中的事件$("#button").unbind('click.handler2');//释放元素上的click.handler2事件$("#button").unbind('click');//释放元素上的所有点击事件$("#button").unbind()//释放元素上的所有事件//bind()方法也接受3个参数Form,这里不再赘述,如果有兴趣的可以自己查相关资料方法3://不会覆盖,但不利于释放,可以动态操作事件,靠事件冒泡//注册事件$(document).delegate(".item","click",function(){控制台.log(this.innerHTML);});//第一个是选择器,第二个是事件类型,第三个是事件函数//移除事件$(document).undelegate(".item","click",handler);//移除元素上的指定事件$(document).undelegate(".item","click");//移除元素上的所有点击事件$(document).undelegate(".item");//移除元素上的所有事件方法4://不会被覆盖,但不利于释放,可以动态操作事件,不依赖于事件冒泡//注册事件#(".item")。live("click",function(){console.log(this.innerHTML);})//第一个参数为事件类型,第二个参数为事件函数//移除事件$(".item").die(“点击”,处理程序);//移除元素上的指定点击事件$(".item").die("click");//去除元素上的所有点击事件两种简化方法//hover方法$("#button").hover(function(){//鼠标移入时的动作,不冒泡},function(){//鼠标移出时的动作,不冒泡});//切换方法$("#button").toggle(function(){//第一次点击时的动作},function(){//第二次点击时的动作},.../*可以放置多个函数,依次响应*/);eventtrigger//不能触发addEventListener和attachEvent//主动触发一个事件$("#button").trigger("click");//触发所有点击事件$("#button").trigger("click.handler1");//触发所有click.handler1事件$("#button".trigger(".handler1");//触发handler1命名空间中的所有事件$("#button").trigger("click!");//触发所有没有命名空间的点击事件$("#button").trigger(event);//触发与该元素上的event事件相同的事件$("#button").trigger({type:"click",sync:true});//触发点击事件,同步