效果图
安装依赖
npm install better-scroll -S
常见用法
BetterScroll 最常见的应用场景是列表滚动,我们来看一下它的 html 结构。
<div class="wrapper">
<ul class="content">
<li>...</li>
<li>...</li>
...
</ul>
<!-- 这里可以放一些其它的 DOM,但不会影响滚动 -->
</div>
上面的代码中 BetterScroll 是作用在外层 wrapper 容器上的,滚动的部分是 content 元素。这里要注意的是,BetterScroll 只处理容器(wrapper)的第一个子元素(content)的滚动,其它的元素都会被忽略。
最简单的初始化代码如下:
<template>
<div class='list' ref = "wrapper">
<div>
// 想具有滚动效果的dom元素
</div>
</div>
</template>
<script>
import BScroll from 'better-scroll'
export default {
mounted () {
this.scroll = new BScroll(this.$refs.wrapper)
}
}
</script>
完整代码
<!-- -->
<template>
<div class='list' ref = "wrapper">
<div>
<div class = "area">
<p>当前城市</p>
<div class="btnList">
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>热门城市</p>
<div class="btnList">
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>当前城市</p>
<div class="btnList">
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>热门城市</p>
<div class="btnList">
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
</div>
</div><div class = "area">
<p>当前城市</p>
<div class="btnList">
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>热门城市</p>
<div class="btnList">
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>当前城市</p>
<div class="btnList">
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>热门城市</p>
<div class="btnList">
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
</div>
</div><div class = "area">
<p>当前城市</p>
<div class="btnList">
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>热门城市</p>
<div class="btnList">
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>当前城市</p>
<div class="btnList">
<div class="btn">北京</div>
</div>
</div>
<div class = "area">
<p>热门城市</p>
<div class="btnList">
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
<div class="btn">北京</div>
</div>
</div>
</div>
</div>
</template>
<script>
import BScroll from 'better-scroll'
export default {
components: {},
data () {
return {
}
},
methods: {},
created () {},
mounted () {
this.scroll = new BScroll(this.$refs.wrapper)
}
}
</script>
<style lang = "less" scoped>
.list{
overflow: scroll;
position: absolute;
top: 1.7rem;
bottom: 0;
.area{
p{
background-color: #EBEBED;
font-size: .2rem;
font-weight: 600;
line-height: .5rem;
text-indent: .2rem;
}
.btnList{
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
padding: .15rem 0;
padding-right: .4rem;
.btn{
width: 1rem;
padding: .1rem .2rem;
margin: .1rem .15rem;
border: 1px solid #ccc;
text-align: center;
}
}
}
}
</style>
坑
在滑块中可能会碰到这样的bug,在pc端模拟是点击没有问题,但是在真机测试时,无法触发click事件,这个时候就要在better-scroll初始化的时候加上一行配置
{ click: true }
完整初始化代码
mounted () {
this.scroll = new BScroll(this.$refs.wrapper, { click: true })
},
完美解决移动端双击不触发onclick事的bug