javascript尚学堂百战程序员2html event应用_第1页
javascript尚学堂百战程序员2html event应用_第2页
javascript尚学堂百战程序员2html event应用_第3页
javascript尚学堂百战程序员2html event应用_第4页
javascript尚学堂百战程序员2html event应用_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

HTMLevent事件应用课程介绍课程大纲1.非IE中的event事件2.IE中的event事件3.兼容性问题4.event一些其他常用属性5.event案例1.非IE中的event事件1.1event对象及获取event对象方法1.2event中常用的属性和方法 概念:当domtree中某个事件被触发的时候,会同时自动产生一个用来描述事件所有的相关信息(比如出发事件的元素、或者是事件的类型)的对象,这个对象就是event(事件对象)。 获取方式:

(1)直接通过event来获取

(2)还可以通过函数传参数的形式来使用,一般而言我们使用【形参e或event】来代替1.1event对象document.querySelector("#d1").onclick=function(e){ console.log(e);};

document.querySelector("#d1").onmousemove=function(eve){ console.log(eve);}

document.querySelector("#d1").onclick=function(){ console.log(event);}; 因为event对象是用来描述【发生的事件的信息】的,而event对象当中所提供的一系列属性和方法正是用来获取这些信息的途径。【type属性】 type属性用来获得【当前触发事件】的类型,此属性只读。 document.getElementById(“d1”).onclick=function(){

console.log(event);

console.log(event.type);//依赖于事件的触发而存在,只读属性

};1.2event中常用的属性和方法【bubbles属性】 bubbles属性用来获得【当前触发事件的类型】是否冒泡,如果当前事件类型支持冒泡则返回true,否则返回false。

必须注意的是:bubbles属性指的是该事件是否冒泡。和事件处理机制无关!!!! document.getElementById(“d1”).onclick=function(){

console.log(event.bubbles);

}; document.getElementById(“d1”).addEventListener('mouseenter',function(e){

console.log(e.bubbles);

}); 因为鼠标【点击事件】这个事件本身支持冒泡。 因此当存在点击事件被触发后,event对象的bubbles属性返回的就是true,表示当前事件支持冒泡。 但绝不是把这个事件以冒泡的形式继续传递下去!【eventPhase属性】 eventPhase:事件传导至【当前节点】时处于什么的状态。

1:事件处于捕获状态 2:事件处于真正的触发者

3:事件处于冒泡状态

d1.onclick=function(e){console.log(this,e.eventPhase);};

d2.onclick=function(e){console.log(this,e.eventPhase);};

document.onclick=function(e){console.log(this,e.eventPhase);}; d1.addEventListener('click',function(e){console.log(this,e.eventPhase)},true);

d2.addEventListener('click',function(e){console.log(this,e.eventPhase)},true);

document.addEventListener('click',function(e){console.log(this,e.eventPhase)},true);

【target属性和currentTarget属性】

target:返回事件真正的触发者

currentTarget:返回事件的监听者(触发的事件绑定到了哪个节点,就返回谁) <divid="d1">d1

<divid="d2">d2</div>

</div>

document.getElementById("d1").onclick=function(e){

console.log(e.target);

console.log(e.currentTarget);

};【stopPropagation()方法】 event对象中提供了一个名为stopPropagation的方法。用来阻止事件从当前节点传播到下一个节点。 <divid="d1">d1

<divid="d2">d2

<divid="d3">d3</div>

</div>

</div> document.getElementById(“d1”).onclick=function(){console.log(‘d1do’);};

document.getElementById(“d2”).onclick=function(){console.log(‘d2do’);};

document.getElementById(“d3”).onclick=function(){

console.log(‘d3do’);

event.stopPropagation();//事件分发在此被截止

};ps:stopPropagation方法虽然能够阻断事件的传播,但是并不会影响同一节点上的其他事件句柄。【preventDefault()方法】 event对象中提供了一个名为preventDefault的方法,用来取消当前节点的默认行为(譬如超级链接的点击跳转行为)。该方法没有返回值。 a_link.onclick=function(){

event.preventDefault(); };【cancelable()方法】 event对象中提供了一个名为cancelable的方法,用来判断当前节点能否使用preventDefault方法来取消默认行为。如果可以则返回true,否则返回false。 a_link.onclick=function(){

console.log(event.cancelable); };2.IE中的event事件2.1IE中的event对象与非IE下的区别2.2IE中的event对象的常用属性和方法2.1IE中的event对象与非IE下的区别

