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


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 相关文章推荐
javascript 装载iframe子页面,自适应高度
Mar 20 Javascript
javascript iframe内的函数调用实现方法
Jul 19 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
浅谈javascript中replace()方法
Nov 10 Javascript
使用JavaScript获取Request中参数的值方法
Sep 27 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
Nov 05 Javascript
js实现简单的网页换肤效果
Jan 18 Javascript
从零开始最小实现react服务器渲染详解
Jan 26 Javascript
vue.js计算属性computed用法实例分析
Jul 06 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
May 30 Javascript
jquery实现直播视频弹幕效果
Feb 25 jQuery
JavaScript实现缓动动画
Nov 25 Javascript
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
PHP中读写文件实现代码
2011/10/20 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
Javascript中this关键字的一些小知识
2015/03/15 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
有趣的python小程序分享
2017/12/05 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
pytorch 图像中的数据预处理和批标准化实例
2020/01/15 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
有趣的广告词
2014/03/18 职场文书
六一儿童节标语
2014/10/08 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
公司酒会致辞
2015/07/30 职场文书
自书遗嘱范文
2015/08/07 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
MySQL如何解决幻读问题
2021/08/07 MySQL