[英]JavaScript - execute a task after setTimeout depending on a value
嗨具有取决于我有多少时间t离开鼠标键点击过的图像来执行(执行PHP文件)两个不同的任务。 我正在处理的事件是onmousedown和onmouseup 。
如果t <500 ms,则执行任务#1,否则执行任务#2。
因此,基于我的基本JavaScript知识,我编写了以下代码:
var lastTime = 0;
var now = 0;
var tmptimer = 0;
var mousedown = false;
/* to be executed from onmousedown event */
function tsMouseDown(angleH, angleV)
{
var angleH2 = parseFloat(angleH);
var angleV2 = parseFloat(angleV);
var div = document.getElementById("debugDiv");
div.textContent = 'tsMouseDown: ' + angleH + " - " + angleV + ' - ';
mousedown = true;
lastTime = new Date().getTime();
tmptimer = setTimeout( function(){ ;}, 500);
div.textContent = 'tsMouseDown: ' + angleH2 + " - " + angleV2 + ' - ' + tmptimer + ' - ' + mousedown;
/*
try to execute task #1 or #2 depending on mousedown value
(!) DOES NOT WORK
*/
if(mousedown == false)
{
$("#content").load("task1.php",{ /* args here ... */ });
}
else if(mousedown == true)
{
$("#content").load("task2.php",{ /* args here ... */ });
}
}
/* to be executed from onmouseup event */
function tsMouseUp()
{
mousedown = false;
clearTimeout(tmptimer);
tmptimer = -1;
var div = document.getElementById("debugDiv");
now = new Date().getTime();
if((now - lastTime) < 500))
div.textContent = "tsMouseUp: " + (now - lastTime) + "< 500 ms - " + tmptimer + ' -' + mousedown;
else
div.textContent = "tsMouseUp: " + (now - lastTime) + "> 500 ms" + tmptimer + ' -' + mousedown;
}
该代码可以很好地识别鼠标按钮保持单击的时间,但是我从未希望评估tsMouseDown函数中mousedown变量的条件,因为总是执行task2.php ,即使在超时之前执行了tsMouseUp 。
解决这种情况的更好方法是什么? 我必须如何更改代码才能使其正常工作?
先感谢您。
更清楚的一点是将事件彼此绑定..例如:
var longTouch = false;
$(this).mousedown(function() {
timeout = setTimeout(function() {
longTouch = true;
}, 500);
}).mouseup(function() {
clearTimeout(timeout);
if (longTouch && longTouch == true) {
// do whatever you want if it was longer than 500ms
} else {
//else do click actions
}
});
longTouch = false;
这种围绕mouseup
事件的方法会中断 mousedown
或者如果它长于指定的时间间隔,则它将执行其他操作。 我希望它足够清楚。
我做了一个jsFiddle来演示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.