zoukankan      html  css  js  c++  java
  • js 触发长按事件

    <button id="btn1">长按触发</button>
    <button id="btn2">长按触发2</button>
    
    interface IOpt {
      el: HTMLElement;
      listener: EventListener;
      options?: boolean | AddEventListenerOptions;
    }
    
    function createBingEvent(event: boolean, types: string[]) {
      return ({ el, listener, options }: IOpt): Promise<IOpt> => {
        return new Promise((res) => {
          if (!event) return res({ el, listener, options });
    
          let timer: number | null;
          const clearTimer = () => {
            if (timer) {
              clearTimeout(timer);
              timer = null;
            }
          };
    
          types.forEach((type, index) => {
            el.addEventListener(
              type,
              (e) => {
                if (index === 0) {
                  if (timer) clearTimer();
                  timer = window.setTimeout(() => listener.call(el, e), 500);
                } else {
                  clearTimer();
                }
              },
              options
            );
          });
        });
      };
    }
    
    const pointTypes = ["pointerdown", "pointerup", "pointercancel"];
    const touchTypes = ["touchstart", "touchend", "touchcancel"];
    const mouseTypes = ["mousedown", "mouseup"];
    const chainPointerEvent = createBingEvent(!!window.PointerEvent, pointTypes);
    const chainTouchEvent = createBingEvent(!!window.TouchEvent, touchTypes);
    const chainMouseEvent = createBingEvent(!!window.MouseEvent, mouseTypes);
    
    export function bindLongEvent(
      el: HTMLElement,
      listener: EventListener,
      options?: boolean | AddEventListenerOptions
    ) {
      Promise.resolve({ el, listener, options })
        .then(chainPointerEvent)
        .then(chainTouchEvent)
        .then(chainMouseEvent);
    }
    
    bindLongEvent(document.getElementById("btn1")!, function (this: any, e) {
      console.log(this);
      console.log(e.type);
      console.log("触发长按事件");
    });
    bindLongEvent(document.getElementById("btn2")!, function (this: any, e) {
      console.log(this);
      console.log("hello world");
    });
    
  • 相关阅读:
    HDU4411 最小费用流
    HDU5934 强连通分量
    一个问题
    SAP模板
    KMP模板
    ]C#中执行SQL文件脚本的代码(非常有用)
    C#调用非托管程序5种方式
    [转]C#中的静态常量(const)和动态常量(static和readonly)用法和区别
    [转]C#开发命名规范总结整理
    [转]关于同步方法里面调用异步方法的探究
  • 原文地址:https://www.cnblogs.com/ajanuw/p/12743024.html
Copyright © 2011-2022 走看看