一直以为抖音短视频切换假如用小程序做的话应该是比较简单的,直接用swiper实现就好,但在实际写的过程中才发现没那么简单,要控制的逻辑还是挺多的。
还是先看效果
体验路径
自定义组件系列》》仿抖音短视频切换
代码逻辑
直接调用自定义的swiper组件就好
调用代码
js
const videoList = []
Page({data: {videoList,activeId:2,isPlaying:true},onLoad() {var that = thiswx.getSystemInfo({success: function(res) {that.setData({systemInfo:res,menuButtonBoundingClientRect: wx.getMenuButtonBoundingClientRect(),})console.log(res)},})this.setData({videoList: [{id: 1,title: "黄渤",desc: "中国女排发布会,黄渤与巩俐中国女排发布会,黄渤与巩俐",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851354869410.mp4?sign=1f636557effa496e074332e3f4b9b8aa&t=1589851461"}, {id: 2,title: "莱万多夫斯基",desc: "莱万多夫斯基逆天五子登科",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851322674828.mp4?sign=185e46cba885c4303c7cf5f8658bea9b&t=1589851482"}, {id: 3,title: "驾考那些事",desc: "半坡起步是多难",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851312271309.mp4?sign=978660c42305ec67d4c3d603c2ae5a3d&t=1589851496"}, {id: 4,title: "小美女",desc: "蹦蹦跳跳",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851307588534.mp4?sign=43cf344e83089348eeeea38d26ba51bb&t=1589851514"}, {id: 5,title: "黄渤",desc: "中国女排发布会,黄渤与巩俐中国女排发布会,黄渤与巩俐",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851354869410.mp4?sign=1f636557effa496e074332e3f4b9b8aa&t=1589851461"}, {id: 6,title: "莱万多夫斯基",desc: "莱万多夫斯基逆天五子登科",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851322674828.mp4?sign=185e46cba885c4303c7cf5f8658bea9b&t=1589851482"}, {id: 7,title: "驾考那些事",desc: "半坡起步是多难",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851312271309.mp4?sign=978660c42305ec67d4c3d603c2ae5a3d&t=1589851496"}, {id: 8,title: "小美女",desc: "蹦蹦跳跳",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851307588534.mp4?sign=43cf344e83089348eeeea38d26ba51bb&t=1589851514"}, {id: 9,title: "黄渤",desc: "中国女排发布会,黄渤与巩俐中国女排发布会,黄渤与巩俐",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851354869410.mp4?sign=1f636557effa496e074332e3f4b9b8aa&t=1589851461"}, {id: 10,title: "莱万多夫斯基",desc: "莱万多夫斯基逆天五子登科",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851322674828.mp4?sign=185e46cba885c4303c7cf5f8658bea9b&t=1589851482"}, {id: 11,title: "驾考那些事",desc: "半坡起步是多难",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851312271309.mp4?sign=978660c42305ec67d4c3d603c2ae5a3d&t=1589851496"}, {id: 12,title: "小美女",desc: "蹦蹦跳跳",url: "https://6e6f-normal-env-ta6pc-1300924598.tcb.qcloud.la/video-swiper/1589851307588534.mp4?sign=43cf344e83089348eeeea38d26ba51bb&t=1589851514"}]})},onPlay(e) {// console.log("开始播放",e)},onShowPause(e){this.setData({isPlaying: false})},onHidePause(e){this.setData({isPlaying: true})},onPause(e) {},onEnded(e) {// console.log(e)},onError(e) {},onWaiting(e) {},onTimeUpdate(e) {},onProgress(e) {},onChange(e) {console.log(e)console.log("id",e.detail.activeId)this.setData({activeId:e.detail.activeId})},onLoadedMetaData(e) {console.log('LoadedMetaData', e)},go2Home() {wx.navigateBack({delta: 1,})},
})
wxml
<mp-video-swiper class="video-swiper" video-list="{{videoList}}" bindplay="onPlay" bindpause="onPause" bindtimeupdate="onTimeUpdate" bindended="onEnded" binderror="onError" bindwaiting="onWaiting" bindprogress="onProgress" bindloadedmetadata="onLoadedMetaData"bindchange="onChange" bindshowPause="onShowPause" bindhidePause="onHidePause"></mp-video-swiper><image wx:if="{{!isPlaying}}" class="imagePlayer" style="left:{{systemInfo.screenWidth/2-40/2}}px;top:{{systemInfo.screenHeight/2-40/2}}px" src="./player.png"></image>
<view class="viewFloat"><view class="videoTitle">{{videoList[activeId-1].title}}</view><view class="videoDes">{{videoList[activeId-1].desc}}</view>
</view>
<view class="viewTabContainer"><view class="viewTab">首页</view><view class="viewTab">动态</view><view class="viewTab">商品</view><view class="viewTab">我的</view>
</view>
wxss
@import '../common.wxss';page{background-color: black;height: 100%;
}mp-video-swiper {width: 100%;height: 100%;
}
.imagePlayer{width: 40px;height: 40px;position: fixed;z-index: 1000;opacity: 0.6
}
.viewFloat{position: fixed;display: flex;z-index: 100;width: 500rpx;bottom: 60px;color: white;margin:20rpx; flex-direction: column}
.videoTitle{font-size: 18px;font-weight: 500;}
.videoDes{font-size: 14px;
}
.viewTabContainer{position: fixed;display: flex;justify-content: space-around;align-items: center;flex-direction: row;width: 100%;height: 50px;border-top: 0.5px solid white;bottom: 0;
}
.viewTab{color: white;
}