js-事件/拖拽/滚轮

事件的冒泡(Bubble)
所谓事件冒泡是指事件的向上引导,当后代元素上的事件被触发时,其他祖先元素的相同事件也会被触发;在开发中大部分时间冒泡都是有用的,如果不希望发生事件冒泡可以通过事件对象来取消冒泡:

事件对象取消方法加在后代上,可以取消祖先元素的事件响应。

box1.onclick = function (even) {
   alert("box1");
};
box2.onclick = function (even) {
   alert("box2");
   //点击box2时,box1就不会再响应事件了
   even.cancelBubble = true;
};

事件的委派
将事件统一绑定给元素的共同的祖先元素,这样后代元素上的元素触发时,会一直冒泡到祖先元素。

事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能
只绑定一次事件,即可应用到多个元素上,即使元素是后添加的。

var ul = document.getElementById("ul");
ul.onclick = function (even) {
    if (even.target.className == "link") {
       alert("li");
    }
};

事件的绑定
onclick只能绑定一个事件
使用addEventListener方法绑定多个事件
参数:

1、事件字符串"click",不要on
2、回调函数
3、是否在捕获阶段触发事件,一般都传false

button.addEventListener("click", function () {
      alert("li2");
}, false);

事件的传播
事件传播三个阶段:

1、捕获阶段:
在捕获阶段时从最外层祖先元素,向目标元素进行事件的捕获,但是默认此时不会触发事件;
2、目标阶段:
事件捕获到的目标元素,捕获结束开始在目标元素上触发事件;
3、冒泡阶段:
事件从目标元素向他的祖先元素传递,依次触发祖先元素上的事件。

其他事件方法见:https://www.jianshu.com/p/2565dd160588

拖拽
拖拽流程:

1、当鼠标在被拖拽元素上按下时,开始拖拽 onmousedown
2、当鼠标移动时被拖拽元素跟随鼠标移动 onmousemove
3、当鼠标松开时,被拖拽元素固定在当前位置 onmouseup

第一步
创建元素,并把设置绝对定位:position: absolute;

第二步

window.onload = function () {
   var box1 = document.getElementById("box1");
   box1.onmousedown = function (event) {
      var ol = event.clientX - box1.offsetLeft;
      var ot = event.clientY - box1.offsetTop;

      document.onmousemove = function (even) {
         var left = even.clientX - ol;
         var top = even.clientY - ot;
         box1.style.left = left + "px";
         box1.style.top = top + "px";
      };
      document.onmouseup = function () {
         document.onmousemove = null;
      };
      //当页面中还有其他文字,全选后进行拖拽元素会连文字一起拖拽,可以取消浏览器默认行为
       return false;
   };
}

滚轮的事件
onmousewheelDOMMouseScroll都废弃了
推荐使用wheel

box1.addEventListener("wheel", function () {
      //鼠标滚轮往上滚动deltaY<0,往上滚动deltaY>0
      if (even.deltaY < 0) { 
          //往上滚动变短
           box1.style.height = box1.clientHeight - 10 + "px";
       } else {
           //往下滚动变长
           box1.style.height = box1.clientHeight + 10 + "px";
       }
});

preventDefault可以取消addEventListener事件的默认行为;

键盘的事件
键盘事件一般会绑定给可以获得焦点的元素或document

属性 此事件发生在何时... IE F O W3C
onkeydown 某个键盘按键被按下。 3 1 No Yes
onkeypress 某个键盘按键被按下并松开。 3 1 9 Yes
input.onkeydown = function (even) {
      //keyCode 编码 
      alert(even.keyCode);
      //altKey是alt键被按下时返回true ctrlKey shiftKey同理
      console.log(even.altKey,even.ctrlKey,even.shiftKey);
      //返回false键盘输入无效
      return false;
};
input.onkeyup = function () {
};

keyCode编码参考:

.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容