web前端领域移动端自定义长按事件你用过吗?

本文探讨了如何在移动端Web前端中禁用默认的长按行为,并提供了自定义长按事件的实现案例,通过示例展示了长按事件如何应用于按钮,实现特定功能,如数组增长。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一。在移动端开发过程中经常会用到长按事件,例如游戏中人物,长按上下左右会持续移动人物的位置,这是一个典型的长按事件的需求,但javaScript原生不支持长按事件,这就需要我们自定义一个长按事件以满足我们的需求。

1.由于移动端长按元素会触发许多默认行为,所以第一步我们要禁掉这些默认行为,css代码如下。

body {
   -webkit-touch-callout: none !important; /*当触摸并按住触摸目标时,禁止系统默认菜单。*/
}
 .long{
  -webkit-user-select: none;/*使文本元素不能被选择*/
}
2.移动端有原生触摸事件,touchstart:手指触摸屏幕,touchmove:手指在屏幕上滑动,touchend:手指离开屏幕;因此我的基本思路是,当手指触摸屏幕的目标元素时启用一个定时器在固定时间间隔内反复触发某行为,当手指离开屏幕时,清理定时器停止复发该行为。

3.具体操作案例如下:这里通过长按该按钮达到下面的数组持续增长的行为。代码如下:


<style>
        body {
            -webkit-touch-callout: none !important;
        }
        .long{
            -webkit-user-select: none;
        }
</style>
<div style="margin-left: 200px;margin-top: 100px">
  <button class="long" style="width:100px;height:100px; user-select: none;"></button>
</div>
<div style="margin-top: 100px;margin-left: 100px">
  <span id="num" style="font-size: 100px;">5</span>
</div>
<script>
    var long = document.getElementsByClassName('long')[0];
    var timer = null;
    long.ontouchstart = function(){
        plus('#num');
    };
    long.ontouchend = function(){
        clearTimeout(timer);
    };
    function plus(ele){
        var targetEle = document.querySelector(ele);
        var num = parseInt(targetEle.innerText);
        console.log(targetEle.innerText);
        targetEle.innerText = ++num;
        timer = setTimeout(function(){
            plus(ele);
        }, 200);
    }
</script>





Vue移动端事件可以通过在模板中添加相应的事件处理函数来实现。在Vue中,可以使用`@touchstart`、`@touchmove`和`@touchend`这些事件绑定指令来监听移动端的触摸事件。引用中的代码展示了一个Vue组件中处理事件的示例代码。 首先,在模板中,可以在需要触发事件的元素上添加`@touchstart`、`@touchmove`和`@touchend`事件绑定指令。例如,在一个`<p>`标签上,可以添加以下代码:`<p @touchstart="gtouchstart(item)" @touchmove="gtouchmove()" @touchend="showDeleteButton(item)">测试</p>`。 接下来,在Vue组件的方法中,定义相应的事件处理函数。例如,在Vue组件的方法中,可以定义`gtouchstart`、`gtouchmove`和`showDeleteButton`等函数来处理事件。在`gtouchstart`函数中,使用`setTimeout`函数设置一个定时器,当触摸开始后500毫秒内没有触摸结束,则会触发`longPress`函数来执行事件。 在`showDeleteButton`函数中,可以通过`clearTimeout`函数来清除定时器,如果触摸结束时定时器还未被清除,则可以执行相应的操作,比如执行`onclick`事件。 如果触摸过程中手指有移动,则可以通过`gtouchmove`函数来清除定时器,以取消事件,此时可以执行其他事件,例如移动操作。 最后,在`longPress`函数中,可以执行事件需要执行的内容,比如弹出菜单。 综上所述,可以通过在模板中添加`@touchstart`、`@touchmove`和`@touchend`事件绑定指令,并在Vue组件的方法中定义相应的事件处理函数来实现Vue移动端事件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [移动端事件 vue](https://blog.csdn.net/qq342035299/article/details/125765707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值