200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 移动端 -- 禁止苹果微信浏览器的下拉回弹

移动端 -- 禁止苹果微信浏览器的下拉回弹

时间:2018-10-19 07:53:37

相关推荐

移动端 -- 禁止苹果微信浏览器的下拉回弹

需求:实现页面中有个可拖动的悬浮球

问题:在ios中,由于微信浏览器存在下拉回弹的特性,所以悬浮球拖拽的时候会引起整个页面的拖动,所以需要禁止掉浏览器默认事件,这样在拖动悬浮球时就不会出现问题了

解决办法:

(1)最简单粗暴的方法,就是禁止掉浏览器整个页面的滑动

document.body.addEventListener('touchmove', function (e) {e.preventDefault()}, {passive: false})

上边代码块中的方法一般不建议使用,除非整个页面都不可以滚动时

(2)除了需要滚动的部分,禁止掉浏览器滚动的默认事件(VUE中组件的部分代码)

methods: {// 某些元素可以滚动的方法overscroll (el){el.addEventListener('touchstart', function() {let top = el.scrollToplet totalScroll = el.scrollHeightlet currentScroll = top + el.offsetHeightif(top === 0) {el.scrollTop = 1;}else if(currentScroll === totalScroll) {el.scrollTop = top - 1;}})el.addEventListener('touchmove', function (evt) {if(el.offsetHeight < el.scrollHeight)evt._isScroller = true})},// 监听事件方法hiddenPrevent () {if (!evt._isScroller) {evt.preventDefault()}}},mounted () {this.overscroll(document.querySelector('.content')) // 让class为content的部分有默认滚动事件document.body.addEventListener('touchmove', this.hiddentPrevent, {passive: false})},destroyed () {// 销毁时移除监听document.body.removeEventListener('touchstart', this.hiddentPrevent, {passive: false})document.body.removeEventListener('touchmove', this.hiddentPrevent, {passive: false})}

注意:this.hiddenPrevent必须要写成一个方法,在监听事件事调用,如果写到监听中,移除时不会起作用,是由于在添加监听和移除监听中写的函数不是同一个内存地址了,所以移除监听会失效。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。