Greasy Fork is available in English.

鼠标长按-LongPress

一个模拟鼠标长按事件的Javascript库,原生js

Этот скрипт недоступен для установки пользователем. Он является библиотекой, которая подключается к другим скриптам мета-ключом // @require https://update.greasyfork.org/scripts/374462/645860/%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;
      e.preventDefault();
      return false;
    }
  },true)
  
  let origin_click_function = dom.onclick||function(){};
  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);
  })
}