您好我想在右键单击上有一个dblclick(),因为谷歌地图必须放大和缩小。有没有办法做到这一点。我已经编写了dblclick但现在它只使用左键单击。有关如何执行此操作的任何指示。这是我的代码
$("div#demo1").dblclick(function(e) {
//alert(e.getElementById());
if( (!$.browser.msie && e.button == 0) || ($.browser.msie && e.button == 1) ) {
alert("Left Mouse Button was clicked on demo1 div!");
$("div.window").animate({
'height':'+=20', 'width':'+=20'
},0,function(){
jsPlumb.repaintEverything();
jsPlumb.repaintEverything();
});
// Left mouse button was clicked (all browsers)
}
else if( (!$.browser.msie && e.button == 2) || ($.browser.msie && e.button == 3) ) {
alert("right click double");
}
});
答案 0 :(得分:8)
还有另一种方法可以检测到双击右键,不涉及摆弄定时器或手动跟踪点击次数。在mouseup
或mousedown
事件中使用事件对象的.detail
属性。 .detail
拥有click count,它会告诉您最近发生了多少次点击。如果是.detail === 2
,则双击。
// suppress the right-click menu
$('#target').on('contextmenu', function (evt) {
evt.preventDefault();
});
$('#target').mouseup(function (evt) {
if (evt.which === 3) { // right-click
/* if you wanted to be less strict about what
counts as a double click you could use
evt.originalEvent.detail > 1 instead */
if (evt.originalEvent.detail === 2) {
$(this).text('Double right-click');
} else if (evt.originalEvent.detail === 1) {
$(this).text('Single right-click');
}
}
});
您可能会注意到我使用evt.originalEvent.detail
来访问该属性而不仅仅是.detail
。这是因为jQuery提供了自己不包含.detail
的事件对象版本,但您可以访问浏览器通过.originalEvent
返回的原始事件对象。如果您使用纯JavaScript而不是jQuery,则只需使用evt.detail
。
这里是working example。
答案 1 :(得分:6)
没有真正的方法可以做到这一点,您可以通过双击默认计时器来模拟它,IIRC是300毫秒:
function makeDoubleRightClickHandler( handler ) {
var timeout = 0, clicked = false;
return function(e) {
e.preventDefault();
if( clicked ) {
clearTimeout(timeout);
clicked = false;
return handler.apply( this, arguments );
}
else {
clicked = true;
timeout = setTimeout( function() {
clicked = false;
}, 300 );
}
};
}
$(document).contextmenu( makeDoubleRightClickHandler( function(e) {
console.log("double right click" );
}));
答案 2 :(得分:1)
因为右键单击对于javascript范围之外的用户代理(上下文菜单)有意义,所以你将不得不跳舞。
首先,您应该禁用目标元素上的上下文菜单:
document.getElementById('demo1').oncontextmenu = function() {
return false;
};
现在,当我们右键单击时,不会有上下文菜单弄乱第二次点击。
接下来,了解一般来说,“双击右键”并不存在。即使您可以绑定dblclick
事件,也不是通用事件。根据定义,“双击”是用鼠标左键双击。
因此,我们必须使用mousedown
事件,检查右键被点击的次数,并在两次之后做出反应。我创建了一个小辅助函数,可以跟踪点击次数并在短时间内重置状态。
var RightClick = {
'sensitivity':350,
'count':0,
'timer':false,
'active':function () {
this.count++;
this.timer = setTimeout(
this.endCountdown.bind(this),
this.sensitivity
);
},
'endCountdown': function () {
this.count = 0;
this.timer = false;
}
};
$("div#demo1").mousedown(function(e) {
if(e.which == 3) {
RightClick.active();
if (RightClick.count == 2)
alert("right click double");
}
});
在此处试试:http://jsfiddle.net/94L7z/
您可以调整灵敏度,根据您的偏好,允许更短或更长的双击。
<强>文档强>
element.onContextMenu
- https://developer.mozilla.org/en-US/docs/DOM/window.oncontextmenu element.onMouseDown
- https://developer.mozilla.org/en-US/docs/DOM/element.onmousedown window.setTimeout
- https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout event.which
- http://api.jquery.com/event.which/ 答案 3 :(得分:0)
问题是,就JS而言,双击的概念仅与鼠标左键相关。因此无论多少时间,以及您点击鼠标右键的速度有多快,它只会记录为一堆单击。那该怎么办?
答案 4 :(得分:0)
用这个(try it):
定义一个jQuery函数可能更好var precision = 400;
var lastClickTime = 0;
$(document).ready(function()
{
var div = $('#div');
$(div).bind("contextmenu", function(e)
{
return false;
});
$(div).mousedown(function(event)
{
if (event.which == 3)
{
var time = new Date().getTime();
if(time - lastClickTime <= precision)
{
// DOUBLE RIGHT CLICK
alert('double click');
}
lastClickTime = time;
}
});
});