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


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 相关文章推荐
编辑浪子版表单验证类
May 12 Javascript
一个轻量级的javascript库 pj介绍
Dec 19 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
Jan 04 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
javascript实现五星评价代码(源码下载)
Aug 11 Javascript
JS仿JQuery选择器功能
Mar 08 Javascript
AngularJS2中一种button切换效果的实现方法(二)
Mar 27 Javascript
微信小程序教程系列之新建页面(4)
Apr 17 Javascript
浅谈JS如何实现真正的对象常量
Jun 25 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
layui之select的option叠加问题的解决方法
Mar 08 Javascript
Vue自定义组件的四种方式示例详解
Feb 28 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHP生成HTML静态页面实例代码
2008/08/31 PHP
php模板函数 正则实现代码
2012/10/15 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
Symfony控制层深入详解
2016/03/17 PHP
php strftime函数的详细用法
2018/06/21 PHP
javascript 事件处理程序介绍
2012/06/27 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
python中set()函数简介及实例解析
2018/01/09 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
浅析Python __name__ 是什么
2020/07/07 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
《莫高窟》教学反思
2014/02/25 职场文书
人资专员岗位职责
2014/04/04 职场文书
教师暑期培训感言
2014/08/15 职场文书
政风行风评议心得体会
2014/10/21 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技