Greasy Fork is available in English.
一个模拟鼠标长按事件的Javascript库,原生js
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/374462/645856/%E9%BC%A0%E6%A0%87%E9%95%BF%E6%8C%89-LongPress.js
function onLongPress(dom,callback,ms=1000){
if(!dom){
console.error("dom不存在");
return;
}else if(dom.toString()=="[object NodeList]"){
for(let i of dom){
onLongPress(i,callback,ms)
}
return;
}
if(dom["data-Longpress"]){
return ;
}
dom["data-Longpress"] = "true";
function MouseUpHandler(e){
dom.mouseDownFlag = false;
document.removeEventListener("mouseup",MouseUpHandler)
document.removeEventListener("mousemove",MouseMoveHandler)
}
function MouseMoveHandler(e){
if(e.target != dom){
dom.mouseDownFlag = false;
document.removeEventListener("mouseup",MouseUpHandler)
document.removeEventListener("mousemove",MouseMoveHandler)
}
}
dom.addEventListener("click",(e)=>{
if(dom.HandledLongPress){
dom.HandledLongPress = false;
e.stopPropagation();
e.cancelBubble = true;
return false;
}
},true)
let origin_click_function = dom.onclick;
dom.onclick = function(e){
if(dom.HandledLongPress){
}else{
origin_click_function(e);
}
}
dom.addEventListener("mousedown",()=>{
dom.mouseDownFlag = true;
let ts = setTimeout(()=>{
document.removeEventListener("mouseup",MouseUpHandler);
document.removeEventListener("mousemove",MouseMoveHandler)
if(dom.mouseDownFlag){
callback(dom);
dom.mouseDownFlag = false;
dom.HandledLongPress = true;
}
},ms);
document.addEventListener("mouseup",MouseUpHandler);
document.addEventListener("mousemove",MouseMoveHandler);
})
}