js 触发长按事件
<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 触发长按事件的更多相关文章
- js 触发select onchange事件
select 或text的onchange事件需要手动(通过键盘输入)改变select或text的值才能触发,本文为大家介绍下使用js触发select onchange事件select 或text的o ...
- 手机端js模拟长按事件(代码仿照jQuery)
代码编写: $.fn.longPress = function(fn) { var timeout = undefined; var $this = this; for(var i = 0;i< ...
- finereport 填报 单元格 JS 触发 提交SQL 事件
var location = this.options.location; var cr = FR.cellStr2ColumnRow(location); var col = cr.col; var ...
- webview长按事件js监听
做app开发时,用到了webview,需要监听webview的长按事件,使用原生的js处理监听如下: ; //定时器 //开始按 function gtouchstart() { timeOutEve ...
- Android自定义长按事件
Android系统自带了长按事件,setOnLongClickListener即可监听.但是有时候,你不希望用系统的长按事件,比如当希望长按的时间更长一点的时候.这时候就需要自己来定义这个长按事件了. ...
- ios webview下纯JS实现长按
app,其中有长按LI列表弹出菜单,只要清楚五个方法就行:ontouchstart.ontouchmove.ontouchend.setTimeout.clearTimeout 1.首先在我们按下手指 ...
- RecyclerView的单击和长按事件(转)
转自:http://www.jianshu.com/p/f2e0463e5aef 前言 上一篇文章揭开RecyclerView的神秘面纱(一):RecyclerView的基本使用中,主要讲述了Recy ...
- 为自定义的View添加长按事件
以前开发画板组件时,要添加一个长按监听事件,这个画板实际上就是继承自View的一个自定义组件. 首先,设置好长按事件发生时要触发的操作: private class LongPressRunnable ...
- 鸿蒙开发板外设控制 之 实现物理按键的“长按事件”(按键通用框架 V0.0.2)
我在之前的帖子<实现按键"按下事件"和"释放事件"的通用框架(V0.0.1)>中阐述了DTButton-V0.0.1的设计思路,并且也在帖子中开源了 ...
随机推荐
- assets和static的区别
相同点:assets和static两个都是存放静态资源文件.项目中所需要的资源文件图片,字体图标,样式文件等都可以放在这两个文件下,这是相同点不相同点:assets中存放的静态资源文件在项目打包时,也 ...
- java打exe
参考文章: 注册码: https://www.cnblogs.com/jepson6669/p/9211208.html 官网: https://exe4j.apponic.com/ 在上篇基础上,将 ...
- JavaScript解构赋值
JavaScript解构赋值 JavaScript解构赋值为我们提供了很多方便,但是用法比较多,本文就来梳理一下.总体来说,主要就两种地方使用解构赋值,一种是数组的解构赋值,另一种是对象的解构赋值.以 ...
- 每个开发人员都应该知道的WebSockets知识
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/deep-dive-into-websockets- ...
- Scala类型参数(泛型)与隐式转换
package com.yz9 import org.junit.Test import scala.collection.mutable.ListBuffer class test { @Test ...
- CF-1445 C - Division 数论,质因数,唯一分解定理
题意 给定一个 \(p (p\le 10^{18})\), 一个 \(q(q \le 10^9)\), 要找到一个最大的 \(x\) 满足: \(p \%x = 0\) \(q \% x \neq 0 ...
- CSAPP_BombLab实验报告
Lab_2实验报告 目录 Lab_2实验报告 屏幕截图 考察内容 各题答案 bomb1 bomb2 bomb3 bomb4 bomb5 bomb6 secret_phase 解题思路 bomb1 bo ...
- KMP(算法描述)
#include<iostream> using namespace std; const int N=10010,M=100010; int n,m; char p[N],s[M]; i ...
- 恢复win10 LTSC 2019 图片查看器功能
1.开始–运行–输入"regedit"打开注册表. 2. 在打开的注册表编辑器中,从左侧依次展开:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Win ...
- EFCore学习记录--数据访问技术人门2
1 code fist 1.创建实体类: 2.创建DbContext类: mysql连接字符串是:Server=127.0.0.1;Port=3306;Database=BlogDb; User=ro ...