Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击并按住vanilla javascript中的事件_Javascript - Fatal编程技术网

单击并按住vanilla javascript中的事件

单击并按住vanilla javascript中的事件,javascript,Javascript,我希望能够将一个函数附加到一个元素上,该函数只在单击该元素一段时间后运行 有几个(,)问题与在javascript中处理鼠标保持有关;但是这些问题要么使用jQuery,要么与更特定的用例相关 我想实现一些更一般的功能,我觉得应该有一个关于堆栈溢出的好答案来解决这个问题。下面是我使用window.setTimeout得到的结果: var鼠标器; var-myVar; 函数mouseDown(){ mouseTimer=window.setTimeout(myFunction,500);//将超时

我希望能够将一个函数附加到一个元素上,该函数只在单击该元素一段时间后运行

有几个(,)问题与在javascript中处理鼠标保持有关;但是这些问题要么使用jQuery,要么与更特定的用例相关


我想实现一些更一般的功能,我觉得应该有一个关于堆栈溢出的好答案来解决这个问题。

下面是我使用window.setTimeout得到的结果:

var鼠标器;
var-myVar;
函数mouseDown(){
mouseTimer=window.setTimeout(myFunction,500);//将超时设置为当用户按下鼠标按钮时在2秒内触发
}
函数myFunction(){myVar=true;}
var div=document.getElementById(“testBtn”);
testBtn.addEventListener(“mousedown”,mousedown);
document.body.addEventListener(“mouseup”,removeTimer);
函数removeTimer(){
if(myVar)console.log(“a”);
if(鼠标指针)window.clearTimeout(鼠标指针);
myVar=false;
}

测试
这里有一种方法,尽管感觉很冗长:

const addHoldListener=(元素,f,超时)=>{
下降=0;
放松=0;
常量上行器=()=>{
up=最新的。现在();
常数差=上-下;
如果(差异>=超时){
f();
}
元素。removeEventListener('mouseup',upListener);
};
常数下行链路=()=>{
down=Date.now();
元素。addEventListener('mouseup',upListener);
};
元素。addEventListener('mousedown',downListener);
};
addHoldListener(
document.querySelector(“按钮”),
()=>console.log('a'),
500
)

Test
()@RyanWilson我想我遗漏了什么;这个问题与模拟按键有关,其中是否有任何与处理鼠标保持相关的内容?由于您的代码片段正在工作,您应该在中提出您的问题。我认为您的实现是可以的,我不认为有任何更短或内置的版本来实现保持,你需要倾听鼠标落下的时间和鼠标上升前的时间。这正是您的代码所做的,而且非常整洁。也许您可以直接内联
removeUpListener
调用,因为这是一个只在一个地方调用的单行程序,但实际上没有多少其他需要改进的地方。