20.处理事件

19 篇文章 0 订阅

javascript基础

事件的三个阶段

  1. 捕获阶段: 事件从外层往里执行

  2. 当前目标阶段

  3. 冒泡阶段: 事件从里向外执行

    事件对象.eventPhase属性可以查看事件触发时所处的阶段

注意: box.onclick  
     box.attachEvent    只有冒泡事件

##冒泡的作用(常用)

  • 事件 委托:原理事件冒泡

  • 事件里面的默认参数,或者事件对象e/或者a 表示

    当事件发生时,可以获取与事件相关的数据

    e.target 表示真正出发事件的对象

    <body>
      <ul id="ul">
        <li>西施</li>
        <li>貂蝉</li>
        <li>昭君</li>
        <li>凤姐</li>
        <li>芙蓉姐姐</li>
      </ul>
      <script>
        // 事件委托: 原理事件冒泡
        var ul = document.getElementById('ul');
        ul.onclick = function (e) {
          // e 事件参数(事件对象): 当事件发生的时候,可以获取一些和事件相关的数据
          // 获取到当前点击的li
          // e.target 是真正触发事件的对象
          // console.log(e.target);
          // 让当前点击的li高亮显示
          e.target.style.backgroundColor = 'red';
        }
      </script>
    </body>
    作用:可以直接简化代码,这样做就不用像以前那样,给每个li都注册事件
         采用事件冒泡呢,就只需要给父级元素设置注册事件,单后通过e.target获取被点击li
    
    

事件的属性和方法

  • event.type 获取事件类型

  • e.eventPhase 获取事件的阶段(返回的是一个数值,了解)

  • clientX/clientY 所有浏览器都支持,窗口位置 有兼容性问题(常用)

  • pageX/pageY IE8以 前不支持,页面位置 有兼容性问题(常用)

  • event.target || event.srcElement 用于获取触发事件的元素 (事件委托,有兼容性问题)

  • e.currentTarget作用和this一样 事件处理函数在在发生的对象

  • event.preventDefault() 取消默认行为

  • return false 也是取消默认行为的执行,用来取消冒泡事件(常用)

    事件对象的属性:
      就比如说  btn.onclick
      我们给btn设置了点击一个事件,这个事呢,有很多属性,通过属性就能获取一些想要的数据
      e表示事件对象,e就有很多属性
      这里的e或者a(有浏览器兼容性问题)
      
      btn.onclick = function (e) {
        e = e || window.event;
      }
    

案例

  • 跟着鼠标飞的天使

    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <style>
        body {
          height: 1000px;
        }
        #ts {
          position: absolute;
        }
      </style>
    </head>
    <body>
      <img src="images/tianshi.gif" id="ts" alt="">
      <script>
        var ts = document.getElementById('ts');
        document.onmousemove = function (e) { 
          e = e || window.event;
          ts.style.left = e.pageX - 10 + 'px';
          ts.style.top = e.pageY - 10 + 'px';
        }
      </script>
    </body>
    
    
  • 获取鼠标在div内的坐标

    box.offsetleft  盒子左偏移
    box.ofeesettop  盒子上偏移
    getPage(e).pageX-this.offsetLeft;  //getPage(e).pageX是兼容性处理函数事先定义好的
    getPage(e).pageY- this.offsetTop; //getPage(e).pageY是兼容性处理函数事先定义好的
    
    
  • 获取页面滚动的距离

      <style>
        body {
          height: 1000px;
        }
      </style>
    </head>
    <body>
      <script src="common.js"></script>
      <script>
        document.onclick = function (e) {
          e = e || window.event;
          console.log(getPage(e).pageX);
          console.log(getPage(e).pageY);
    
        }
    // 获取鼠标在页面的位置,处理浏览器兼容性
       function getPage(e) {
          var pageX = e.pageX || e.clientX + getScroll().scrollLeft;
          var pageY = e.pageY || e.clientY + getScroll().scrollTop;
          return {
            pageX: pageX,
            pageY: pageY
          }
        }
      </script>
    </body>
    
    

阻止事件传播的方式

  • 标准方式 event.stopPropagation();
  • IE低版本 event.cancelBubble = true; 标准中已废弃

##常用的鼠标和键盘事件

  • onmouseup 鼠标按键放开时触发
  • onmousedown 鼠标按键按下触发
  • onmousemove 鼠标移动触发
  • onkeyup 键盘按键按下触发
  • onkeydown 键盘按键抬起触发
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我以为自己很帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值