前端 原生js长按事件
有勇气的牛排
392
前端
2024-10-26 12:11:01
代码案例
const longPressDuration = 3000;
function setupLongPress(element, callback) {
let timer;
const startPress = (event) => {
event.preventDefault();
timer = setTimeout(() => callback(element.id), longPressDuration);
};
const cancelPress = (event) => {
event.preventDefault();
clearTimeout(timer);
};
element.addEventListener('mousedown', startPress);
element.addEventListener('mouseup', cancelPress);
element.addEventListener('mouseleave', cancelPress);
element.addEventListener('touchstart', startPress);
element.addEventListener('touchend', cancelPress);
element.addEventListener('touchcancel', cancelPress);
}
const targetElement = document.getElementById('phil');
setupLongPress(targetElement, (id) => {
location.href = "https://www.couragesteak.com/"
});
<h2><a id="_0"></a>代码案例</h2>
<pre><div class="hljs"><code class="lang-js"><span class="hljs-comment">// 设定长按的时间阈值(毫秒)</span>
<span class="hljs-keyword">const</span> longPressDuration = <span class="hljs-number">3000</span>;
<span class="hljs-keyword">function</span> <span class="hljs-title function_">setupLongPress</span>(<span class="hljs-params">element, callback</span>) {
<span class="hljs-keyword">let</span> timer;
<span class="hljs-keyword">const</span> <span class="hljs-title function_">startPress</span> = (<span class="hljs-params">event</span>) => {
event.<span class="hljs-title function_">preventDefault</span>(); <span class="hljs-comment">// 阻止默认行为</span>
timer = <span class="hljs-built_in">setTimeout</span>(<span class="hljs-function">() =></span> <span class="hljs-title function_">callback</span>(element.<span class="hljs-property">id</span>), longPressDuration);
};
<span class="hljs-keyword">const</span> <span class="hljs-title function_">cancelPress</span> = (<span class="hljs-params">event</span>) => {
event.<span class="hljs-title function_">preventDefault</span>(); <span class="hljs-comment">// 阻止默认行为</span>
<span class="hljs-built_in">clearTimeout</span>(timer);
};
<span class="hljs-comment">// 添加事件监听</span>
element.<span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">'mousedown'</span>, startPress);
element.<span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">'mouseup'</span>, cancelPress);
element.<span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">'mouseleave'</span>, cancelPress);
<span class="hljs-comment">// 触屏设备支持</span>
element.<span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">'touchstart'</span>, startPress);
element.<span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">'touchend'</span>, cancelPress);
element.<span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">'touchcancel'</span>, cancelPress);
}
<span class="hljs-keyword">const</span> targetElement = <span class="hljs-variable language_">document</span>.<span class="hljs-title function_">getElementById</span>(<span class="hljs-string">'phil'</span>);
<span class="hljs-title function_">setupLongPress</span>(targetElement, <span class="hljs-function">(<span class="hljs-params">id</span>) =></span> {
location.<span class="hljs-property">href</span> = <span class="hljs-string">"https://www.couragesteak.com/"</span>
});
</code></div></pre>
留言