js鼠标键盘事件

事件

1、添加事件的两种方式

传统注册方式:

  • 使用on开头
  • 注册事件的唯一性,如果对同一个元素有多个事件,将会执行最后一个

方法监听注册方式:

  • w3c推荐

  • addEventListener()

  • ie9以前用attachEvent()代替

  • 不会出现唯一性问题,如果有多个事件,会依次执行

elem.addEventListener(type, listener, useCapture)

type:字符串,事件类型

listener:事件处理函数:直接写方法名就可,不要加’()’

useCapture:默认为false,处于冒泡阶段;为true时,为捕获阶段

2、DOM事件流

事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即为DOM事件流。

事件从上向下找叫捕获;从下向上找叫冒泡。

  • 事件中的onclick…与attachEvent只能得到冒泡阶段
  • addEventListener,第三个参数为true,则处于捕获状态,为false处于冒泡阶段

所以如果大标签包含小标签且两个标签都有事件时,捕获时先执行大标签元素的事件;冒泡时先执行小标签的事件

3、事件对象

3.1 概念

<div>点击<div>
<script>
    document.querySelector('div').onclick = function(e){
        console.log(e);
    }
    // 或者
    document.querySelector('div').addEventListener('click', function(e){
        console.log(e);
    });// 或者
    document.querySelector('div').addEventListener('click', fun);
    function fun (event) {
        
    }
</script>
  • 其中的e就是事件对象,写在小括号里座作为形参来看
  • 包含该事件一系列的相关数据的集合(状态、位置、触发对象等)
  • 形参的名字可以随意
  • 有兼容性问题,ie678不通过形参获取,通过window.event获取

3.2 常见事件对象属性和方法

a.onclick = function (e) {
	console.log(this);
}

1、e.target返回触发事件的对象,而this返回绑定事件的对象

例:如果父标签为绑定事件,有子标签,点击子标签,target返回的是子标签元素,this返回父标签元素

2、阻止默认行为:链接不跳转、提交按钮不生效等

​ e.previousDefault():这是方法,高版本

​ e.returnValue:这是属性,低版本

​ return false; // 无兼容问题,仅适用传统注册方式

a.onclick = function(e){
	e.previousDefault();return false; 或
	e.returnValue; 
}

3、阻止冒泡

事件对象的属性方法
e.target返回触发事件的对象(标准)
e.srcElement返回触发事件的对象(非标准 ie6-8使用)
e.type返回事件的类型
e.cancelBubble阻止冒泡(非标准)
e.stopPropagation()阻止冒泡(标准)
e.preventDefault()阻止默认事件(标准) 如:禁止连接跳转
e.returnValue阻止默认事件(非标准)

4、事件委托

原理:给父节点添加事件监听,利用冒泡影响每一个子节点

<ul>
    <li>点击</li>
    <li>点击</li>
    <li>点击</li>
    <li>点击</li>
</ul>
<script>
    ul.addEventListener('click', function(e){
		alert('点击了');
        e.target.style.color = 'red';	// 在li点击时,点击的li中字体将会变成red
    });
</script>

5、鼠标事件与事件对象

事件:

1、鼠标右键事件:contextmenu
// 禁止鼠标右键的事件(触发源为document)
document.addEventListener('contextmenu', function (e) {
	e.preventDefault();
});
// 上面代码的意思是如果出现右键事件,立马不生效,从而达到禁止右键的目的

2、选择事件:selectstart
// 禁止选中文字
document.addEventListener('selectstart', function(e){
	e.preventDefault();
});
3、其他

More Actions鼠标事件

  • onclick

  • onmouseover:鼠标移入监听对象中,或者从监听对象的一个子元素移入另一个子元素中时触发该事件。(会冒泡)

  • onmouseout:鼠标离开某元素时(会冒泡)

  • onmouseenter:鼠标移入监听对象时触发,在监听对象内移动不会触发。(只捕获)

  • onmouseleave:鼠标离开时(只捕获)

  • onfocus:元素获得焦点

  • onblur:元素失去焦点

  • onmousemove:鼠标移动

  • onmouseup:鼠标点击后抬起

  • onmousedown:鼠标按下

注:mouseover与mouseenter都是鼠标经过时触发,mouseover在鼠标经过子元素时会触发(会冒泡),mouseenter只在自身盒子时会触发(不会冒泡)

事件对象:

document.querySelector('a').onclick = function(e){
	// 相对于页面(不是浏览器)可视区域 -----------》 fixed
    console.log(e.clientX);
	console.log(e.clientY);
	
    // 相对于文档 -----------------》 absolute
    console.log(e.pageX);
    console.log(e.pageY);
}
鼠标事件对象
e.clientX鼠标相对窗口可视区的X坐标
e.clientY
e.pageX鼠标相对于文档页面的X坐标
e.pageY
e.screenX相对于电脑屏幕的X坐标
e.screenY

6、键盘事件与事件对象

事件:

这是对document进行监听

键盘事件
onkeyup按键被松开时触发
onkeydown按键按下时触发
onkeypress按键按下时触发(不识别功能键,如:ctrl、shift等)

这三个事件的执行顺序 keydown —》 keypress —》keyup

事件对象:

  1. e.keyCode:返回按键的ascii码
  • keydown与keyup不区分大小写,返回的都是大写的ascii码
  • keypress区分大小写
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值