一、此类事件不仅可能来自于“鼠标设备”,还可能来自于对此类操作进行了模拟以实现兼容性的其他设备,如手机、平板电脑。
鼠标事件类型
见:https://www.yuque.com/tqpuuk/yrrefz/pxdwgl
事件顺序
一、在单个动作触发多个事件时,事件的顺序是固定的。也就是说,会遵循mousedown -> mouseup -> click的顺序调用处理程序。
鼠标按钮
一、与点击相关的事件始终具有button属性,该属性允许获取确切的鼠标按钮。
1、通常我们不在click和contextmenu事件中使用这一属性,因为前者只在单击鼠标左键时触发,后者只在单击鼠标右键时触发。
2、mousedown和mouseup事件中可能需要用到event.button,因为这两个事件在任何按键上都会触发,所以我们可以使用button属性来区分是左键单击还是右键单击。
二、event.button的所有可能值
鼠标按键状态 | event.button |
---|---|
左键(主要按键) | 0 |
中键(辅助按键) | 1 |
右键(次要按键) | 2 |
X1键(后退按钮) | 3 |
X2键(前进按钮) | 4 |
1、大多数鼠标设备只有左键和右键,对应的值就是0和2。触屏设备中的点按操作也会触发类似的事件。
三、event.buttons属性
1、其中以整数的形式存储着当前所有按下的鼠标按键,每个按键一个比特位。
2、在实际开发中,很少会用到这个属性。
四、event.which
1、已过时。
组合键:shift, alt, ctrl, meta
一、所有的鼠标事件都包含有关按下的组合键的信息
二、事件属性
shiftKey: shift
altKey: alt(对于Mac是Opt)
ctrlKey:Ctrl
metaKey: 对于Mac是Cmd
三、如果在事件期间按下了相应的键,则它们为true
【示例1】下面这个按钮仅在 Alt+Shift+click 时才有效
<button id="button">Alt+Shift+Click on me!</button>
<script>
button.onclick = function(event) {
if (event.altKey && event.shiftKey) {
alert('Hooray!');
}
};
</script>
坐标:clientX / Y, pageX / Y
一、所有的鼠标事件都提供了两种形式的坐标
1、相对于窗口的坐标:clientX , clientY
2、相对于文档的坐标: pageX, pageY
防止在鼠标按下时的选择
一、双击鼠标会有副作用,在某些界面中可能会出现干扰:它会选择文本
【示例1】双击下面的文本,除了我们的处理程序外,还会选择文本:
<span ondblclick="alert('dblclick')">Double-click me</span>
二、如果按下鼠标左键,并在不松开的情况下移动鼠标,这也常常会造成不必要的选择。
三、多种防止选择的方法
见:选择(Selection)和范围(Range)(https://www.yuque.com/tqpuuk/yrrefz/dbnmqu)
四、最合理的方式是防止浏览器对mousedown进行操作。这样能阻止刚提到的两种选择。
1、其中的文本仍然是可选择的。但是,选择不应该开始于该文本自身,而应该在该文本之前或之后开始。通常,这对用户来说挺好的。
Before...
<b ondblclick="alert('Click!')" onmousedown="return false">
Double-click me
</b>
...After
五、防止复制:oncopy
<div oncopy="alert('Copying forbidden!');return false">
Dear user,
The copying is forbidden for you.
If you know JS or HTML, then you can get everything from the page source though.
</div>