事件的方法(常见)

事件

1,DOM常见事件

浏览器或者用户做的一些事情统称为事件;是元素天生自带的一种行为。

1.1鼠标事件:鼠标动作时触发的事件

onmouseover鼠标划入事件
onmouseoout鼠标划出事件
onmousemve鼠标移动事件
onmousedown鼠标点击事件
onmouseup鼠标抬起事件
onclick鼠标点击事件
ondblclick鼠标双击事件
onmouseenter鼠标划入事件(不支持冒泡)
onmouseleave鼠标划出事件(不支持冒泡)

1.2键盘事件事件
  • onkeydown键盘点击事件
  • onkeypress键盘点击事件(在onkeydown之后onkeyup之前执行)
  • onkeyup键盘抬起事件
1.3表单元素事件

onfoucs获得焦点事件
onblur失去焦点事件
onchange输入的被改变和失去焦点事件
oninput输入的值被改变事件

1.4系统事件

window.onload页面所有资源加载完成后触发
window.onresize当前窗口尺寸发生变化时触发
window.onscroll滚动条滚动时触发

1.5移动端事件

ontouchstart触摸开始时触发
ontouchend触摸结束时触发
ontouchmove触摸滑动是触发
移动端使用click大概有300ms的延迟

2,事件对象

在事件触发时,浏览器传递给事件函数的第一个实参;其中包含了本次事件触发的具体信息

let box = document.querySelector('#box');
box.onclick = function (e) {
console.log(e); // e 一般称为事件对象,window.event 
// 在IE浏览器下没有e,但是会把事件的信息挂载到
// e.clientX 鼠标点击的位置相对于当前浏览器可视窗口的左边距离
// e.clientY 鼠标点击位置相对于当前浏览器可视窗口的上边距离
// e.offsetX 鼠标点击位置相对于当前点击元素的左边距离
// e.offsetY 鼠标点击位置相对于当前点击元素的上边距离
// e.pageX 鼠标点击位置相对于 body 左边的偏移量
// e.pageY 鼠标点击位置相对于 body 上边的偏移量
// e.target 事件源 ,当前事件是谁触发的事件源就是谁
// e.type  事件类型 例如点击事件 : 'click'
// e.cancelBubble:是否阻止事件默认的冒泡传播(true为阻止)
// e.stopPropagation(); 停止事件的冒泡传播(IE8及以下不兼容)

};
window.onkeydown = function (e) {
console.log(e.keyCode);
// e.keyCode 键码:键盘上每个键对应一个键码
};

3,事件的形式行为

有些元素是有替代行为的,如a标签点击会进行进行

let a = document.getElementById('a');
// 阻止默认行为:
a.onclick = function (e) {
alert(111);
e.preventDefault(); // 阻止元素的事件默认行为(IE8级以下不兼容)
// IE 低版本可以使用:e.returnValue = false
};

4,DOM事件绑定

js中的事件分为DOM0级事件和DOM2级事件

1.1 DOM0级事件

1.1事件绑定

box.onclick = function () {
console.log(1)
};
box.onclick = function () {
console.log(2);
};

DOM0事件:给元素的同一个事件类型只能绑定一个函数(默认存在冒泡计机制),如果绑定多个,下面的会覆盖上面的

当用户点击box元素时,控制台会打印2

1.2事件的去除

box.onclick = null

1.2,DOM2级事件绑定

1.1事件绑定

1,给元素的同一个事件类型可以绑定多个函数

2,可以指定绑定的函数在冒泡阶段执行还是在捕获阶段执行

元素.addEventListener(‘事件类型’, 函数, false冒泡 || true捕获)

box.addEventListener(‘click’, function(){}, false)
box.removeEventListener(‘click’, function(){}, false) // 移除事件

1.2 attachEvent IE浏览器的DOM2级事件绑定

元素.attachEvent(‘事件类型’, 函数);
box.attachEvent(‘onclick’, function(){});
1.3 attachEvent和addEventListener的区别

添加绑定方法中的这个是当前被绑定的元素,而att中的this是窗口
add不能给元素的同一个事件类型绑定同一个方法,但是att可以
添加绑定的函数按绑定的顺序执行,但是att绑定的方法倒着执行

5,事件的传播

  • 1,冒泡传播的机制:当触发子元素的事件时,会转换为触发当前元素祖先元素身上对应的事件(从里到外);

  • 2,捕获传播的机制:当触发子某一个事件时,会最外层的祖先元素开始出发对应的事件,直到目标元素为止(往外到里);

  • 3,目标阶段:目标阶段的函数执行执行和函数绑定的顺序一致

  • 4,三个阶段的执行顺序:捕获阶段->目标阶段->冒泡阶段

  • 5,dom2级事件绑定时第三个参数可以控制函数在哪个阶段执行(true:捕获阶段; false:冒泡阶段)

      function fn1(e){
          console.log("center","冒泡");
      }
      function fn2(e){
          console.log("inner","冒泡");
      }
      function fn3(e){
          console.log("outer","冒泡");
      }
      function fn4(){
          console.log("center","捕获");
      }
      function fn5(){
          console.log("inner","捕获");
      }
      function fn6(){
          console.log("outer","捕获");
      }
      center.addEventListener("click",fn4,true);
      center.addEventListener("click",fn1,false);
      inner.addEventListener("click",fn2,false);
      inner.addEventListener("click",fn5,true);
      outer.addEventListener("click",fn3,false);
      outer.addEventListener("click",fn6,true);
      
      // 当用户点击center元素时,函数执行的顺序是:
      捕获阶段-->目标阶段-->冒泡阶段
    
      fn6-->fn5-->fn4-->fn1-->fn2-->fn3
    

6,事件委托

事件委托:主要利用事件的冒泡传播机制,给最外层的盒子绑定事件;触发里边元素的事件会把外层盒子对应的事件也触发

<div id="parent">
    <div>1</div>
    <div>2</div>
    <div>3</div>
</div>
<script>
    // 三个div将onmouseover这个事件委托给这三个盒子的父元素 
    let parent  = document.getElementById("parent");
    parent.onmouseover=function(e){
        if(e.target.innerHTML==="1"){
            console.log("红色");
        }else if(e.target.innerHTML==="2"){
            console.log("绿色"); 
        }else if(e.target.innerHTML==="3"){
            console.log("黄色");
        }
    }
 </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值