event对象在不同的浏览器下的区别:

(1)非IE下event的值默认为undefined,而IE中event的值默认为null。

(2)非IE下可以随意通过dom0或dom2中的参数来使用event,而IE中dom0级无法 使用传参的形式来使用event。(dom2可以)

ps:因为event本身是归属于window的一个属性,因此我们可以在函数中通过

vareve=e||window.event 来解决获取event对象的兼容性问题

在这里单独把IE中情况提出来说明,并不是说【非IE中】我们所介绍的event的属性和方法在IE中完全不适用,而是在IE下存在某些属性的赋值方式和非IE中略微有些不同。因此在这里特作说明。2.2IE中的event对象的常用属性和方法【srcElement属性】

srcElement属性代表事件真正的触发者,等同于非IE下的target属性。 因此,为了在不同的浏览器下解决获取target的兼容性问题,可以采用如下的写法:

vartarget=eve.target||eve.srcElement;

【cancelBubble属性】 cancelBubble属性用来阻止事件在当前节点上的冒泡行为。 作用类似于非IE下的stopPropagation方法。

语法:

event.cancelBubble=false;(默认值)

event.cancelBubble=true;(可以取消冒泡)

ps:stopPropagation方法表示阻断事件传递,而cancelBubble属性则仅阻断事件冒泡。【returnValue属性】 returnValue属性用来设置【是否取消当前节点的默认行为】 作用类似于非IE下的preventDefault方法 语法: event.returnValue=false;(取消默认行为)

event.returnValue=true;(默认值)3.兼容性问题 通过对IE下event的方法和非IE的方法的介绍,能够感觉到两种情况的很多属性和方法大致都相同,只不过会在某些特殊方法上面存在不同的兼容性写法。因此我们可以提出一些同时满足不同浏览器兼容性的写法。 属性的兼容性写法我们已经说过:

vartarget=eve.target||eve.srcElement; vareve=eve||window.event 方法的兼容性写法我们也可以仿照这个来进行编写。思路如下:

(1)因为两种情况下的event对象获取方式并不同,所以希望能够自定义一个对象来替代event对象的使用。 (2)因为想要自定义对象在功能上和系统event对象的方法相同,所以需要给自定义对象添加方法参考代码:varEvent={ stop:function(){

if(event.stopPropagation){

event.stopPropagation();

}else{

event.cancelBubble=true;

}

},

quxiao:function(){

if(event.preventDefault){

event.preventDefault();

}else{

event.returnValue=false;

}

}

};目的: 解决不同浏览器下event的兼容性问题, 并可适当进行扩展。4.鼠标滚轮事件滚轮就是鼠标上的滚轮,它滚动的时候触发事件oDiv.onmousewheel=function(event){ oDiv.innerHTML=event.wheelDelta;}onmousewheel就是鼠标滚动事件,mouse鼠标,wheel就是轮子。event参数最最重要的事就event.wheelDelta属性,表示滚动的方向。这是浏览器的规定:鼠标往上滚,120鼠标往下滚,-120火狐浏览器滚轮事件火狐浏览器不兼容,火狐使用自己的专用事件DOMMouseScroll,并且这个事件只能通过标准的DOM2级的事件绑定方式添加。oDiv.addEventListener("DOMMouseScroll",function(event){ oDiv.innerHTML=event.detail; },false);火狐添加的事件,是它自己的专门事件DOMMouseScroll,表示滚动方向的事件的属性叫做event.detail。detail就是细节的意思。反着的,滚动方向往上,-3;滚动方向往下,3。兼容性写法functionmousewheelhandler(event){ event=event||window.event;//→解决IE6、7、8和高级浏览器的不兼容 //Chrome、IE用的是event.wheelDelta; vardirection=0; if(event.wheelDelta){//→解决火狐和其他浏览器的不兼容 direction=event.wheelDelta>0?1:-1; }elseif(event.detail){ //火狐用的是event.detail; direction=event.detail>0?-1:1; } oDiv.innerHTML=direction; returndirection;}//给IE、CHrome添加事件oDiv.onmousewheel=mousewheelhandler;//给火狐添加事件oDiv.addEventListener("DOMMouseScroll",mousewheelhandler,false);4.event中的一些其他属性(1)返回事件触发点距离视口的距离

e.clientX

e.clientY(2)返回事件触发点距离页面的距离e.clientx+滚过的距离

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论