我需要知道哪一个鼠标按键上的每个鼠标移动事件,我尝试使用这个:
getMouseCode: function(e) {
e = e || window.event;
if (!e.which && e.button) {
if (e.button & 1) e.which = 1;
else if (e.button & 4) e.which = 2;
else if (e.button & 2) e.which = 3;
};
return e.which;
},
但是,这只能在Chrome和IE7-8。 IE9调试器总是说e.button == 0和e.which == 1一些调试我想通了,window.event为IE9包含的权值后,所以我换
e = window.event || e;
这也确实为Safari浏览器和空气的伎俩,但Firefox拥有window.event不确定的,和Opera在两个回调参数和window.event对象相同的错误的价值观。
调查一个相关的问题时,我一直在寻找这个问题。 原来,我的问题是,我需要使用不同的功能来处理onclick
和onmouseover
事件。
我发现使用Opera,Safari和Firefox,被设置为1没有鼠标按钮被点击时鼠标移动事件对象的“的”属性时。
虽然这个答案可能是有点晚了,我相信这将帮助那些在未来。 我偶然发现了这个问题,同时寻找这种跨浏览器的功能,最初忽视它。 我回提供本人对于那些跟随我的脚步回答。
首先,一些知识。 我发现这个网站非常有帮助的,因为所有的跨浏览器的问题(以及大部分)都制定出来的,并为您的娱乐奠定了(我笑的时候,我们开发人员需要创建图表和图表的浏览器是如何工作的。)
http://unixpapa.com/js/mouse.html
在这个页面上,在底部附近,你会发现一个蓝色的链接,说“点击这里与各种鼠标按钮来测试”,这上面你会看到一个代码段。 此进入您的鼠标按下或鼠标松开。 如果你右键点击并查看源在这个位置上,你会发现一个脚本标签保存2个功能,一本以上链接,和防止做他们的默认,或下降通过事件“不要”的功能,虽然不在所有情况下需要的是了解有用的。
知识的第二块来自于其他网站,并为我们提供一些见解如何捕捉鼠标滚轮上下活动。
http://www.javascriptkit.com/javatutors/onmousewheel.shtml
要在1个地方把所有在一起,我们基本上有以下..
function GetMouseButton(e) {
// Normalize event variable
var e = window.event || e;
// Set button to initially not recognized (or false if you need to to be)
var button = 'Not Recognized';
// Check if this is a button push event
if(e.type == 'mousedown' || e.type == 'mouseup') {
if (e.which == null) {
// Check if IE, if so, what e.button was pressed
button = (e.button < 2) ? "Left" :
((e.button == 4) ? "Middle" : "Right");
} else {
// All other browsers, what e.which was pressed
button = (e.which < 2) ? "Left" :
((e.which == 2) ? "Middle" : "Right");
}
} else {
// If this is not a button push event, then we get the direction
var direction = e.detail ? e.detail * (-120) : e.wheelDelta;
// And name the direction as a 'button'
switch(direction) {
case 120: // Browsers use different variants of these
case 240:
case 360:
button = "Middle Scroll Up";
break;
case -120:
case -240:
case -360:
button = "Middle Scroll Down";
break;
}
}
alert(button);
}
/* Simple Bind function (like jQuery's for example) */
function Bind(elem, type, eventHandle) {
if (elem == null || elem == undefined) return;
if ( elem.addEventListener ) {
elem.addEventListener( type, eventHandle, false );
} else if ( elem.attachEvent ) {
elem.attachEvent( "on" + type, eventHandle );
} else {
elem["on"+type]=eventHandle;
}
}
/* Bind your mousedown / mouseup to the window, as well as the mousewheel */
Bind(window, 'mousedown', GetMouseButton);
Bind(window, 'mouseup', GetMouseButton);
/* One of FireFox's browser versions doesn't recognize mousewheel,
* we account for that in this line
*/
var MouseWheelEvent =
(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel";
Bind(window, MouseWheelEvent, GetMouseButton);
为了节省您的时间[和知识,如果你不小心看到这些链接],可以查看在下面的jsfiddle工作示例:
http://jsfiddle.net/BNefn/
编辑我应该也说,既然你需要知道这一点在每次鼠标移动时,你可以简单地存储所产生的按钮“名”和事件类型(向上或向下),再回想你的鼠标移动事件过程中变量的信息。 如果您对每个这些“按钮”,然后就可以看到被按下,这不是哪一个按钮,并清除被压在鼠标松开这两个变量的变量。