微信小程序仿抖音视频之整屏上下切换功能的实现代码


Posted in Javascript onMay 24, 2020

效果演示:

微信小程序仿抖音视频之整屏上下切换功能的实现代码

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'},
   {video_src:'https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218025702PSiVKDB5ap.mp4'},
   {video_src:'https://stream7.iqilu.com/10339/article/202002/17/c292033ef110de9f42d7d539fe0423cf.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(),
     up_stroke:false, // 重置划动状态
     difference:0,   // 重置划动距离
    })
   }
  }).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: '上面没有了~~',
      icon:'none',
      duration:1000
     })
    }
    return true;
   }
  }
 },
})

总结

到此这篇关于微信小程序仿抖音视频之整屏上下切换功能的实现代码的文章就介绍到这了,更多相关微信小程序抖音视频整屏切换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
encode脚本和normal脚本混用的问题与解决方法
Mar 08 Javascript
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
Dec 14 Javascript
JQuery 在线引用及测试引用是否成功
Jun 24 Javascript
充分发挥Node.js程序性能的一些方法介绍
Jun 23 Javascript
jquery带动画效果幻灯片特效代码
Aug 27 Javascript
自定义刻度jQuery进度条及插件
Sep 02 Javascript
javascript基础语法学习笔记
Jan 04 Javascript
学JavaScript七大注意事项【必看】
May 04 Javascript
JS实现拖拽的方法分析
Dec 20 Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 jQuery
mui js控制开关状态、修改switch开关的值方法
Sep 03 Javascript
如何使用vue slot创建一个模态框的实例代码
May 24 #Javascript
使用React代码动态生成栅格布局的方法
May 24 #Javascript
ES6对象操作实例详解
May 23 #Javascript
ES6函数和数组用法实例分析
May 23 #Javascript
ES6箭头函数和扩展实例分析
May 23 #Javascript
ES6新增的数组知识实例小结
May 23 #Javascript
ES6扩展运算符和rest运算符用法实例分析
May 23 #Javascript
You might like
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
Python设计模式之抽象工厂模式
2016/08/25 Python
python开发简易版在线音乐播放器
2017/03/03 Python
python实现抖音视频批量下载
2018/06/20 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
python3 enum模块的应用实例详解
2019/08/12 Python
python实现淘宝购物系统
2019/10/25 Python
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
公司同意接收函
2014/01/13 职场文书
退税申请报告怎么写
2015/05/18 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
公司考勤管理制度
2015/08/04 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server