JavaScript鼠标事件类型

在我们日常生活和开发中最常用到的也就是鼠标点击事件了,比较鼠标是我们最重要的定位设备。有人说上网可以没有键盘,但是一定不能没有鼠标,事实上确实是这样,因为现在很多网站都设置的有虚拟...

在我们日常生活和开发中最常用到的也就是鼠标点击事件了,比较鼠标是我们最重要的定位设备。有人说上网可以没有键盘,但是一定不能没有鼠标,事实上确实是这样,因为现在很多网站都设置的有虚拟键盘,点击一下就出来了。DOM3级定义了9个鼠标事件,简介如下:

click:在用户单击鼠标按钮(一般是左边的按钮)或者按下回车键的时候触发,这一点很关键,因为它意味着整个程序得易访问性,使得可以通过键盘和鼠标出发这个事件;
dbclick:鼠标双击事件;
mousedown:在用户按下了鼠标的任意键时出发,不能通过键盘回车键触发;
mouseenter:在鼠标光标从外部首次移动到元素范围之内触发这个事件,这里要注意的是首次这个词,也就意味着后面在移动将不会触发,并且这个事件不冒泡。
mouseleave:在位于元素上方的鼠标光标移动到元素范围之外时触发,这个事件不冒泡,而且在元素移动到后代元素时候不会触发。
mousermove:当鼠标指针在元素内部时移动会重复的触发,不能通过键盘触发。
mouseout:在鼠标指针位于一个元素上方,然后用户将其移入另一个元素时触发。
mouserover:在鼠标指针位于一个元素外部,然后用户将其首次移入另一个元素边界之内时触发。
mouseup:在用户释放鼠标按钮时触发


只要在一个元素上相继触发mousedown(用户按下随意一个键)和mouseuo(用户释放鼠标时触发)才会触发click时候(不信的可以按下鼠标不放开试试永远都触发不了click事件)

