问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

优化h5的滚动功能:在vue和react中使用better-sroll插件的踩坑笔记

发布网友 发布时间:2024-10-01 17:18

我来回答

1个回答

热心网友 时间:2024-11-10 14:01

前言

最近在开发公司网站项目的h5版本,技术栈是vue,为了更好的优化滚动效果,以及实现一些相关的功能,就选择使用better-scroll这个插件。觉得效果很不错,我又在自己写着玩的博客中集成了这个插件。

使用经验安装(推荐安装core版本按需引入插件)

yarnadd@better-scroll/core

在vue中的使用

封装一个滚动组件Scroll.vue

<divclass="wrapper"ref="wrapper"><divclass="content"><slot></slot></div></div></template><script>importBScrollfrom"better-scroll";exportdefault{data(){return{bs:"",positionY:0};},props:{},mounted(){this.bs=newBScroll(this.$refs.wrapper,{click:true,observeDOM:true,observeImage:true,scrollX:false,probeType:3,useTransition:false,mouseWheel:true,});},methods:{scrollToEl(el,time=500){this.bs.scrollToElement(el,time);},},};</script><stylescoped></style>

index.vue

<template><bscroll>//content..........</bscroll></template><script>methods:{btnTab(index){this.currentIndex=index;},btnTopTab(index){this.currentTopIndex=index;if(index===0){this.$refs.scrollRef.scrollToEl(this.$refs.topControlRef);}elseif(index===1){this.$refs.scrollRef.scrollToEl(this.$refs.explainRef);}elseif(index===2){this.$refs.scrollRef.scrollToEl(this.$refs.questionRef);}},},</script>

使用组件后通过this.$refs.bscroll.bs的方式获取插件实例使用方法

在react中使用

组件bscroll.tsx

import{FC,ReactElement,useEffect,useRef,useState}from"react";importBScrollfrom"@better-scroll/core";import{BScrollWrapper}from"./style";importObserveDOMfrom"@better-scroll/observe-dom";importObserveImagefrom"@better-scroll/observe-image";importPullupfrom"@better-scroll/pull-up";//typeimportBScrollInstancefrom"@better-scroll/core";interfaceIpullup{pullup:(x?:BScrollInstance)=>void;}BScroll.use(ObserveDOM);BScroll.use(ObserveImage);BScroll.use(Pullup);constHome:FC<Ipullup>=(props):ReactElement=>{constwrapper=useRef<any>(null);const[bscroll,setbscroll]=useState<BScrollInstance>();useEffect(()=>{constbs:BScrollInstance=newBScroll(wrapper.current,{click:true,scrollY:true,observeDOM:true,observeImage:true,pullUpLoad:{threshold:-100},useTransition:false,mouseWheel:true,});setbscroll(bs);},[]);useEffect(()=>{props.pullup(bscroll)},[props,bscroll]);return<BScrollWrapperref={wrapper}>{props.children}</BScrollWrapper>;};exportdefaultHome;

index.tsx

