1. 程式人生 > 程式設計 >微信小程式仿抖音視訊之整屏上下切換功能的實現程式碼

微信小程式仿抖音視訊之整屏上下切換功能的實現程式碼

效果演示:

微信小程式仿抖音視訊之整屏上下切換功能的實現程式碼

WXML:

<view class="video_box">
 <view bindtouchend="touchEnd" id="myVideo{{index}}" animation="{{animation}}" bindtouchstart="touchStart" bindtouchmove="touchMove" class="video_list" wx:for="{{video_list}}" data-index="{{index}}" wx:key="index" >
  <text style="color:red;font-size:30px;display:block;">{{index}}</text>
  <video custom-cache="{{false}}" src="{{item.video_src}}" vslide-gesture-in-fullscreen="{{false}}" direction = '{{0}}' enable-progress-gesture="{{false}}" show-fullscreen-btn="{{false}}" object-fit="cover"></video>
 </view>
</view>

WXSS:

.video_box{width: 100%;height: auto;position: fixed;top:0;bottom: 0;background-color: #000;}
.video_list{width: 100%;height: 100vh;position: relative;}
.video_list video{position: absolute;top:50%;margin-top:-30vw; width: 100%;height:56vw;padding: 0;}
Page({
 /**
  * 頁面的初始資料
  */
 data: {
  video_list:[
   {video_src:'https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218093206z8V1JuPlpe.mp4'},{video_src:'https://stream7.iqilu.com/10339/article/202002/17/c292033ef110de9f42d7d539fe0423cf.mp4'},{video_src:'https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218025702PSiVKDB5ap.mp4'},{video_src:'https://stream7.iqilu.com/10339/article/202002/18/2fca1c77730e54c7b500573c2437003f.mp4'},{video_src:'https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218093206z8V1JuPlpe.mp4'},{video_src:'https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218114723HDu3hhxqIT.mp4'},],pageY:'',// 觸控起始高度座標
  animation:'',// 視訊划動動畫
  up_stroke:false,// ture:上劃;false:下劃
  difference:'',// 拖動的距離
  windowHeight:'',// 螢幕高度
 },/**
  * 生命週期函式--監聽頁面載入
  */
 onLoad: function (options) {
  // 賦值:螢幕高度、
  this.setData({
   windowHeight:wx.getSystemInfoSync().windowHeight
  })
 },// 划動起始座標方法
 touchStart(e){
  // 開始座標
  this.setData({
   pageY:e.touches[0].pageY,})
 },// 划動過程座標方法
 touchMove(e){
  let n = e.currentTarget.dataset.index;   // 觸控的第幾個序號
  let difference = e.touches[0].pageY - this.data.pageY; // 移動後和起始值的差值
  if(this.is_continue(n,difference)){    // 判斷是否到底
   return;
  } 
  // 划動動畫 -------------------------------------
  var animation = wx.createAnimation({    // 移動動效
   duration: 0,});
  animation.top(difference - (n*this.data.windowHeight)).step()
  this.setData({
   animation: animation.export(),// 動畫
   up_stroke:difference > 0 ? false : true,// 是否上劃,difference:difference,// 拖動的距離
  })
 },// 划動結束座標方法
 touchEnd(e){
  let n = e.currentTarget.dataset.index;
  let difference = this.data.difference; // 拖動的距離
  if(this.is_continue(n,difference)){
   return;
  }
  const windowHeight = this.data.windowHeight;   // 螢幕高度
  let that = this;
  // 根據id獲取點選元素距頂部高度
  var query = wx.createSelectorQuery();
  let id = '#' + e.currentTarget.id;
  query.select(id).boundingClientRect(function (rect) { // 獲取高度
   if(Math.abs(difference) <= windowHeight /7){   // 小於1/7回原位置 ---------------------------
    var animation = wx.createAnimation({ // 移動動效
     duration: 100,});
    animation.top(-(n * windowHeight)).step()
    that.setData({
     animation: animation.export(),up_stroke:false,// 重置划動狀態
     difference:0,// 重置划動距離
    })
   }else{ // 大於1/4,移至拖動的下一個視訊 --------------------------------
    var animation = wx.createAnimation({ // 移動動效
     duration: 200,});
    that.data.up_stroke ? n++ : n--;   // 上劃:n+1 下劃:n-1
    animation.top(-(n * windowHeight)).step()
    that.setData({
     animation: animation.export(),// 重置划動距離
    })
   }
  }).exec();
 },// 判斷是否到底
 is_continue(n,difference){
  if(difference < 0){ // 上劃
   if(n == this.data.video_list.length - 1){ // 最後一個視訊,提示到底
    if(difference < -20){
     wx.showToast({
      title: '已經到底了~~',icon:'none',duration:1000
     })
    }
    return true;
   }
  }else{
   if(n == 0){
    if(difference > 20){
     wx.showToast({
      title: '上面沒有了~~',duration:1000
     })
    }
    return true;
   }
  }
 },})

總結

到此這篇關於微信小程式仿抖音視訊之整屏上下切換功能的實現程式碼的文章就介紹到這了,更多相關微信小程式抖音視訊整屏切換內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!