Vue项目版本信息: Vue2.5.2,better-scroll2.3.1
- 【问题描述】在vue项目中使用better-scroll实现滚动效果,实现城市列表的滚动效果,在PC端可以在滚动时对城市列表中的某一项进行选择,而在移动端选择失效。
【解决办法】原因在于:better-scroll在移动端默认禁用touch事件。
this.scroll = new Bscroll(this.$refs.wrapper, {click: true, disableMouse: false, disableTouch: false})
- 【问题描述】通过JSON异步获取数据,PC端有时候可以进行城市列表的滑动,也可以根据右侧字符列表进行相应的联动,但是有的时候却不可以,然而当更改当前Chrome手机模拟的型号时又可以。移动端有时候联动功能正常,也有些时候页面根本无法滑动。
【解决办法】在mounted()
中使用了better-scroll,当页面进行挂载时,mounted()
不能保证子组件也一起被挂载,由于子组件没有被挂载,因此子组件也就获取不到better-scroll有效的条件,因而页面不能正常滚动(大多数情况)。
mounted () {
this.scroll = new Bscroll(this.$refs.wrapper, {click: true, disableMouse: false, disableTouch: false})
}
mounted()
可参考
按照官方的推荐,我们希望等到整个视图渲染完毕再调用better-scroll。也可以按照【参考】去更改代码,在watch()
中对better-scroll进行刷新,当检测到数据发生变化refresh()
就会在DOM更新之前调用。从而使得better-scroll滑动生效。
watch(){
cities () {
this.$nextTick(() => {
this.scroll.refresh()
})
}
}