2021年6月13日星期日

JavaScript 13 事件详解及应用

.addEventListener()  //同一个事件注册多个处理函数

<input type="button" value="按钮" id="btn"><script> btn = document.getElementById('btn');btn.addEventListener('click', function(){alert('hello world');})btn.addEventListener('click', function(){alert('123')})</script>

 

注册事件的方式:

1 btn.onclick=function(){}  //缺点:无法给同一个对象的同一个事件注册多个事件处理函数。因为'='为赋值,会把第二个function覆盖第一个function

2 btn.addEventListerner()  //可以付多个处理函数。但是有兼容性问题。IE9以后支持

3 .attachEvent()   //兼容问题,不讲了

处理注册事件的兼容性问题(addEventListener)

//处理事件兼容性问题//eventname不带on,click mouseover。 mouseoutfunction addEventListener(elemnet,eventName,fn){//判断当前浏览器是否支持addEventListener方法 if(element.addEventListener){  element.addEventListener(eventName,fn); //第三个参数默认是false }else if (elemnet.attachEvent) {  elemnet.attachEvent('on' + eventName,fn);  }else {  //相当于element.onclick = fn;  elemnet['on'+ eventName] = fn; }}

移除元素事件方式:(使元素事件变成一次性的事件,只能运行一次)

onclick = fn

btn.onclick = function(){ alert('123'); //移除事件 btn.onclick=null;}

addEventListener

btn.addEventListener('click',function(){alert(123)})//移除事件。因为事件的function是匿名函数访问不到,所以,要想移除上面的事件,函数必须有名字

fucntion btnclick(){alert(123);btn.removeEventListener('click',btnclcik); //移除写在函数中,直接一次性}btn.addE ventListener('click',btnclick);

处理移除兼容性问题

//处理事件兼容性问题function removeEventListener(elemnet,eventName,fn){//判断当前浏览器是否支持addEventListener方法 if(element.removeEventListener){  element.removeEventListener(eventName,fn); //第三个参数默认是false }else if (elemnet.detachEvent) {  elemnet.detachEvent('on' + eventName,fn);  }else {  //相当于element.onclick = fn;  elemnet['on'+ eventName] = null; }}

事件冒泡:https://www.cnblogs.com/moqing/p/5590216.html 

事件委托(原理是事件冒泡):事件委托不用给内部的每个标签都写事件,只需给他们的父标签写就好了

<ul id = 'ul'> <li>西施</li> <li>貂蝉</li> <li>昭君</li> <li>凤姐</li> <li>芙蓉姐姐</li></ul><script>//事件委托原理是事件冒泡var ul = document.getElementBuId('ul');//e是事件参数(事件对象):当事件发生的时候,可以获取一些和事件相关的数据ul.onclick = function(e){//获取到当前点击的li,e.target是真正触发事件的对象console.log(e.target);//让点击的li高亮显示e.target.style.backgroundColor = 'red';}</script>

 

时间对象

通过事件对象的属性,可以获取到事件发生的时候和事件相关的一些数据,btn.onclick = function(e){},e就是事件对象

处理时间对象的浏览器兼容性

e=e || window.event

e.eventPhase属性:代表事件的阶段。返回1,2,3。  1:事件捕获阶段    2:目标阶段(事件执行阶段)    3:冒泡阶段

e.target:获取真正触发事件的对象

e.currentTarget:事件处理函数所在的对象,和this一样

e.type  获取事件名称

btn.onclick = function(e){console.log(e.eventPhase);console.log(e.target);
console.log(e.currentTarget);}

 

获取鼠标在浏览器的可视区域的坐标

<div id = 'box'><script>var box = document.getElementById('box');box.onclick = function(e){e = e || window.event;//获取鼠标在浏览器的可视区域的坐标 不包含滚动轴console.log(e.clientX);console.log(e.clientY);//鼠标在当前页面的位置 包含滚动轴  page注意兼容性问题 console.log(e.pageX);console.log(e.pageY);}</script>

 

跟着鼠标走的图片:

<img src = "xxx.gif" id = "img"><srcipt>img = document.getElementById('img');document.onmousemove = function(e){e = e || window.event;img.style.left = e.pageX + 'px';img.style.top = e.pageY + 'px';}</srcipt>

 

输出页面滚动出去的距离

//横向滚动出去的距离console.log(document.body.scrollLeft);//纵向滚动出去的距离console.log(document.body.scrollTop);

 

获取鼠标在当前盒子内相对盒子的坐标:盒子内的坐标减去外部坐标

<div id = 'box'></div><script>//获取盒子的距离var box = document.getElementById('box');box.onclick = function(){console.log(this.offsetLeft);console.log(this.offsetTop);}</script>

<div id = 'box'></div><script>var box = document.getElementById('box');box.onclick = function(e){e = e || window.event;//获取鼠标在盒子中的位置 = 鼠标的坐标 - 盒子的坐标var x = e.pageX - this.offsetLeft; var y = e.pageY - this.offsetTop; }</script>

 

取消默认行为的执行:

事件函数末尾添加:return false;DOM标准方法:e.preventDefault(); //兼容问题

 

阻止事件冒泡:事件函数末尾添加:e.stopPropagation();

 

键盘事件:

keydown:  键盘按下的时候

keyup:键盘弹起的时候 

onkeydown和onkeyup的区别:keydown的时候我们所按的键还没落入文本框,而keyup的时候按的键已经落入文本框了









原文转载:http://www.shaoqun.com/a/800537.html

跨境电商:https://www.ikjzd.com/

俄罗斯灰色清关:https://www.ikjzd.com/w/1409

代购公司:https://www.ikjzd.com/w/1982

亚马逊 海外购:https://www.ikjzd.com/w/998

名人堂是什么:https://www.ikjzd.com/w/1082


.addEventListener()  //同一个事件注册多个处理函数<inputtype="button"value="按钮"id="btn"><script>btn=document.getElementById('btn');btn.addEventListener('click&#
中国制造网内贸站:https://www.ikjzd.com/w/1244
C2M:https://www.ikjzd.com/w/1245
英驰:https://www.ikjzd.com/w/1246
五洲会海购:https://www.ikjzd.com/w/1068
黑石集团:https://www.ikjzd.com/w/1339.html
ryder:https://www.ikjzd.com/w/1264.html
美丽人妻被快递員干 娇妻口述拿快递时在电梯里遭到快递員的侵犯:http://www.30bags.com/a/254503.html
口述:女友做人流后胸变大 我觉得特别丢脸:http://www.30bags.com/a/253728.html
我在日她时,她使劲叫 性感保姆的诱惑使我彻底发狂:http://www.30bags.com/a/254925.html
怎么样更容易怀孕?有这些方法 :http://lady.shaoqun.com/a/370136.html
在月经期间会怀孕吗?了解一下吧 :http://lady.shaoqun.com/a/370137.html
在怀孕准备期间应该做些什么?做好这些 :http://lady.shaoqun.com/a/370138.html

没有评论:

发表评论