老师,请教下开发中遇到的问题
问题描述:
// 阻止浏览器默认行为
const preventDefaultEvent = e => {
e.preventDefault()
console.log(1);
}
// touch
document.addEventListener('touchstart', preventDefaultEvent, false)
// // pointer
// document.addEventListener('pointerdown', preventDefaultEvent, false)
// // mouse
// document.addEventListener('mousedown', preventDefaultEvent, false)
用touch实现阻止浏览器默认行为时,
在移动端进行操作时就会出现报错,
在css里面添加touch-action属性 或者改成pointer就正常了
相关截图:
问题描述:
另外,用手机访问目的地页时,
有时候拉菜单里的滚动条会拉不到,反而是拉动了整个页面
用pc端的模拟器就不存在这种情况
是不是跟浏览器的下拉刷新机制有关
谢谢老师解答下
相关截图:
正在回答
同学你好,关于同学的问题解答如下:
1、用touch实现阻止浏览器默认行为时,在移动端进行操作时就会出现报错,在css里面添加touch-action属性或者改成pointer就正常了
①首先,报错是谷歌浏览器监听touch类事件报错,报错信息说的是无法被动监听preventDefault事件。这个是新版本chrome浏览器的报错
②原因是谷歌公司为了最快速的响应touch事件而做出的改变,在以前,当浏览器对默认的事件进行响应的时候,要检查一下是否进行了默认事件的取消。这样就在响应滑动操作之前会耽误一点时间。因此,谷歌公司就决定默认取消了对这个事件的检查,默认事件也就取消了,直接执行滑动操作,这样滑动效果就更加顺畅了。但是浏览器的控制台就会进行错误提醒。
③解决办法是结合css属性touch-action:none让任何触摸事件都不产生默认行为(当然touch-action还有很多其他的属性,这里不做深入探讨)。
④因为是对touch事件所作出的更改,因此换成pointer是不受影响的
2、有时候拉菜单里的滚动条会拉不到,反而是拉动了整个页面
这是手机端的浏览器内置的机制,不是代码的问题,所以在pc端的模拟器上是无法复现的
希望可以帮到你,祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星