小程序视频或音频自定义可拖拽进度条的示例代码


Posted in Javascript onSeptember 30, 2018

小程序原生组件的音频播放时并没有进度条的显示,而此次项目中,鉴于原生的视频进度条样式太丑,产品要求做一个可拖拽的进度条满足需求。
视频和音频提供的api大致是相似的,可以根据以下代码修改为与音频相关的进度条。

wxml的结构如下:

<video id="myVideo" src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400" enable-danmu danmu-btn controls="{{false}}" autoplay='{{true}}' bindtimeupdate="videoUpdate" objectFit="fill"></video>
<view class='process-container'>
  <image src='{{playStates ? "../../assets/image/pause_icon.png" : "../../assets/image/play_icon.png"}}' class='video-controls-icon' bindtap='videoOpreation'></image>
   <view class='slider-container'>
   <slider bindchange="sliderChange" bindchanging="sliderChanging" step="1" value="{{sliderValue}}" backgroundColor="#A8A8A8" activeColor="#FFEE83" block-color="#FFEE83"  />
  </view> 
</view>

data中初始化了sliderValue, updateState, playStates几个变量。

data: {
  sliderValue: 0, //控制进度条slider的值,
  updateState: false, //防止视频播放过程中导致的拖拽失效
  playStates: true //控制播放 & 暂停按钮的显示
 },

 onReady: function () {
  this.videoContext = wx.createVideoContext('myVideo');
  this.setData({
   updateState: true
  })
 },

videoUpdate在播放进度变化时触发,触发频率 250ms 一次。event.detail = {currentTime, duration},currentTime表示当前时间,duration表示总时长,都以秒为单位。

videoUpdate(e) {
  if (this.data.updateState) { //判断拖拽完成后才触发更新,避免拖拽失效
   let sliderValue = e.detail.currentTime / e.detail.duration * 100;
   this.setData({
    sliderValue,
    duration: e.detail.duration
   })
  }
 },

进度条可拖拽并指定视频跳转到相应的位置

sliderChanging(e) {
  this.setData({
   updateState: false //拖拽过程中,不允许更新进度条
  })
 },
 sliderChange(e) {
  if (this.data.duration) {
   this.videoContext.seek(e.detail.value / 100 * this.data.duration); //完成拖动后,计算对应时间并跳转到指定位置
   this.setData({
    sliderValue: e.detail.value,
    updateState: true //完成拖动后允许更新滚动条
   })
  }
 },

暂停/播放视频

videoOpreation() {
  this.data.playStates ? this.videoContext.pause() : this.videoContext.play();
  this.setData({
   playStates: !this.data.playStates
  })
 },

总结:slider的最大值为100, step的值最小为1,这会导致视频或音频播放时间过长的时候,slider滑块移动速度很慢,拖拽移动的时间间隔较大,用户体验差。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
延时重复执行函数 lLoopRun.js
May 08 Javascript
jQeury淡入淡出需要注意的问题
Sep 08 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
Apr 22 Javascript
js的toUpperCase方法用法实例
Jan 27 Javascript
第六篇Bootstrap表格样式介绍
Jun 21 Javascript
jquery的checkbox,radio,select等方法小结
Aug 30 Javascript
Bootstrap 手风琴菜单的实现代码
Jan 20 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
Jun 14 Javascript
微信小程序实现的五星评价功能示例
Apr 25 Javascript
Vue点击切换Class变化,实现Active当前样式操作
Jul 17 Javascript
关于vue的列表图片选中打钩操作
Sep 09 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
angularjs1.5 组件内用函数向外传值的实例
Sep 30 #Javascript
angular2 组件之间通过service互相传递的实例
Sep 30 #Javascript
详解如何webpack使用DllPlugin
Sep 30 #Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 #Javascript
vue-router 手势滑动触发返回功能
Sep 30 #Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 #Javascript
JS数组实现分类统计实例代码
Sep 30 #Javascript
You might like
一个颜色轮换的简单例子
2006/10/09 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
js自动生成对象的属性示例代码
2013/10/28 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
react以create-react-app为基础创建项目
2018/03/14 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Python 函数基础知识汇总
2018/03/09 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
测控技术与仪器个人求职信范文
2013/12/30 职场文书
大学生村官任职感言
2014/01/09 职场文书
《桥》教学反思
2014/04/09 职场文书
解除施工合同协议书
2014/10/17 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL