js学习第12天

### 键盘事件及键盘事件对象

  键盘事件的事件元素全都是document

     1: 键盘弹起的时刻触发 onkeyup

     2:键盘按下的时刻触发,缺陷单独了录入功能字符(shift,ctrl)也会触发

        onkeydown

     3:生成一个字符时触发  onkeypress

   键盘的事件对象  key是键盘录入的字符  e.key

   获取键盘录入的ASC码

        (e.keyCode)(e.which)(e.charCode)三种

        兼容写法:var myKeyCode = e.keyCode || e.which || e.charCode

        判断ctrl是否被按下:e.ctrlKey

### 事件绑定的三种方式

    1:通过html元素绑定

    2:通过js对象绑定

         两者都有缺陷 1>无法为同一元素多次绑定相同的事件

                     2>无法决定事件流的传递是冒泡还是捕获

    3:第三种事件绑定:事件监听       (先捕获再冒泡)

         dom对象.addEventListener("去掉on的事件","回调函数","[是否捕获]")

                                                        true为捕获false为冒泡,默认不写是false

         好处: 可以为同一元素多次绑定相同的事件

               可以决定事件流的传递是冒泡还是捕获

   

   

    解绑:1:js对象的解绑  目的就是将事件右值赋值为null

          2:事件监听的解绑 ,必须保证回调函数是同一个


 

### 事件的委托

     委托的概念:(你的事让别人干),依赖于冒泡机制,将子元素触发的事件通过父元素实现

         好处1:可以批量将子元素的事件绑定通过父元素实现,提高运行效率

         好处2:可以为还没绑定的子元素提前绑定

完美拖拽

<!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>
        #box{
            width: 100px;
            height: 100px;
            position: absolute;
            background-color: hotpink;
            left: 200px;
            top: 200px;
            cursor: move;
        }
    </style>
</head>
<body>
    <div id="box"></div>
</body>
</html>
<script>
      var obox = document.querySelector("#box")
      obox.onmousedown = function(evt){
                    var e = evt || event;
                    var offsetX = e.offsetX;
                    var offsetY = e.offsetY;
               document.onmousemove = function(evt){
                    var e = evt || event;
                   var left = e.pageX - offsetX;
                   var top = e.pageY - offsetY;
                   if(left <0){
                       left = 0
                   }
                   var maxleft = innerWidth - obox.offsetWidth;
                   if(left>maxleft){
                       left = maxleft;
                   }
                   
                   if(top<0){
                       top = 0;
                   }

                   var maxtop = innerHeight - obox.offsetHeight;
                   if(top>maxtop){
                       top = maxtop;
                   }

                    obox.style.left = left+ "px"
                    obox.style.top = top + "px"
               }  
               document.onmouseup = function(){
                document.onmousemove = null
               }   
      }




</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值