当前位置:首页 > JavaScript

js实现长按

2026-03-14 06:04:02JavaScript

监听触摸或鼠标事件

使用 touchstartmousedown 事件开始计时,touchendmouseup 事件结束计时。若按住时间超过设定阈值(如 500ms),则触发长按操作。

let pressTimer;

element.addEventListener('mousedown', startPressTimer);
element.addEventListener('mouseup', cancelPressTimer);
element.addEventListener('mouseleave', cancelPressTimer);

element.addEventListener('touchstart', startPressTimer);
element.addEventListener('touchend', cancelPressTimer);

function startPressTimer(e) {
    e.preventDefault(); // 防止移动端触发默认行为(如滚动)
    pressTimer = setTimeout(() => {
        console.log('长按触发');
        // 执行长按逻辑
    }, 500); // 500ms 阈值
}

function cancelPressTimer() {
    clearTimeout(pressTimer);
}

处理移动端与桌面端兼容性

移动端需通过 touchstarttouchend 监听,桌面端则用 mousedownmouseup。注意阻止移动端默认行为(如页面滚动)。

js实现长按

优化长按逻辑

添加长按触发后的回调函数,支持自定义操作:

js实现长按

function startPressTimer(e, callback) {
    pressTimer = setTimeout(() => {
        callback(); // 触发自定义回调
    }, 500);
}

// 调用示例
startPressTimer(e, () => {
    console.log('自定义长按操作');
});

防止误触

touchmovemousemove 时取消长按,避免拖动误触发:

element.addEventListener('touchmove', cancelPressTimer);
element.addEventListener('mousemove', cancelPressTimer);

完整示例

以下是一个完整的长按实现,兼容移动端和桌面端:

const element = document.getElementById('long-press-target');
let pressTimer;

const startPressTimer = (e, callback) => {
    e.preventDefault();
    pressTimer = setTimeout(callback, 500);
};

const cancelPressTimer = () => {
    clearTimeout(pressTimer);
};

// 桌面端事件
element.addEventListener('mousedown', (e) => {
    startPressTimer(e, () => {
        console.log('桌面端长按触发');
    });
});
element.addEventListener('mouseup', cancelPressTimer);
element.addEventListener('mouseleave', cancelPressTimer);
element.addEventListener('mousemove', cancelPressTimer);

// 移动端事件
element.addEventListener('touchstart', (e) => {
    startPressTimer(e, () => {
        console.log('移动端长按触发');
    });
});
element.addEventListener('touchend', cancelPressTimer);
element.addEventListener('touchmove', cancelPressTimer);

注意事项

  • 移动端需调用 e.preventDefault() 防止默认行为干扰。
  • 长按阈值(如 500ms)可根据需求调整。
  • 若需支持右键长按,需额外监听 contextmenu 事件。

标签: js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…