......constpullup=(bs?:BScrollInstance)=>{bs?bs.on("pullingUp",()=>{if(pageTotal===page){console.log("没有更多内容了");}else{dispatch(getPageAction(page+1));}bs.refresh();bs.finishPullUp();}):console.log();};return(<BScrollpullup={pullup}>......</BScroll>

详细的配置信息请看官网https://better-scroll.github.io/docs/zh-CN/

问题和解决办法

1、在第一次使用时会出现无法滚动的情况,原因是滚动需要内容的高度小于容器的高度

2、如果你的content里有很多的图片,那么会出现滚动到内容的一半就滚不下去了这种情况,原因是img标签是异步加载,img还没有加载完,better-scroll就计算了高度,导致了计算高度的不准确;如果你有其他操作会改变dom的高度,这也会导致计算高度不准确。

better-scroll有refresh()可以重新计算高度,在监听图片加载完成调用

或使用better-scroll的插件observe-dom和observe-image

安装yarnadd@better-scroll/observe-dom?yarnadd@better-scroll/observe-image?

挂载到实例bs.use(observe-dom),配置到better-scroll即可

3、在项目使用better-scroll手动触摸屏幕让滑动停止,会有抖动现象

作者也做出了解释,在属性中配置useTransition:false使用js动画就能解决。

点个赞支持一下叭?原文:https://juejin.cn/post/7100056208186277925
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
街头篮球手游中锋攻略汇总 C位攻略大全 街头篮球手游中锋有什么技巧 中锋C技巧详解 php一个表单提交数据怎么区分开,隐藏域可以吗,如果可以怎么用。 梦见牙掉光了什么预兆 梦见牙齿掉完了是什么征兆 梦见牙齿全掉了是什么预兆 梦见一口牙全部掉了是什么预兆 教师年度考核不认课的领导班子成员,干的工作不少,怎样考核办法公平... 湖北省郧西县义务教育学校绩效工资实施办法绩效工资总量和水平的... 事业单位年底是否有绩效奖金的 的做法,青豆碎肉怎么做好吃,青豆碎肉的家常做法 青豆炒碎肉的做法步骤图,青豆炒碎肉怎么做 求传奇服务端ShopItemList.txt里面各项数字代码详细解释 ...游标卡尺测量一物体长度时的示数,此示数应为___cm ...游标卡尺测量一段金属丝的长度时,示数如图所示,其读数为___cm... ...卡尺测量物体的长度时如图所示,该物体的长度为__ 用游标卡尺测量某物体的长度读数如图所示,该物体的长度为___c ...游标所处的位置如图所示,则被测物的长度为___cm 卧室刷乳胶漆对身体有害吗 干了的乳胶漆如何清理 抗"0"、血沉正常,但类风湿因子199, 参考值0-20U/ml,请问一定是类风湿性... ...血化验血沉加快,抗“0”滴度升高,类风湿因子阴性。这是怎么了?_百... 血沉34.抗0+类风湿因子阴性,四关节疼痛像游走行,请问是什么病 ...外面的边上还有些肉丝,靠喉咙的舌头上还有几个不知是粒还..._百 ... 舌头表面上长了一个小肉粒是怎么回事 舌头上有小红肉粒怎么回事 ...一冲动就头脑发热,过后就后悔,特别是在急的时候,而且还喜欢自己作主... ps笔刷中有没有水彩笔ps笔刷中有没有水彩笔的 ps画笔颜色突然变成水彩样的ps画笔颜色突然变成水彩样的怎么办 ...说明唾液( )A.含有消化蛋白质的酶B.含有消化淀粉的酶C. 充电宝真的会爆炸吗? 最近有那些好听的英文歌(包括:RB HIP-HOP 抒情 DJ 等等等等)_百度知... au750是什么金属是18k金吗 金au750是什么 au750是什么金属值钱吗 ...主角5年前穿越到了异界 修炼了5千年 撕空回到 求一部穿越小说的名字我忘了,剧情我记得,女主角从古代穿越到异界,和... SD卡,怎么去掉写保护?(没有写保护开关) 很急!!!求专家帮忙!谢谢... 看朋友在壹健康买的保健品还不错,但是不知道有没有资质。到底好不好... 淘宝店铺如何做推广?推广引流要花多少钱? 2岁的孩子喜欢吃粗粮面包,吃多了会热气吗? 汽车仪表盘上出现service是什么意思 车出现service是什么意思? 吕欣晏模特经历 ...自然保护区、森林公园、地质公园有哪些???!!! 安卓手机电池怎么校正? 安卓电池校正怎么进 安卓电池校正方式安卓电池校正 想了解股票看什么新闻 买股票要看什么信息 1986年男农历9月二十八晚上两点出生,今年明年有姻缘吗?请懂的回答谢谢...