站长资源网络编程 vue-better-scroll 的使用实例代码详解 整理:jimmy2026/8/27浏览2次 站长资源 网络编程 网盘链接 云盘下载 简介首先安装better-scrollnpm i better-scroll -Sgoods页面模板首先安装better-scroll npm i better-scroll -S goods页面模板 <template> <div class="goods"> <div class="menu-wrapper" ref="menuWrapper"> <ul> <li v-for="item in goods" class="menu-item"> <span class="text border-1px"> <span v-show="item.type>0" class="icon" :class="classMap[item.type]"></span>{{item.name}} </span> </li> </ul> </div> <div class="foods-wrapper" ref="foodsWrapper"> <ul> <li v-for="item in goods" > <h1 class="title">{{item.name}}</h1> <ul> <li v-for="food in item.foods" class="food-item border-1px"> <div class="icon"> <img :src="/UploadFiles/2021-04-02/food.icon"> js <script type="text/ecmascript-6"> /* eslint-disable*/ import BScroll from 'better-scroll' export default{ props:{ seller:{ type:Object } }, data(){ return{ goods:[] } }, created(){ this.classMap=['decrease', 'discount', 'special', 'invoice', 'guarantee'] this.$http.get('/api/goods').then((res)=>{ this.goods=res.data.data; this.$nextTick(()=>{ this._initScroll(); }) console.log(this.$refs.menuWrapper) }) }, methods:{ _initScroll(){ this.meunScroll=new BScroll(this.$refs.menuWrapper,{}); this.foodsScroll=new BScroll(this.$refs.foodsWrapper,{}); } } } </script> 先用ref 绑定事件, 在vue中 用$ .refs注册 在钩子函数 create中 用vue-resource 请求数据,并异步调用方法 this.$nextTick(()=>{ this._initScroll(); } 注册方法 _initScroll(){ this.meunScroll=new BScroll(this.$refs.menuWrapper,{}); this.foodsScroll=new BScroll(this.$refs.foodsWrapper,{}); } better-scroll用法 我们先来看一下 better-scroll 常见的 html 结构: <div class="wrapper"> <ul class="content"> <li></li> <li></li> <li></li> <li></li> </ul> </div> 当 content 的高度不超过父容器的高度,是不能滚动的,而它一旦超过了父容器的高度,我们就可以滚动内容区了,这就是 better-scroll 的滚动原理。 import BScroll from 'better-scroll' let wrapper = document.querySelector('.wrapper') let scroll = new BScroll(wrapper, {}) better-scroll 对外暴露了一个 BScroll 的类,我们初始化只需要 new 一个类的实例即可。第一个参数就是我们 wrapper 的 DOM 对象,第二个是一些配置参数。 better-scroll 的初始化时机很重要,因为它在初始化的时候,会计算父元素和子元素的高度和宽度,来决定是否可以纵向和横向滚动。因此,我们在初始化它的时候,必须确保父元素和子元素的内容已经正确渲染了。如果没有办法滑动,那就是初始化的时机不对。 饿了么是这样处理的: mounted() { this.$nextTick(() => { this.scroll = new Bscroll(this.$refs.wrapper, {}) }) } this.$nextTick()这个方法作用是当数据被修改后使用这个方法会回调获取更新后的dom再render出来 如果不在下面的this.$nextTick()方法里回调这个方法,数据改变后再来计算滚动轴就会出错 上拉刷新功能 <div class="wrapper" ref="wrapper"> <ul class="content" ref="content"> <li v-for="(item,key) in detail" :key="key" v-if="detail.length > 0"> <Row type="flex" justify="start" align="middle"> <Col :span="8" class="detail-item"> <span :class="{'color-red':item.is_delay === 1}">{{item.order_sn}}</span> </Col> <Col :span="8" class="detail-item"> <span>{{item.date}}</span> </Col> <Col :span="8" class="detail-item"> <span>¥ {{item.partner_profit | number2}}</span> </Col> </Row> </li> <li v-if="!scrollFinish"> <Row type="flex" justify="center" align="middle"> <Col :span="6" v-if="loadingText"> <p>{{loadingText}}</p> </Col> <Col :span="2" v-else> <Spin size="large"></Spin> </Col> </Row> </li> </ul> </div> mounted() { // 设置wrapper的高度 this.$refs.wrapper.style.height = document.getElementById("app").offsetHeight - document.getElementById("scroll").offsetTop + "px"; // better-scroll 的content高度不大于wrapper高度就不能滚动,这里的问题是,当一页数据的高度不够srapper的高度的时候,即使存在n页也不能下拉 // 需要设置content的min-height大于wrapper高度 this.$refs.content.style.minHeight = this.$refs.wrapper.offsetHeight + 1 + "px"; this._initScroll(); this.getIncomeDetail(this.nextPage); // 设置scroll的高度 // this.scrollHeight = document.getElementById("app").offsetHeight - document.getElementById("scroll").offsetTop ; }, methods:{ _initScroll() { this.orderScroll = new BScroll(this.$refs.wrapper, { probeType: 3, click:true, pullUpLoad: { // 配置上啦加载 threshold: -80 //上拉80px的时候加载 }, mouseWheel: { // pc端同样能滑动 speed: 20, invert: false }, useTransition:false, // 防止iphone微信滑动卡顿 }); // 上拉加载数据 this.orderScroll.on('pullingUp',()=>{ this.scrollFinish = false; // 防止一次上拉触发两次事件,不要在ajax的请求数据完成事件中调用下面的finish方法,否则有可能一次上拉触发两次上拉事件 this.orderScroll.finishPullUp(); // 加载数据 this.getIncomeDetail(this.nextPage); }); } 总结 以上所述是小编给大家介绍的vue-better-scroll 的使用实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持! 上一篇:在vue项目中优雅的使用SVG的方法实例详解 下一篇:Vue项目中使用better-scroll实现一个轮播图自动播放功能 最新资源 群星《奔赴!万人现场 第2期》[FLAC/分轨][518.8 群星《奇妙浪一夏 (上海迪士尼度假区音乐)》[32 群星《奇妙浪一夏 (上海迪士尼度假区音乐)》[FL 【古典音乐】詹姆斯·高威《季节》1993[WAV+CUE] 贝拉芳蒂《卡里普索之王》SACD[WAV+CUE] 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE] 群星《欢迎来到我身边 电影原声专辑》[320K/MP3 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓 群星《2024好听新歌42》AI调整音效【WAV分轨】 一句话新闻高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。 标签云1080P高清(5)高清电影(5)百度云盘(5)网盘下载(4)破解软件(4)绿色软件(4)磁力链接(3)强度天梯(3)福利资源(2)王者荣耀(2)黑钻活动(2)WPS会员(2)刷图排行(1)网盘限速(1)鬼灭之刃(1)免费韩国漫画(1)宫本重做(1)免费动漫(1)