Web API之鼠标事件
鼠标事件
关于事件的监听,我们可以通过addEventListener
进行监听或者通过元素的oneventname
属性来指定。
const app = document.getElementById('app')
//通过addEventListener方法注册事件监听器
app.addEventListener('click',(event)=>{
console.log('app',event)
})
//通过元素的onclick属性注册事件监听器
app.onclick = (e)=>{
}
接下来的所有事件都可以通过上面两种方式注册。
事件的捕获与冒泡 ,现在默认都是冒泡阶段注册事件处理程序。
鼠标事件类型
auxclick
实验属性。非主要鼠标按钮(比如左键)点击时触发。对应元素的onauxclick
属性
click
当鼠标左键在一个元素上被按下和放开时,click
事件会被触发。
如果鼠标在一个元素上被按下,移动到元素外再释放,则在包含这个两个元素的最具体的父级元素上触发事件。
事件对象类型 PointerEvent
。Pointer Event 指针事件。
contextmenu
会在用户尝试打开上下文菜单时触发。通常是鼠标点击右键或按下键盘上的菜单键(未成功)时被触发。使用菜单键,菜单会展示到聚焦元素的左下角,如果元素是DOM树,会展示到这一行的左下角。正常情况下,我们在浏览器页面上右键时,会弹出浏览器的右键菜单,我们可以通过event.preventDefault()
方法禁用浏览器默认的上下文菜单。
app.addEventListener('click',(event)=>{
console.log('app',event)
event.preventDefault()
})
事件对象 PointerEvent
dblclick
双击事件,在单个元素上单击两次鼠标左键,触发此事件。
事件对象 MouseEvent
mousedown
在指针设备按钮按下时触发。
事件对象 MouseEvent
mouseenter
当鼠标第一次移动到触发事件元素中的激活区域时会触发。这个第一次移动我的理解是当鼠标移出这个元素,再移入这个元素就会触发。
事件对象 MouseEvent
mouseleave
指针移出某个元素时被触发。 与mouseout
相似,但mouseleave
不会冒泡:当指针离开元素及其所有后代时,会触发mouseleave
。当指针离开元素或离开元素的后代(即使指针仍在元素内)时会触发mouseout
。
事件对象 MouseEvent
mousemove
当鼠标在元素上(就是元素内部)移动时会触发此事件。
事件对象 MouseEvent
mouseout
请看mouseleave
。
事件对象 MouseEvent
mouseover
当鼠标移动到一个元素上时,会在这个元素上触发此事件。mouseenter
是激活区域才会触发。举个例子?
事件对象 MouseEvent
mouseup
当鼠标在元素中,鼠标按钮放开时触发。
事件对象 MouseEvent
MouseEvent
接口
MouseEvent
接口的继承关系:MouseEvent
→ UIEvent
→Event
依次看下Event
、UIEvent
、MouseEvent
都有哪些属性和方法。
Event
接口
属性
RO 表示只读(read only)
bubbles
RO bool 用来表示该事件是否在DOM中冒泡cancelBubble
stopPropagation()的历史别名。在事件处理函数返回之前,将此属性设置为true,可阻止冒泡。cancelable
RO bool 表示事件是否可以取消composed
RO boo 表示事件是否可以穿过shadow DOM和常规DOM冒泡currentTarget
RO obj 对事件当前注册的目标的引用,标识是当前事件沿着DOM触发时事件的当前目标,他总是指向事件绑定的元素。如果同一个事件处理程序绑定多个元素时,这个就很有用了。https://developer.mozilla.org/en-US/docs/Web/API/Event/Comparison_of_Event_TargetseventPhase
RO int 表示事件流整备处理到了哪个阶段。 https://www.w3.org/TR/DOM-Level-3-Events/#event-flowtarget
RO obj 对事件原始目标值的引用。这里的原始指最初派发事件时指定的目标。timeStamp
RO 毫秒type
RO 事件的类型,不区分大小写isTrusted
RO 表示该事件是由浏览器发起的 还是有脚本发出的。true 用户
方法
composePath()
返回事件的路径。preventDefault()
取消事件。告诉用户代理,如果此事件没有被显示处理,它默认的动作也不应该照常执行。但是事件还是会继续传播的。stopImmediatePropagation()
.对这个特定的事件而言,没有其他监听器被调用。这个事件既不会添加到相同的元素上,也不会添加到以后将要遍历的元素上。阻止监听同一事件的其他事件监听器被调用。如果多个事件监听器被附加到相同元素的相同事件类型上,当此事件触发时,它们会按其被添加的顺序被调用。如果在其中一个事件监听器中执行stopImmediatePropagation()
,那么剩下的事件监听器都不会被调用。stopPropagation()
阻止捕获和冒泡阶段中当前事件的进一步传播。但是他不能防止任何默认行为的发生。
UIEvent
接口
UIEvent
除了拥有Event
的所有属性和方法,还包含一下属性。
属性
detail
RO 当值为非空的时候,提供当前点击数。 click/dblclick 是当前点击数 mousedown/mouseup 是1加加上当前点击数。其他值为0。pageX
RO 非标准 返回的相对于整个文档的x坐标以像素为单位。这个文档时基于文档边缘 考虑任何页面的水平方向上的滚动。比如页面向右滚动200px,并出现滚动条,这时文档左侧相对于窗口向左移动200px。鼠标点击距离窗口左边100px的位置,这还是pageX的返回值是300pageY
RO 同上view
RO 返回的生成时间的document.defaultView对象。在浏览器中,这是事件所在的window对象。
MouseEvent
接口
MouseEvent
除了拥有UIEvent
、Event
的所有属性和方法,还包含一下属性。
属性
altKey
RO bool 如果鼠标事件触发时 alt键被按下 返回truebutton
RO 返回一个值,代表用户按下并触发了事件的鼠标按键。这个属性只能够表明在触发事件的单个或多个按键按下或释放过程中哪些按键被按下了。默认情况下 0是左键 2是右键 但是可能会被用户修改。buttons
RO 指示事件触发时哪些鼠标按键被按下 。一个数字,用来标识鼠标按下的一个或者多个按键。如果按下的键为多个,则值等于所有按键对应数值进行或 (|) 运算的结果。clientX
RO 提供事件发生时的应用客户端区域(浏览器窗口)的水平坐标。x
属性是他的别名。clientY
RO 提供事件发生时的应用客户端区域(浏览器窗口)的垂直坐标。y
属性是他的别名。ctrlKey
RO bool 如果鼠标事件触发时 ctrl键被按下 返回truemetaKey
RO bool 如果鼠标事件触发时 meta键(window操作系统的键盘上的win键)被按下 返回truemovementX
RO 当前事件和上一个mousemove
事件之间鼠标在水平方向上的移动值。movementY
RO 同上 ,垂直方向offsetX
RO 事件对象与目标节点的内边距在x轴方向上的偏移量。当前目标节点就是发生此事件的元素。offsetY
RO 同上 ,y轴。region
RO 返回被点击事件影响的点击区域id,如果没有区域被影响则返回nullrelatedTarget
RO 鼠标事件的次要目标 https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/relatedTargetscreenX
鼠标在全局(屏幕)中的水平坐标(偏移量)。多个屏幕显示的情况下,水平对齐的屏幕将被视为单个设备。screenY
RO 同上,垂直坐标。shiftKey
bool 如果鼠标事件触发时 shift键被按下 返回true