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");
    });
    
  • 相关阅读:
    windows CMD大全
    算法导论(一):渐进记号
    数据结构之树
    Python读取文件内容与存储
    Python绘图的颜色设置
    Python中多个列表与字典的合并方法
    Pandas之Dataframe叠加,排序,统计,重新设置索引
    数据挖掘——聚类算法(一)
    WPF学习————制作时钟
    Opencv Sharp 基于灰度模板的多目标匹配
  • 原文地址:https://www.cnblogs.com/ajanuw/p/12743024.html
Copyright © 2011-2022 走看看