We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
具体可以看官方文档
npm install better-scroll --save //接下来就可以在代码中引入了,webpack等构建工具都支持从node_modules里引入代码: import BScroll from 'better-scroll'
在vue框架中使用的具体介绍,可以参考作者这篇文章当 better-scroll 遇见 Vue
HTML部分,以下是很多Vue项目经典的写法
<template> <div id="wrapper" ref="list"> <div id="scroller"> <XhomeCard :key="index" v-for="(n,index) in news" :content="n" /> </div> </div> </template>
JS部分,异步数据的处理注意加载的时机,要在数据完全并且得到并且渲染之后,才能开始挂载逻辑,这里的this.$nextTick是一个异步函数,为了确保DOM已经渲染
this.$nextTick
import BScroll from "better-scroll"; export default { methods: { // 加载数据 loadMore() { this.$axios .get("/api/container/getIndex", { params: {} }) .then(response => { this.$nextTick(() => { if (!this.scroll) { this.scroll = new BScroll(this.$refs.list, { click: true, scrollY: true, pullUpLoad: { threshold: -30 // 当上拉距离超过30px时触发 pullingUp 事件 } }); this.scroll.on("pullingUp", () => { // 上拉刷新 // 做些事情 this.scroll.finishPullUp(); // 事情做完,需要调用此方法告诉 better-scroll 数据已加载,否则上拉事件只会执行一次 }); this.scroll.on("scrollEnd", () => { // 滚动到底部 if (this.scroll.y <= this.scroll.maxScrollY) { this.loadMore(); } }); } else { // 这里触发this.scroll刷新,不然如果异步数据更新的话,this.scroll不刷新会置顶回去 this.scroll.refresh(); } }); }) .catch(error => { console.log(error); }); } } }
css部分其实很关键,缺少了也不可以,当然我貌似发现官方文档里面没有写出来,这部分参考的是iscroll的样式
<style scoped> * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } html { -ms-touch-action: none; } body, ul, li { padding: 0; margin: 0; border: 0; } body { font-size: 12px; font-family: ubuntu, helvetica, arial; overflow: hidden; /* this is important to prevent the whole page to bounce */ } /* 正常情况只要wrapper和scroller类就可以了 */ #wrapper { position: absolute; z-index: 1; top: 84px; bottom: 0; left: 0; width: 100%; background: #ccc; overflow: hidden; } #scroller { position: absolute; z-index: 1; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); width: 100%; -webkit-transform: translateZ(0); -moz-transform: translateZ(0); -ms-transform: translateZ(0); -o-transform: translateZ(0); transform: translateZ(0); -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-text-size-adjust: none; -moz-text-size-adjust: none; -ms-text-size-adjust: none; -o-text-size-adjust: none; text-size-adjust: none; } </style>
利用实例化后的this.scroll可以获取滚动的高度,和列表的高度,然后根据指导的顶部导航栏高度来计算出到底的临界点
this.scroll
this.scroll.on("scrollEnd", () => { // 滚动到底部 if (this.scroll.y <= this.scroll.maxScrollY + 50) {} });
不计算头部
this.scroll.on("scrollEnd", () => { // 滚动到底部 if (this.scroll.y <= this.scroll.maxScrollY) { this.loadMore(); } })
或者使用
this.scroll.on("pullingUp", () => { console.log("上拉刷新"); // 做些事情 this.scroll.finishPullUp(); // 事情做完,需要调用此方法告诉 better-scroll 数据已加载,否则上拉事件只会执行一次 });
还有最好做严谨判断,比如路由切换,组件销毁要判断this.$scroll是否存在,没有则重新实例化
this.$scroll
this.$nextTick(() => { if (!this.scroll) { this.scroll = new BScroll(this.$refs.list, {}) }else{ this.scroll.refresh(); } })
数据更新,可以触发refresh
refresh
destoryed() { this.scroll.refresh(); this.scroll = null; }
判断出现下拉刷新是否超出距离,然后触发更新数据,数据加载(concat)数组头部
this.scroll.on("touchEnd", pos => { // 下拉动作 if (pos.y > 32) { this.loadMore("down"); } });
The text was updated successfully, but these errors were encountered:
No branches or pull requests
安装
具体可以看官方文档
在vue框架中使用的具体介绍,可以参考作者这篇文章当 better-scroll 遇见 Vue
引入
HTML部分,以下是很多Vue项目经典的写法
JS部分,异步数据的处理注意加载的时机,要在数据完全并且得到并且渲染之后,才能开始挂载逻辑,这里的
this.$nextTick
是一个异步函数,为了确保DOM已经渲染css部分其实很关键,缺少了也不可以,当然我貌似发现官方文档里面没有写出来,这部分参考的是iscroll的样式
上拉刷新
利用实例化后的
this.scroll
可以获取滚动的高度,和列表的高度,然后根据指导的顶部导航栏高度来计算出到底的临界点不计算头部
或者使用
还有最好做严谨判断,比如路由切换,组件销毁要判断
this.$scroll
是否存在,没有则重新实例化数据更新,可以触发
refresh
下拉刷新
判断出现下拉刷新是否超出距离,然后触发更新数据,数据加载(concat)数组头部
The text was updated successfully, but these errors were encountered: