经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
JavaScript 13 事件详解及应用
来源:cnblogs  作者:筱宇衡  时间:2021/6/15 9:11:00  对本文有异议

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

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

 

注册事件的方式:

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

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

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

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

  1. //处理事件兼容性问题
  2. //eventname不带on,click mouseover。 mouseout
  3. function addEventListener(elemnet,eventName,fn){
  4. //判断当前浏览器是否支持addEventListener方法
  5. if(element.addEventListener){
  6. element.addEventListener(eventName,fn); //第三个参数默认是false
  7. }else if (elemnet.attachEvent) {
  8. elemnet.attachEvent('on' + eventName,fn);
  9. }else {
  10. //相当于element.onclick = fn;
  11. elemnet['on'+ eventName] = fn;
  12. }
  13. }

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

onclick = fn

  1. btn.onclick = function(){
  2. alert('123');
  3. //移除事件
  4. btn.onclick=null;
  5. }

addEventListener

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

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

处理移除兼容性问题

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

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

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

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

 

时间对象

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

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

  1. e=e || window.event

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

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

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

e.type  获取事件名称

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

 

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

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

 

跟着鼠标走的图片:

  1. <img src = "xxx.gif" id = "img">
  2. <srcipt>
  3. img = document.getElementById('img');
  4. document.onmousemove = function(e){
  5. e = e || window.event;
  6. img.style.left = e.pageX + 'px';
  7. img.style.top = e.pageY + 'px';
  8. }
  9. </srcipt>

 

输出页面滚动出去的距离

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

 

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

  1. <div id = 'box'>
  2. </div>
  3. <script>
  4. //获取盒子的距离
  5. var box = document.getElementById('box');
  6. box.onclick = function(){
  7. console.log(this.offsetLeft);
  8. console.log(this.offsetTop);
  9. }
  10. </script>
  1. <div id = 'box'>
  2. </div>
  3. <script>
  4. var box = document.getElementById('box');
  5. box.onclick = function(e){
  6. e = e || window.event;
  7. //获取鼠标在盒子中的位置 = 鼠标的坐标 - 盒子的坐标
  8. var x = e.pageX - this.offsetLeft;
  9. var y = e.pageY - this.offsetTop;
  10. }
  11. </script>

 

取消默认行为的执行:

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

 

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

 

键盘事件:

keydown:  键盘按下的时候

keyup:键盘弹起的时候 

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

原文链接:http://www.cnblogs.com/xiaoyuheng/p/14879827.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号