JavaScript学习笔记13

  • 目录

    事件对象

    e.target和this的区别

    e.type返回事件类型

    e.preventDefault()方法阻止默认行为。

    e.returnValue阻止默认行为

    return false也能阻止默认行为

    阻止事件冒泡

    标准写法:stopPropagation()方法 ;

    e.cancelBubble = true;

    事件委托、事件代理(事件委派)

    原理:不是给每个子节点单独设置事件监听,而是事件监听器设置在父节点上,然后利用冒泡原理影响设置每个子节点

    鼠标事件

    禁止鼠标右键菜单contextmenu

    语法:document.addEventListener('contextmenu',function(e){e.preventDefault();})

    禁止鼠标选中(selectstart开始选中)

    语法:document.addEventListener('selectstart',function(e){e,preventDafult();})

    鼠标事件对象

    e.client x(y)鼠标在可视区的x与y坐标

    e.pagex(y)鼠标相对于文档页面的x与y坐标

    e.screenx(y)返回鼠标相对于电脑屏幕的x与y坐标

    跟随鼠标的图片案例

    常见键盘事件

    onkeyup:某个键盘按键被松开时触发

    onkeydown某个键盘按键被按下时触发

    onkeypress某个键盘被按下时触发(但是他不识别功能键,如ctrl,shift,箭头等)

    三个事件执行顺序:keydown--keypress--keyup


  • 事件对象

    • event就是 事件对象,通常写在侦听器函数的小括号里面,当形参来看

    • 事件对象只有有了事件才会发生

    • 事件对象是系统给我们创建的,不需要传递参数

    • 事件对象是事件的一些列相关数据集合,跟时间相关。例如鼠标点击里面就包含了鼠标点击的坐标相关信息

    • 事件对象可以自己命名:event、evt、e

    • 事件对象有兼容性问题。IE678需要通过window.event

    • 解决兼容性问题e||window.event

    • 案例

      <!DOCTYPE html>
      <html lang="en">
      
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Document</title>
      
      </head>
      
      <body>
          <div>
              123
          </div>
          <script>
              var div = document.querySelector('div');
              //1.传统写法
              /* div.onclick = function (event) {//event就是一个事件对象,写到侦听器里面,当做形参来看
                  console.log(event);
              } */
              //2.高级写法
              div.addEventListener('click', function (event) {
                  console.log(event);
              })
          </script>
      
      </body>
      
      </html>

    • 结果

    • e.target和this的区别

      • e.target指向我们点击了哪个元素,就返回哪个元素(IE678不兼容)

      • this哪个元素绑定了点击事件,就返回哪个元素

      • currentTarget与this非常相似(IE678不兼容)

      • 案例

        <!DOCTYPE html>
        <html lang="en">
        
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
        
        </head>
        
        <body>
            <div>123</div>
            <ul>
                <li>abc</li>
                <li>abc</li>
                <li>abc</li>
            </ul>
            <script>
                //1.e.target返回的是触发事件对象(元素)  this返回的是绑定事件对象(元素)
                var div = document.querySelector('div');
                div.addEventListener('click', function (e) {
                    console.log(e.target);
                    console.log(this);
                })
                //2.区别
                var ul = document.querySelector('ul');
                ul.addEventListener('click', function (e) {
                    //给ul绑定事件,那么无论点击哪个li,this都指向ul
                    console.log(this);
                    console.log(e.target);//此时如果点击li,则返回的是li
                })
            </script>
        
        </body>
        
        </html>

      • 结果

    • e.type返回事件类型

      • 就是什么样的事件触发了函数

    • e.preventDefault()方法阻止默认行为。

      • 让连接不跳转,提交按钮不提交

    • e.returnValue阻止默认行为

      • 这是一个属性

    • return false也能阻止默认行为

      • 但是return false后面的代码不在执行,而且只限于传统的注册方式

      • 案例

        <!DOCTYPE html>
        <html lang="en">
        
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
        
        </head>
        
        <body>
            <div>123</div>
            <a href="http:/www.baidu.com">百度</a>
            <form action="http:/www.baidu.com">
                <input type="submit" name="sub" id="" value="提交">
            </form>
            <script>
                //1.返回事件类型
                var div = document.querySelector('div');
                div.addEventListener('click', fn);
                div.addEventListener('mouseover', fn);
                div.addEventListener('mouseout', fn);
        
                function fn(e) {
                    console.log(e.type);
                }
                //2.阻止默认行为  让链接不跳转  让提交按钮不提交
                var a = document.querySelector('a');
                a.addEventListener('click', function (e) {
                    e.preventDefault();//这是一个方法
                })
                /* //3.传统方式阻止默认行为
                a.onclick = function (e) {
                    e.preventDefault;//这是一个方法
                }
                //4.考虑兼容性问题的传统方式阻止默认行为
                a.onclick = function (e) {
                    e.returnValue;//这是一个属性
                }
                //5.return false阻止默认行为  
                 */
        
        
            </script>
        
        </body>
        
        </html>

      • 结果

    • 阻止事件冒泡

      • 事件冒泡:开始时由最具体的元素接收,然后逐级向上传播到DOM最顶层节点

      • 标准写法:stopPropagation()方法 ;

        • stop停止,Propagation传播

      • e.cancelBubble = true;

        • cancel取消,bubble泡泡

      • 案例

        <!DOCTYPE html>
        <html lang="en">
        
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
        
        </head>
        
        <body>
            <div class="father">
                <div class="son">son盒子</div>
            </div>
            <script>
                //2.冒泡阶段  如果addEventListener第三个参数是false那么则处于冒泡阶段
                var son = document.querySelector('.son');
                son.addEventListener('click', function (e) {
                    alert('son');
                    e.stopPropagation();
                }, false);
        
                var father = document.querySelector('.father');
                father.addEventListener('click', function (e) {
                    alert('father');
                }, false);
        
            </script>
        
        </body>
        
        </html>

      • 结果

    • 事件委托、事件代理(事件委派)

      • 原理:不是给每个子节点单独设置事件监听,而是事件监听器设置在父节点上,然后利用冒泡原理影响设置每个子节点

      • 作用:只操作一次DOM,提高程序性能

        • 案例
          <!DOCTYPE html>
          <html lang="en">
          
          <head>
              <meta charset="UTF-8">
              <meta http-equiv="X-UA-Compatible" content="IE=edge">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <title>Document</title>
          
          </head>
          
          <body>
              <ul>
                  <li>多云</li>
                  <li>多云</li>
                  <li>多云</li>
                  <li>多云</li>
              </ul>
              <script>
                  //给父节点添加一个侦听器,利用事件冒泡影响每个子节点
                  var ul = document.querySelector('ul');
                  ul.addEventListener('click', function (e) {//点击li,但是li会有事件冒泡,会往上传给ul,ul会执行下面代码
                      //alert('多云');
                      e.target.style.backgroundColor = 'pink';
                  })
              </script>
          
          </body>
          
          </html>

        • 结果

    • 鼠标事件

      • 禁止鼠标右键菜单contextmenu

        • 控制何时显示上下文菜单

        • 语法:document.addEventListener('contextmenu',function(e){e.preventDefault();})

      • 禁止鼠标选中(selectstart开始选中)

        • 语法:document.addEventListener('selectstart',function(e){e,preventDafult();})

        • 案例
          <!DOCTYPE html>
          <html lang="en">
          
          <head>
              <meta charset="UTF-8">
              <meta http-equiv="X-UA-Compatible" content="IE=edge">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <title>Document</title>
          
          </head>
          
          <body>
              我是一段不愿意分享的文字
              <script>
                  //1.contextmenu禁用右键菜单
                  document.addEventListener('contextmenu', function (e) {
                      e.preventDefault();
                  })
                  //2.禁止选中文字
                  document.addEventListener('selectstart', function (e) {
                      e.preventDefault();
                  })
              </script>
          
          </body>
          
          </html>

        • 结果

         

    • 鼠标事件对象

      • event对象代表事件状态,跟事件相关的一系列信息集合

      • MouseEvent鼠标事件对象

      • KeyboardEvent键盘事件对象

      • e.client x(y)鼠标在可视区的x与y坐标

      • e.pagex(y)鼠标相对于文档页面的x与y坐标

      • e.screenx(y)返回鼠标相对于电脑屏幕的x与y坐标

      • 案例
        <!DOCTYPE html>
        <html lang="en">
        
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
            <style>
                body {
                    height: 3000px;
                }
            </style>
        
        </head>
        
        <body>
            <script>
                document.addEventListener('click', function (e) {
                    //1.client 鼠标在可视区的x与y坐标 ,不能根据滚动条显示坐标
                    console.log(e.clientX);
                    console.log(e.clientY);
                    //2.page  相对于文档页面的x与y坐标 ,能根据滚动条显示坐标
                    console.log(e.pageX);
                    console.log(e.pageY);
                    //3.screen 鼠标在电脑屏幕的x与y坐标
                    console.log(e.screenX);
                    console.log(e.screenY);
                })
            </script>
        
        </body>
        
        </html>

      • 结果

       

    • 跟随鼠标的图片案例

      • 鼠标移动事件:mousemove  只要鼠标移动1px,就会触发事件

      • 在页面中移动,给document注册事件

      • 图片要移动距离,而且不占位置,使用绝对定位

      • 核心原理:每次移动鼠标,会获得最新的鼠标坐标,把这个x坐标和y坐标作为图片的top值和left值

      • 注意:一定要给left和top拼接一个'px'单位

      • 如果想要鼠标在图片中间,则需要将图片往上(往左)走高度和宽度的一半

      • 案例

        <!DOCTYPE html>
        <html lang="en">
        
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
            <style>
                img {
                    position: absolute;
                }
            </style>
        
        </head>
        
        <body>
            <img src="images/maomi.jpg" alt="">
            <script>
                var pic = document.querySelector('img');
                document.addEventListener('mousemove', function (e) {
                    //1.mousemove只要鼠标移动1px  就会触发事件
                    // console.log(1);
                    //2.得到最新鼠标坐标
                    var x = e.pageX;
                    var y = e.pageY;
                    console.log('x坐标是' + x, 'y坐标是' + y);
                    //3.一定要给left和top拼接'px'
                    pic.style.left = x - 131 + 'px';//-131指图片往左走宽度的一半
                    pic.style.top = y - 131 + 'px';//-131指图片往上走高度的一半
        
                })
            </script>
        
        </body>
        
        </html>

      • 结果

         

    • 常见键盘事件

      • onkeyup:某个键盘按键被松开时触发

      • onkeydown某个键盘按键被按下时触发

      • onkeypress某个键盘被按下时触发(但是他不识别功能键,如ctrl,shift,箭头等)

      • 三个事件执行顺序:keydown--keypress--keyup

      • addEventListener不需要加on

      • onkeypress和前面2个的区别是,他不识别功能键

      • 案例

      • 结果

JavaScript基础语法-dom-bom-js-es6新语法-jQuery-数据可视化echarts

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值