vue-seamless-scroll 一个简单的基于 vue.js 的无缝滚动
特点
多样化配置
支持目前支持上下左右无缝滚动,单步滚动,以及支持水平方向的手动切换功能。
兼容多平台
IE9+、Firefox、Chrome、Safari、iOS、Android。
多技术栈版本支持
目前有 Vue2、JavaScript 版本。
安装
NPM
npm install vue-seamless-scroll --save
Yarn
yarn add vue-seamless-scroll
browser
<!-- https://cdn.jsdelivr.net/npm/vue-seamless-scroll@latest/dist/vue-seamless-scroll.min.js -->
<script src="vue-seamless-scroll.min.js"></script>
使用
注册组件
// **main.js**
// 1.全局 install
import Vue from 'vue'
import scroll from 'vue-seamless-scroll'
Vue.use(scroll)
// 或者你可以自己设置全局注册的组件名 默认注册的组件名是 vue-seamless-scroll
Vue.use(scroll,{componentName: 'scroll-seamless'})
// 2.单个.vue文件局部注册
<script>
import vueSeamlessScroll from 'vue-seamless-scroll'
export default {
components: {
vueSeamlessScroll
}
}
</script>
使用组件
<template>
<vue-seamless-scroll:data="listData" class="warp">
<ulclass="item">
<liv-for="(item, index) in listData" :key="index">
<spanclass="title" v-text="item.title"></span>
<spanclass="date" v-text="item.date"></span>
</li>
</ul>
</vue-seamless-scroll>
</template>
<script>import vueSeamlessScroll from 'vue-seamless-scroll'
export default {
name: 'Example01Basic',
components: {
vueSeamlessScroll
},
data () {
return {
listData: [{
'title': '无缝滚动第一行无缝滚动第一行',
'date': '2017-12-16'
}, {
'title': '无缝滚动第二行无缝滚动第二行',
'date': '2017-12-16'
}, {
'title': '无缝滚动第三行无缝滚动第三行',
'date': '2017-12-16'
}, {
'title': '无缝滚动第四行无缝滚动第四行',
'date': '2017-12-16'
}, {
'title': '无缝滚动第五行无缝滚动第五行',
'date': '2017-12-16'
}, {
'title': '无缝滚动第六行无缝滚动第六行',
'date': '2017-12-16'
}, {
'title': '无缝滚动第七行无缝滚动第七行',
'date': '2017-12-16'
}, {
'title': '无缝滚动第八行无缝滚动第八行',
'date': '2017-12-16'
}, {
'title': '无缝滚动第九行无缝滚动第九行',
'date': '2017-12-16'
}],
}
},
}</script>
<stylelang="scss" scoped>.warp {
height: 270px;
width: 360px;
margin: 0 auto;
overflow: hidden;
ul {
list-style: none;
padding: 0;
margin: 0 auto;
li,
a {
display: block;
height: 30px;
line-height: 30px;
display: flex;
justify-content: space-between;
font-size: 15px;
}
}
}</style>
组件配置
data
- type:
Array
- required:
true
无缝滚动 list 数据。
组件内部只关注 data 数组的 length。
classOption
step
- type:
Number
- required:
false
- default:
1
数值越大速度滚动越快。
step 值不建议太小,不然会有卡顿效果(如果设置了单步滚动,step 需是单步大小的约数,否则无法保证单步滚动结束的位置是否准确。~~~~~,比如单步设置的 30,step 不能为 4)。
limitMoveNum
- type:
Number
- required:
false
- default:
5
开启无缝滚动的数据量。
hoverStop
- type:
Boolean
- required:
false
- default:
false
是否启用鼠标 hover 控制。
direction
- type:
Number
- required:
false
- default:
1
方向: 0 往下 1 往上 2 向左 3 向右。
openTouch
- type:
Boolean
- required:
false
- default:
true
移动端开启 touch 滑动。
singleHeight
- type:
Number
- required:
false
- default:
0
单步运动停止的高度(默认值 0 是无缝不停止的滚动),direction 为 0|1 时生效。
singleWidth
- type:
Number
- required:
false
- default:
0
单步运动停止的宽度(默认值 0 是无缝不停止的滚动),direction 为 2|3 时生效。
waitTime
- type:
Number
- required:
false
- default:
1000
单步停止等待时间(默认值 1000ms)。
switchOffset
- type:
Number
- required:
false
- default:
30
左右切换按钮距离左右边界的边距(px)。
autoPlay
- type:
Boolean
- required:
false
- default:
true
需要实现手动切换左右滚动的时候,必须设置autoPlay:false
(1.1.17 版本开始,只需要设置navigation:false
),目前不支持环路。
switchSingleStep
- type:
Number
- required:
false
- default:
134
手动单步切换 step 值(px)。
switchDelay
- type:
Number
- required:
false
- default:
400
单步切换的动画时间(ms)。
switchDisabledClass
- type:
String
- required:
false
- default:
disabled
不可以点击状态的 switch 按钮父元素的类名。
isSingleRemUnit
- type:
Boolean
- required:
false
- default:
false
singleHeight and singleWidth 是否开启 rem 度量。
navigation
- type:
Boolean
- required:
false
- default:
false
左右方向的滚动是否显示控制器按钮,true 的时候 autoPlay 自动变为 false。
回调事件
<template>
<vue-seamless-scroll :data="listData" @ScrollEnd="ScrollEnd" class="warp">
<ul class="item">
<li v-for="(item, index) in listData" :key="index">
<span class="title" v-text="item.title"></span>
<span class="date" v-text="item.date"></span>
</li>
</ul>
</vue-seamless-scroll>
</template>
ScrollEnd
ScrollEnd: function(){
console.log("ScrollEnd")
}
注意项
1.最外层容器需要手动设置 width、height、overflow:hidden
2.左右的无缝滚动需要给主内容区域(即默认 slot 插槽提供)设定合适的 css width
属性(否则无法正确计算实际宽度)。 也可以通过给他设置为 display:flex;
无需设置 css width
属性
3.step 值不建议太小,不然会有卡顿效果(如果设置了单步滚动,step 需是单步大小的约数,否则无法保证单步滚动结束的位置是否准确,比如单步设置的 30,step 不能为 4)
4.需要实现手动切换左右滚动的时候,必须设置 autoPlay:false
(1.1.17 版本开始,只需要设置 navigation:false
),目前不支持环路
5.提供了 slot left-switch || right-switch
可以自由定义需要的按钮样式 外层有div已经定位了位置居中,距离两边侧的距离可以通过switchOffset参数调整
6.当按钮到达边界位置,会自动为无法点击状态按钮加上定义的 switchDisabledClass: 'disabled'
,可以按需配置
常见 Issues
1、事件无法被复制的问题
组件本身没有对 copy 的 html 做一个节点的深度事件复制(类似 jq 的 clone(true))
解决方法
1.事件代理,给父元素绑定对应事件,在需要的子元素上进行事件补获。(推荐)
2.简单的直接原生 js 进行
addEventListener
,存在异步数据无法绑定上问题。(不推荐)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论