<script type="text/javascript"> 
var loadEvent = function(fn) { 
var oldonload = window.onload; 
if (typeof window.onload != 'function') { 
window.onload = fn; 
}else { 
window.onload = function() { 
oldonload(); 
fn(); 



var checkevents = function(){ 
var demo = document.getElementById("mouse"); 
var ex = document.getElementById("explanation"); 
demo.onclick = function(){ 
ex.style.display = "block"; 
ex.innerHTML += "click<br>" 

demo.ondblclick = function(){ 
ex.style.display = "block"; 
ex.innerHTML += "dblclick<br>" 

demo.onmouseup = function(){ 
ex.style.display = "block"; 
ex.innerHTML += "mouseup<br>" 

demo.onmousedown = function(){ 
ex.style.display = "block"; 
ex.innerHTML += "mousedown<br>" 

demo.oncontextmenu = function(){ 
ex.style.display = "block"; 
ex.innerHTML += "contextmenu<br>" 

 

var clearcontent = function(){ 
var reset = document.getElementById("clearcontent"); 
var ex = document.getElementById("explanation"); 
reset.onclick = function(){ 
ex.innerHTML = ''; 
ex.style.display = "none"; 


loadEvent(function(){ 
clearcontent(); 
checkevents(); 
}) 
</script> 
<div id="mouse" style="width:500px;height:200px;background:#E8FFE8;border:2px solid #336699;"> 
请在这里点击,测试一个点击到底捆绑了多少种鼠标事件?! 
</div> 
<p><button type="button" id="clearcontent">清空</button></p> 
<div id="explanation" style="width:500px;border:2px solid #336699;display:none;"></div> 

鼠标事件的其他作用

客户区坐标位置:

鼠标事件都是在浏览器上特定的位置发生的,我们可以通过鼠标事件获取客户端

 var div=document.getElementById("myDiv");
EventUtil.addHandler(div,"click",function(event){
event=EventUtil.getEvent(event);
alert("Client coordinates: "+event.clientX+" , "+event.clientY);
});


页面坐标位置:

通过客户区坐标能够知道鼠标是在窗口中什么位置发生,而页面坐标通过事件对象的pagX和pageY属性,能告诉你鼠标在页面中的位置;

 var div=document.getElementById("myDiv");
EventUtil.addHandler(div,"click",function(event){
event=EventUtil.getEvent(event);
alert("page coordinates: "+event.pageX+" , "+event.pageY);
});

屏幕坐标位置:

在鼠标事件发生时,不仅有客户端窗口位置,页面坐标位置还有屏幕坐标位置,我们通过screenX和screenY就可以得到鼠标相对于整个屏幕的位置了;

鼠标按钮:

0:没有键被按下 

1:按下左键 

2:按下右键 

3:左键与右键同时被按下 

4:按下中键 

5:左键与中键同时被按下 

6:中键与右键同时被按下 

7:三个键同时被按下 

更详细的情况见下表。 

GE:Gecko ;SA:Safari; OP:Opera; NS:Netscape 

attachments-2020-07-BFoFObSC5f0ece72eadfe.png


为此我们可以使用以下函数来绑定左右键。 
<div id="mouse2" style="width:500px;height:200px;background:#E8FFE8;border:2px solid #336699;"> 
请在这里点击,测试左中右鼠标键绑定函数 
</div> 
 
<div id="explanation2" style="width:500px;border:2px solid #336699;"> </div> 
<script type="text/javascript"> 
var loadEvent = function(fn) { 
var oldonload = window.onload; 
if (typeof window.onload != 'function') { 
window.onload = fn; 
}else { 
window.onload = function() { 
oldonload(); 
fn(); 



 
var mouseEvent = function(){ 
var arg = arguments[0], 
el = arg.el || document, 
leftfn = arg.left || function(){}, 
rightfn = arg.right || function(){}, 
middlefn = arg.middle || function(){}, 
buttons = {}; 
el.onmousedown = function(e){ 
e = e || window.event; 
if(!+"\v1"){ 
switch(e.button){ 
case 1:buttons.left = true; break; 
case 2:buttons.right = true; break; 
case 4:buttons.middle = true; break; 

}else{ 
switch(e.which){ 
case 1:buttons.left = true;break; 
case 2:buttons.middle = true; break; 
case 3:buttons.right = true;break; 


if(buttons.left){ 
leftfn(); 
}else if(buttons.middle){ 
middlefn(); 
}else if(buttons.right){ 
rightfn(); 

buttons = { 
"left":false, 
"middle":false, 
"right":false 
}; 


var checkeventbutton = function(){ 
var el = document.getElementById("mouse2"); 
var ex = document.getElementById("explanation2"); 
var left = function(){ 
ex.innerHTML = "左键被按下"; 

var middle = function(){ 
ex.innerHTML = "中键被按下"; 

var right = function(){ 
ex.innerHTML = "右键被按下"; 

mouseEvent({el:el,left:left,middle:middle,right:right}); 

loadEvent(function(){ 
checkeventbutton(); 
}) 
</script>

鼠标滑轮事件:

鼠标滑轮事件(mousewheel)是IE6.0才有的当用户通过鼠标滚轮与页面进行交互,在垂直方向上滚动页面时,就会触发mousewheel事件,这个事件可以在任何元素上触发,最终都会冒泡,mousewheel事件对应的还有一个wheelDalta属性,当向前滚动的时候是120的倍数,向后滚动时是-120的倍数;

 var div=document.getElementById("myDiv");
EventUtil.addHandler(div,"mousewheel",function(event){
event=EventUtil.getEvent(event);
alert(event.wheelDelta);
});

触摸设备:

IOS和android设备的实现非常特别,因为这些设备没有鼠标。在面向移动端开发的时候要注意几点

不支持dblclick事件,双击浏览器会放大页面,而且没有办法改变其行为;

两个手指在屏幕上移动和滚动时会触发mouseover和mouseout事件;

轻击单击元素会触发mousemove事件

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
王凯
王凯

92 篇文章

作家榜 »

  1. admin 651 文章
  2. 粪斗 185 文章
  3. 王凯 92 文章
  4. 廖雪 78 文章
  5. 牟雪峰 12 文章
  6. 李沁雪 9 文章
  7. 全易 2 文章
  8. Garmcrypto7undop 0 文章