关于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 相关文章推荐
div+css布局的图片连续滚动js实现代码
May 04 Javascript
JavaScript 错误处理与调试经验总结
Aug 10 Javascript
Jquery Ajax请求代码(2)
Jan 07 Javascript
从零学JS之你需要了解的几本书
May 19 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
解决npm管理员身份install时出现权限的问题
Mar 16 Javascript
JavaScript门道之标准库
May 26 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
Aug 31 Javascript
微信小程序使用npm支持踩坑
Nov 07 Javascript
Vue 组件注册实例详解
Feb 23 Javascript
layui扩展上传组件模拟进度条的方法
Sep 23 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
Dec 09 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
加强版phplib的DB类
2008/03/31 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
js控制frameSet示例
2013/09/10 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
AngularJS语法详解
2015/01/23 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
Servlet的生命周期
2013/08/25 面试题
餐厅总厨求职信
2014/03/04 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
学校团代会开幕词
2016/03/04 职场文书