|
本帖最后由 vivo官方技术团队 于 2020-7-20 14:48 编辑
背景
考虑到部分短视频快应用的开发者,需要实现滑动刷屏的效果,这里使用快应用的list组件,简单实现一个仿抖音的滑动刷屏demo,可供感兴趣的同学参考。
- <template>
- <tabs class="wrap" index='1'>
- <tab-bar class="title">
- <text class="nav">关注</text>
- <text class="nav">推荐</text>
- </tab-bar>
- <tab-content>
- <div class="video-item"><text>关注</text></div>
- <list @scroll="scroll" id="list">
- <block for="list">
- <list-item @appear="appear($idx)" class="video-item" type="video">
- <video autoplay="true" src="{{$item.src}}" controls="false"></video>
- <div class="mask" id="mask{{$idx}}">
- <text class="name">{{$item.name}}</text>
- <text class="desc">{{$item.desc}}</text>
- </div>
- </list-item>
- </block>
- </list>
- </tab-content>
- </tabs>
- </template>
复制代码
主要思路及关键代码
1.list-item的appear事件,判断下一个list-item的出现时机,定义变量currentIndex来存放当前出现的list-item的index;
- appear(index) {
- this.currentIndex = index
- }
复制代码
2.使用list的scroll事件,判断用户滑动屏幕时的状态。返回的参数stateValue有下列三种状态:
- 0: list 停止滑动
- 1: list 正在通过用户的手势滑动
- 2: list 正在滑动,用户已松手
3.当stateValue为2或0时,获取list元素并调用scrollTo方法,让当前list-item直接展示到当前页
- scroll(e) {
- if (e.scrollState === 2 || e.scrollState === 0) {
- this.$element('list').scrollTo({ index: this.currentIndex , smooth: true })
- }
- }
复制代码
效果展示
测试用的在线视频地址参考:https://www.jianshu.com/p/34ce7f9b469a
|
|