当前位置:首页 > 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。注意阻止移动端默认行为(如页面滚动)。

优化长按逻辑

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

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

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

防止误触

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

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

完整示例

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

js实现长按

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
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现列表

js实现列表

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

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…