swiper视频优化
wxml
<view class="detail-container" > <view class="det-inner" > <swiper class="inner-swiper" interval="3000" duration="500" vertical="true" bindanimationfinish="changeWofan" current="{{nowIndex}}"> <block wx:key="list" wx:for="{{videoList}}"> <swiper-item class="swiper-only"> <view class="only-box" wx:if="{{nowIndex>index-3}}"> <view class="only-b-back"> <view class="back-v"> <view class="back-v-pic wh flexca"> <image mode="aspectFill" class="wh" src="{{item.videoLogo}}"></image> </view> <video id="myVideo{{item.id}}" style="{{nowIndex==index?'':'opacity:0'}}" initial-time="{{0}}" class="back-v-start" src="{{item.videoUrl}}" controls="{{false}}" show-play-btn="{{false}}" show-fullscreen-btn="{{false}}" loop="{{false}}" show-center-play-btn="{{false}}" bindended="endVideoFn" ></video> </view> <view class="back-v-zhe flexca" catchtap="startStopBtn"> <view class="zhe-start-btn" wx:if="{{!videoStart&&index==nowIndex}}"> <image mode="aspectFill" class="wh" src="../../resources/pic/school_detail_star.png"></image> </view> </view> </view> <view class="only-b-btm flexa" wx:if="{{index==nowIndex}}"> <view class="b-btm-per"> <image wx:if="{{item.isSelf==1}}" mode="aspectFill" class="wh" src="../../../../image/home/zj_xnjz_logo.png"></image> <image wx:if="{{item.isSelf==0}}" mode="aspectFill" class="wh" src="{{item.logo}}"></image> </view> <view class="b-btm-text corfff ml20"> <view class="f32" wx:if="{{item.isSelf==1}}" style="line-height:32rpx;">小鸟家装{{nowIndex+3>index}}</view> <view class="f32" wx:else style="line-height:32rpx;">{{item.designerUserName}}</view> <view class="f24 mt15" style="line-height:24rpx;">{{item.brownNum}}次播放</view> </view> <view class="b-btm-btn bgc2z corfff f24" catchtap="backHome">查看设计师</view> </view> <view class="only-b-rt" wx:if="{{index==nowIndex}}"> <view class="b-rt-pic flexca"> <button class="b-rt-pic-btn wh" open-type="share"> <image mode="aspectFill" class="wh" src="../../resources/pic/school_detail_share.png"></image> </button> </view> <view class="b-rt-text tc">分享</view> </view> <view class="only-b-before" wx:if="{{endVideo&&index==nowIndex}}"> <view class="b-before-in"> <view class="before-in-top flexb"> <view class="in-top-tem" catchtap="play"> <view class="top-tem-box"> <image class="wh" src="../../resources/pic/school_detail_restart.png"></image> </view> <view class="tem-box-text corfff f32"> <view class="tc box-text-t">重播</view> </view> </view> <view class="in-top-tem"> <view class="top-tem-box"> <button class="b-rt-pic-btn wh" open-type="share"> <image class="wh" src="../../resources/pic/school_detail_bieshare.png"></image> </button> </view> <view class="tem-box-text corfff f32"> <view class="tc box-text-t">分享给好友</view> </view> </view> </view> <view class="before-in-dwon"> <view class="dwon-pic"> <image class="wh" src="../../resources/pic/school_detail_up.png"></image> </view> <view class="f26 corfff tc mt5">上滑查看更多</view> </view> </view> </view> </view> </swiper-item> </block> </swiper> <view class="det-back corfff flexa" wx:if="{{!cheuid}}" catchtap="backFn"> <view class="det-back-lf"> <image class="wh" src="../../../../image/flow/flow_rt.png"></image> </view> </view> <view class="det-end tc pb10" wx:if="{{nowIndex==(videoList.length-1)}}"> <text class="cor9 f26">没有更多数据了</text> </view> <view class="det-start tc pt50" wx:if="{{nowIndex==0}}"> <text class="cor9 f26">已经到顶了</text> </view> </view> </view>
wxss
page { width: 100%; height: 100%; background-color: #000 } .detail-container { width: 100%; height: 100%; } .det-back{ width: 20%; position: absolute; left: 0; top: 0; padding: 24rpx; padding-top: 35px; z-index: 20; } .det-back-lf{ width: 20rpx; height: 38rpx; transform: rotateY(180deg); } .det-inner { width: 100%; height: 100%; position: relative; } .inner-swiper { width: 100%; height: 100%; position: relative; z-index: 1; } .swiper-only { position: relative; } .only-box { width: 100%; height: 100%; position: relative; } .only-b-back { width: 100%; height: 100%; overflow: hidden; position: relative; } .back-v{ width: 100%; height: 100%; overflow: hidden; } .back-v-start{ width: 100%; height: 100%; position: relative; z-index: 2; } .back-v-pic{ position: absolute; left: 0; top: 0; z-index: 1; } .back-v-zhe{ width: 100%; height: 100%; overflow: hidden; position: absolute; top: 0; left: 0; z-index: 5; } .zhe-start-btn{ width: 100rpx; height: 100rpx; animation: danru 1s ease; } @keyframes danru { 0% { opacity: 0; } 100% { opacity: 1; } } .only-b-btm{ position: absolute; left: 24rpx; bottom: 100rpx; z-index: 10; } .b-btm-per{ width: 100rpx; height: 100rpx; background-color: #fff; border-radius: 50%; overflow: hidden; } .b-btm-btn{ width: 165rpx; height: 70rpx; border-radius: 5rpx; margin-left: 45rpx; text-align: center; line-height: 70rpx; } .only-b-rt{ width: 90rpx; height: 90rpx; position: absolute; right: 24rpx; bottom: 450rpx; z-index: 10; overflow: visible; } .b-rt-pic{ width: 100%; height: 100%; border-radius: 50%; } .b-rt-text{ width: 100%; color: #fff; font-size: 30rpx; position: absolute; top: 100%; left: 0; padding-top: 10rpx; } .b-rt-pic-btn{ background-color: transparent; border: 1px solid transparent; padding: 0; overflow: hidden; } .b-rt-pic-btn:after { border: 0; } .only-b-before{ width: 100%; height: 100%; position: absolute; left: 0; top: 0; z-index: 15; background-color: rgba(0,0,0,0.7); } .b-before-in{ width: 100%; position: absolute; left: 0; bottom: 0; padding-bottom: 330rpx; } .before-in-top{ width: 375rpx; margin: 0 auto; } .in-top-tem{ width: 100rpx; position: relative; } .top-tem-box{ width: 100rpx; height: 100rpx; } .tem-box-text{ width: 100%; position: absolute; left: 0; top: 100%; } .box-text-t{ padding-top: 20rpx; width: 200rpx; position: relative; transform: translateX(-25%); } .before-in-dwon{ width: 375rpx; margin: 0 auto; margin-top: 110rpx; } .dwon-pic{ width: 45rpx; height: 45rpx; margin: 0 auto; } .det-end{ width: 100%; position: absolute; left: 0; bottom: 0; z-index: 0; } .det-start{ width: 100%; position: absolute; left: 0; top: 0; z-index: 0; }
js
const FZ = require('../../../../util/util.js'); const Upj = require('../../../../util/user.js'); // const videoList = urls.map((url, index) => ({ id: index + 1, url })) Page({ /** * 页面的初始数据 */ data: { videoList: [], nowIndex: 0, videoStart: true, endVideo: false, pageNo: 2, chetype: '', checolumid: '', cheuid: '', cheVideoid: 0, //dom 的id }, backFn: function() { wx.navigateBack({ delta: 1 }) }, /** * 生命周期函数--监听页面加载 */ onLoad: function(opt) { let that = this; let cheuid = ''; let jsonParam = JSON.parse(decodeURIComponent(opt.jsonParam)); let user = wx.getStorageSync('user'); console.log(opt) console.log(jsonParam) let chenowIndex = 0; if (opt.index) { chenowIndex = opt.index; } if (opt.cheuid) { cheuid = opt.cheuid; } console.log(chenowIndex) console.log(cheuid) // this.setData({ videoList: [jsonParam] }) let videoList = jsonParam; for (let i = 0; i < videoList.length;i++){ videoList[i].url = videoList[i].videoUrl; } console.log(videoList) this.setData({ cheuid, videoList, nowIndex: chenowIndex, pageNo: (jsonParam[jsonParam.length - 1].page + 1), chetype: opt.type, checolumid: opt.columid }) if (!user) { that.startLogin(); } if (user) { if (chenowIndex > (jsonParam.length - 2)) { this.nexVideoList() } this.detailFn(); } }, backHome: function() { wx.switchTab({ url: '/page/tabBar/home/index' }) }, onReady() { let videoList = this.data.videoList; let nowIndex = this.data.nowIndex; this.videoCtx = wx.createVideoContext('myVideo' + videoList[nowIndex].id) console.log(videoList) this.videoCtx.play() }, startStopBtn() { let videoStart = this.data.videoStart; if (videoStart) { this.pause() } else { this.play() } }, play() { console.log(1) this.videoCtx.play() this.setData({ videoStart: true, endVideo: false }) }, detailFn() { let that = this; let nowIndex = this.data.nowIndex; let videoList = this.data.videoList; let user = wx.getStorageSync('user'); if (!user){return} let datVal = { userId: user.id, contentId: videoList[nowIndex].id } console.log(datVal) FZ._postJ3('column/v1/columncontentdetail', datVal).then(function(data) { console.log(data) let resoult = data.data; if (resoult) { } else { if (data.message != "正常") { wx.showToast({ icon: 'none', title: data.message, }) } } }) }, haveEndAddfn:function(e){ }, pause() { console.log(2) this.videoCtx.pause() this.setData({ videoStart: false }) }, changeWofan: function (e) { console.log(e) this.videoCtx.pause() let videoList = this.data.videoList; this.videoCtx = wx.createVideoContext('myVideo' + videoList[e.detail.current].id) console.log(e.detail.current) this.setData({ cheVideoid: videoList[e.detail.current].id, endVideo: false, nowIndex: e.detail.current, videoStart: true, }) this.videoCtx.play() this.detailFn(); console.log(e.detail.current, 'dangqian') if (e.detail.current == (videoList.length - 2)) { console.log(this.data.pageNo) this.nexVideoList() } }, // 加载更多 nexVideoList: function() { let that = this; let pageNo = this.data.pageNo; let navItem = this.data.navItem; let user = wx.getStorageSync('user'); let videoList = this.data.videoList; let chetype = this.data.chetype; let checolumid = this.data.checolumid; let nowIndex = this.data.nowIndex; let datVal = { userId: user.id, type: chetype, columnId: checolumid, pageSize: 10, pageNo: pageNo } console.log("啥情况") FZ._postJ3('column/v1/listcolumncontents', datVal).then(function(data) { console.log(data) let resoult = data.data; if (resoult) { if (resoult.length > 0) { for (let i = 0; i < resoult.length; i++) { resoult[i].url = resoult[i].videoUrl; } videoList = videoList.concat(resoult) console.log(videoList) pageNo++ that.setData({ videoList: videoList, pageNo }); } else { // that.setData({ // pageTottomText: getApp().globalData.endText // }); if (videoList.length - 1 == nowIndex) { wx.showToast({ title: '没有更多数据了', icon: 'none', duration: 2000 }) } } } else { if (data.message != "正常") { wx.showToast({ icon: 'none', title: data.message, }) } } }) }, // 视频播放结束 endVideoFn: function() { console.log("播放结算") this.setData({ endVideo: true }) }, // 初始注册-------------------------------- // 初始注册 startLogin: function() { let that = this; try { Upj._start_Login(that.data.cheuid).then((data) => { let resoult = data; if (resoult) { that.setData({ user: resoult }) wx.setStorageSync('user', resoult); // console.log("1这是成功") // console.log(that.data.nowIndex) // console.log(that.data.videoList.length - 2) if (that.data.nowIndex > (that.data.videoList.length - 3)) { // console.log("2这是成功") that.nexVideoList() } this.detailFn(); } else { wx.showToast({ title: data.message, icon: 'none', duration: 3000 }) } }).catch((data) => { wx.showToast({ title: data.message, icon: 'none', duration: 3000 }) }) } catch (err) { console.log(err) } }, onShareAppMessage: function(e) { let that = this; let user = wx.getStorageSync('user'); let cityon = wx.getStorageSync('cityon'); let shareTitle = ''; let videoList = this.data.videoList; let nowIndex = this.data.nowIndex; let imageUrl = ''; console.log("转发数据") console.log() if (videoList[nowIndex].videoLogo) { imageUrl = videoList[nowIndex].videoLogo; } try { return { title: shareTitle, imageUrl: imageUrl, path: '/page/school/pages/study/detail?cheuid=' + user.id + "&jsonParam=" + encodeURIComponent(JSON.stringify(videoList)) + '&index=' + nowIndex + '&type=' + this.data.chetype + '&columid=' + this.data.checolumid, success: function(res) { console.log(res) }, fail: function(res) {} } } catch (e) { console.log(e) } }, })