关于better-scroll插件的无法滑动bug(2021通过插件解决)


Posted in Javascript onMarch 01, 2021

better-scroll滚动原理

关于better-scroll插件的无法滑动bug(2021通过插件解决)

wrapper作为父容器,它的高度会随着内容的大小而撑高。那么,当
content的高度不超过父容器的高度,是不能滚动的,而它一旦超过了父容器的高度,我们就可以滚动内容区了
BetterScroll 默认处理容器(wrapper)的第一个子元素(content)的滚动,其它的元素都会被忽略
所以也给定了如下页面结构

<div class="wrapper">
 <ul class="content">
  <li>...</li>
  <li>...</li>
  ...
 </ul>
 <!-- 这里可以放一些其它的 DOM,但不会影响滚动 -->
</div>

所以我们在这里只说最重要的一点!!!

因为图片需要加载,所以better-scroll的初始化时机非常重要,因为它在初始化的时候,会计算父元素和子元素的高度和宽度,如果图片还没有加载完成就已经开始初始化,那么计算出的实际高度和你的真实高度就会有大量偏差(网速也会影响。。。)

这是目前所有使用者会出现无法滚动的最大原因

我前几天遇到这个问题,并且better-scroll文档无法访问,github上的文档只有大概使用,找解决方法找了整整一天,网上的各种方法层出不穷,最优解:

通过插件:better-scroll/observe-dom

动态计算 BetterScroll 的可滚动高度或者宽度,你并不需要自己在高度或者宽度发生变化的时候,手动调用 refresh() 方法。插件通过 MutationObserver 帮你完成了

如果当前你的浏览器不支持 MutationObserver,会降级使用 setTimeout。

使用

安装依赖 npm install @better-scroll/observe-dom

import BScroll from '@better-scroll/core'
import ObserveDom from '@better-scroll/observe-dom'
BScroll.use(ObserveDom)

const bs = new BScroll('.wrapper', {
 observeDOM: true
})

这个问题还有很多解决办法,但网上很多文章讲也没有讲清,使用这个插件就好了

别的解决办法大概思路就是:监听图片加载调用refresh()重新计算高度

vue用img标签,用@load="定义一个方法"监听图片加载事件,只要图片加载一个就会调用一次你定义的方法

最后在方法中写入this.scroll.refresh()就可以做到加载一个图片刷新一次重新计算高度,同时你需要使用防抖函数避免频繁的重复调用带来的各种问题

到此这篇关于(2021通过插件解决)better-scroll插件的无法滑动bug的文章就介绍到这了,更多相关better-scroll插件无法滑动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
Mar 06 Javascript
判定是否原生方法的JS代码
Nov 12 Javascript
用js读、写、删除Cookie代码续篇
Dec 03 Javascript
javascript将数字转换整数金额大写的方法
Jan 27 Javascript
javascript中setInterval的用法
Jul 19 Javascript
微信小程序 input输入框详解及简单实例
Jan 10 Javascript
Angularjs处理页面闪烁的解决方法
Mar 09 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
Vue自定义指令封装节流函数的方法示例
Jul 09 Javascript
vue slot与传参实例代码讲解
Apr 28 Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 Javascript
Vue3为什么这么快
Sep 23 Javascript
一起来了解一下JavaScript的预编译(小结)
Mar 01 #Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 #Vue.js
three.js 实现露珠滴落动画效果的示例代码
Mar 01 #Javascript
详解js创建对象的几种方式和对象方法
Mar 01 #Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 #Vue.js
vue实现拖拽进度条
Mar 01 #Vue.js
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
Mar 01 #Vue.js
You might like
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
地震发生中逃生十大法则
2008/05/12 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
详解python中__name__的意义以及作用
2019/08/07 Python
python实现高斯投影正反算方式
2020/01/17 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
五年级英语教学反思
2014/01/31 职场文书
数学检讨书1000字
2014/02/24 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
第二次离婚起诉书
2015/05/18 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
Python学习之时间包使用教程详解
2022/03/21 Python