一、此类事件不仅可能来自于“鼠标设备”,还可能来自于对此类操作进行了模拟以实现兼容性的其他设备,如手机、平板电脑。

鼠标事件类型

见: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 时才有效

  1. <button id="button">Alt+Shift+Click on me!</button>
  2. <script>
  3. button.onclick = function(event) {
  4. if (event.altKey && event.shiftKey) {
  5. alert('Hooray!');
  6. }
  7. };
  8. </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>