<button id="btn1">长按触发</button>
<button id="btn2">长按触发2</button>
const pointTypes = ["pointerdown", "pointerup", "pointercancel"];
const touchTypes = ["touchstart", "touchend", "touchcancel"];
const mouseTypes = ["mousedown", "mouseup"]; 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 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");
});

js 触发长按事件的更多相关文章

  1. js 触发select onchange事件

    select 或text的onchange事件需要手动(通过键盘输入)改变select或text的值才能触发,本文为大家介绍下使用js触发select onchange事件select 或text的o ...

  2. 手机端js模拟长按事件(代码仿照jQuery)

    代码编写: $.fn.longPress = function(fn) { var timeout = undefined; var $this = this; for(var i = 0;i< ...

  3. finereport 填报 单元格 JS 触发 提交SQL 事件

    var location = this.options.location; var cr = FR.cellStr2ColumnRow(location); var col = cr.col; var ...

  4. webview长按事件js监听

    做app开发时,用到了webview,需要监听webview的长按事件,使用原生的js处理监听如下: ; //定时器 //开始按 function gtouchstart() { timeOutEve ...

  5. Android自定义长按事件

    Android系统自带了长按事件,setOnLongClickListener即可监听.但是有时候,你不希望用系统的长按事件,比如当希望长按的时间更长一点的时候.这时候就需要自己来定义这个长按事件了. ...

  6. ios webview下纯JS实现长按

    app,其中有长按LI列表弹出菜单,只要清楚五个方法就行:ontouchstart.ontouchmove.ontouchend.setTimeout.clearTimeout 1.首先在我们按下手指 ...

  7. RecyclerView的单击和长按事件(转)

    转自:http://www.jianshu.com/p/f2e0463e5aef 前言 上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了Recy ...

  8. 为自定义的View添加长按事件

    以前开发画板组件时,要添加一个长按监听事件,这个画板实际上就是继承自View的一个自定义组件. 首先,设置好长按事件发生时要触发的操作: private class LongPressRunnable ...

  9. 鸿蒙开发板外设控制 之 实现物理按键的“长按事件”(按键通用框架 V0.0.2)

    我在之前的帖子<实现按键"按下事件"和"释放事件"的通用框架(V0.0.1)>中阐述了DTButton-V0.0.1的设计思路,并且也在帖子中开源了 ...

随机推荐

  1. C# 8.0 可空(Nullable)给ASP.NET Core带来的坑

    Nullable reference types(可为空引用类型) 可为空引用类型不讲武德 C#8.0 引入了"可为空引用类型"和"不可为空引用类型",使我们能 ...

  2. 在Ubuntu安装kubernetes

    一.安装Docker 1. 配置Docker docker安装完成后需要配置cgroup驱动为systemd来增强稳定性 sudo vim /etc/docker/daemon.json { &quo ...

  3. Excel 如何使用 函数 实现传说中的 多条件中位数 (MEDIANIFS)?

    数据科学交流群,群号:189158789,欢迎各位对数据科学感兴趣的小伙伴的加入! 实际上Excel中根本没有MEDIANIFS,但我们可以通过一些方式进行实现: 比如如下图的需求,需要求这一列中,1 ...

  4. 解决java.lang.NoClassDefFoundError: ch/qos/logback/core/joran/spi/Pattern

    明明引入了这个,却提示没有 看下面文章: http://www.maocaoying.com/article/109

  5. 7.DHCP的相关命令

    1.Get-DhcpServerv4Scope :查看所有作用域状态 PS C:\Users\xinghen> Get-DhcpServerv4Scope ScopeId SubnetMask ...

  6. 当 .NET 5 遇上OpenTelemetry,会碰撞出怎样的火花?

    OpenTelemetry 介绍 我在之前的几篇文章都介绍了 OpenTelemetry, 你可以在这里找到 OpenTelemetry - 云原生下可观测性的新标准 深入研究 .NET 5 的开放式 ...

  7. [源码分析] Dynomite 分布式存储引擎 之 DynoJedisClient(1)

    [源码分析] Dynomite 分布式存储引擎 之 DynoJedisClient(1) 目录 [源码分析] Dynomite 分布式存储引擎 之 DynoJedisClient(1) 0x00 摘要 ...

  8. memcache安装及解决无法远程连接的问题

    Memcached是什么 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fit ...

  9. JVM系列(一):jvm启动过程速览

    jvm是java的核心运行平台,自然是个非常复杂的系统.当然了,说jvm是个平台,实际上也是个泛称.准确的说,它是一个java虚拟机的统称,它并不指具体的某个虚拟机.所以,谈到java虚拟机时,往往我 ...

  10. Hyperbase常用SQL

    1.创建表 1.1 建HBase内表 CREATE TABLE hbase_inner_table(   key1 string,   bi bigint,   dc decimal(10,2),   ...