您好我是javascript的新手。我希望能够在用户点击画布上的点(短按)时触发事件,如果保持点击向下1500毫秒,我应该有另一个功能。在mouseup完成之前我应该认识到长按。
例如:
el.addEventListener("mousedown", doMouseDown, false); el.addEventListener("mouseup", update, false);
function doMouseDown()
{
if (short press)
functionality of shortpress
if (longpress)
functionality of long press
}
function update()
//do some update of coordinates
答案 0 :(得分:3)
为了使其正常工作,需要考虑几个键:
您可以通过在处理程序代码中引用N:p
来使处理程序通用。这样您就可以将它附加到任何元素。 mouseup的全局处理程序仅添加一次,并将使用跟踪目标来区分导致mousedown的元素。定时器调用的代码将绑定元素上下文(this
),因此我们也可以使用寻址源元素的通用longpress处理程序(参见下面的演示)。
bind()
var d = document.querySelectorAll("div"),
isDown = false,
isLong = false,
target, // which element was clicked
longTID; // so we can cancel timer
// add listener for elements
d[0].addEventListener("mousedown", handleMouseDown);
d[1].addEventListener("mousedown", handleMouseDown);
d[2].addEventListener("mousedown", handleMouseDown);
// mouseup need to be monitored on a "global" element or we might miss it if
// we move outside the original element.
window.addEventListener("mouseup", handleMouseUp);
function handleMouseDown() {
this.innerHTML = "Mouse down...";
isDown = true; // button status (any button here)
isLong = false; // longpress status reset
target = this; // store this as target element
clearTimeout(longTID); // clear any running timers
longTID = setTimeout(longPress.bind(this), 1500); // create a new timer for this click
};
function handleMouseUp(e) {
if (isDown && isLong) { // if a long press, cancel
isDown = false; // clear in any case
e.preventDefault(); // and ignore this event
return
}
if (isDown) { // if we came from down status:
clearTimeout(longTID); // clear timer to avoid false longpress
isDown = false;
target.innerHTML = "Normal up"; // for clicked element
target = null;
}
};
function longPress() {
isLong = true;
this.innerHTML = "Long press";
// throw custom event or call code for long press
}
div {background:#ffe;border:2px solid #000; width:200px;height:180px;
font:bold 16px sans-serif;display:inline-block}
答案 1 :(得分:1)
这对你有用(这里没有jQuery):
var mouseStatus = 'up';
var mouseTimeout;
myElement.addEventListener("mousedown",function() {
clearTimeout(mouseTimeout);
mouseStatus='down';
mouseTimeout = setTimeout(function(){
mouseStatus='longDown';
doSpecialStuffBecauseOfLongDown(); // put your secret sauce here
}, 1500);
}, false);
myElement.addEventListener("mouseup",function() {
clearTimeout(mouseTimeout);
mouseStatus='up';
}, false);