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


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 相关文章推荐
捕获关闭窗口的脚本
Jan 10 Javascript
JavaScript之编码规范 推荐
May 23 Javascript
JavaScript的arguments对象应用示例
Sep 15 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
Nov 08 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
JavaScript表单验证实例之验证表单项是否为空
Jan 10 Javascript
理解javascript异步编程
Jan 27 Javascript
BootStrap 附加导航组件
Jul 22 Javascript
javascript简单实现等比例缩小图片的方法
Jul 27 Javascript
详解Puppeteer 入门教程
May 09 Javascript
bootstrap模态框关闭后清除模态框的数据方法
Aug 10 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 header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
shiro授权的实现原理
2017/09/21 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
对Python中range()函数和list的比较
2018/04/19 Python
python tkinter界面居中显示的方法
2018/10/11 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python实现扫码工具的示例代码
2020/10/09 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
优秀毕业生推荐信
2013/11/02 职场文书
怎样写好自荐信和推荐信
2013/12/26 职场文书
公司培训心得体会
2014/01/03 职场文书
保护水资源的标语
2014/06/17 职场文书
离职感谢信怎么写
2015/01/22 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
应收账款管理制度
2015/08/06 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android