阻止移动端H5开发浏览器默认左右滑动行为

本文探讨了解决H5移动端浏览器默认滑动事件的方法,包括使用CSS touch-action属性和JavaScript touch事件监听,通过对比分析提供了有效阻止左右滑动的技术方案。

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

Touch事件小知识

1.避免点击300ms延迟

css:

   *{ touch-action: manipulation;}

  

正题:如何解决H5移动端开发浏览器默认左右滑动事件

在进行移动端开发时,由于浏览器自带的滑动行为,使手指只要左右滑动页面就可以上一页,下一页的跳转,体验可以说是十分的不好。为了解决这个问题,我在网上进行了一番搜索以及一番尝试得出了下面两种方法。现在就下面两种方法进行一个对比,希望帮助更多的朋友能够更快的解决这个问题。

之前虽然没有写过,但是也有听闻,因此首先想到的是对touch事件的监听来阻止左右滑动。查询后知道了用event.preventDefault()方法来阻止浏览器的默认行为。

round 1:

于是有了代码:

document.addEventListener("touchmove",function(e){e.preventDefault()});

开始测试:

报错:[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive.

原因:

不能在被动的监听器上使用preventDefault方法。

解决方法:就是在addEventListener方法里的第三个参数进行配置,{passive:false},告诉它这个监听器不是被动的监听器。

也就是在这个时候我看到了touch-action这个CSS解决方法

round 2:

代码:

html{

    touch-action:none;

}

测试:

的确左右都不滑动了,但是上下页不滑动了呀。

原因:

查阅文档后发现当touch-action为none的时候,移动端的所有touch默认事件全都被禁止了!

改进:

html{

touch-action:none;

touch-action:pan-y;

}

这样一来达到了效果了,CSS这个方法可行,还挺简单的。

round 3:

JS的方法还没有完成啊,这怎么能甘心。所以只能从判断左右滑动距离来判断是否横移了

代码:

var startX;

document.addEventListener("touchstart",function(e){

    startX = e.targetTouches[0].pageX
});

document.addEventListener("touchmove",function(e){

    var moveX = e.targetTouches[0].pageX;
    
    if(Math.abs(moveX-startX)>0){
        e.preventDefault();
    }
});

测试:

理想很丰满,结果不尽人意。因为上下滑动的时候多少左右会带一点横移呀。

解决方法:

搜索到一篇帖子https://www.jianshu.com/p/8ea7b555a3dd?utm_campaign,教会了我比较横移距离与垂直移动距离的大小,哪个大就是往哪个方向移动啊。妙哉!豁然开朗

var startX,startY;

document.addEventListener("touchstart",function(e){

    startX = e.targetTouches[0].pageX;
    startY = e.targetTouches[0].pageY;
});

document.addEventListener("touchmove",function(e){

    var moveX = e.targetTouches[0].pageX;
    var moveY = e.targetTouches[0].pageY;
    
    if(Math.abs(moveX-startX)>Math.abs(moveY-startY)){
        e.preventDefault();
    }
},{passive:false});

这个方法写了以后,的确达到了我想要的效果。

总结

阻止左右滑动的办法有两个:

1. css属性touch-action进行控制。

2. 使用js监听touch事件,使用event.preventDefault()阻止浏览器的默认行为。

在Vue2中,针对iOS移动端H5页面的橡皮筋回弹效果,我们可以使用JavaScript的事件监听和一些CSS样式来间接地控制。这里提供一种简单的方法,通过监听滚动事件并及时阻止默认的滚动行为来避免回弹: 首先,在Vue实例的生命周期钩子中添加滚动事件监听器: ```javascript export default { mounted() { window.addEventListener('touchmove', this.preventDefaultScroll, { passive: false }); // passive: false 阻止浏览器的滚动优化 }, beforeDestroy() { window.removeEventListener('touchmove', this.preventDefaultScroll); }, methods: { preventDefaultScroll(e) { if (e.targetTouches.length === 1) { // 只对单指触摸事件做处理 e.preventDefault(); // 阻止默认的滚动行为 } }, }, }; ``` 这段代码会在用户触摸屏幕移动时捕获事件,并通过`preventDefault()`函数阻止浏览器默认滚动行为。 注意,`passive: false`是为了防止浏览器的滚动优化,它会让滚动事件始终触发,而不是仅在手指动时才触发。 另外,还可以结合CSS来进一步定制滚动体验,比如禁止元素内部的滚动条或者调整滚动性能: ```css body, html { touch-action: none; // 禁止所有touch相关的交互 -ms-overflow-style: none; /* IE 和 Edge */ scrollbar-width: none; /* Firefox */ } /* 或者单独为内容区域设置滚动 */ .content { overflow-y: auto; -ms-overflow-style: scrollbar; /* IE 和 Edge */ } ``` 不过,这种方法并不能完全消除所有iOS的橡皮筋感觉,因为这是系统级的行为。有些情况下,如列表滚动,可能会难以完全避免。如果你想要更精确的控制,可能需要考虑使用第三方库或者原生插件。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值