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


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 语言的递归编程
May 18 Javascript
JavaScript的parseInt 取整使用
May 09 Javascript
JS防止用户多次提交的简单代码
Aug 01 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
Aug 07 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
Jan 26 Javascript
javacript获取当前屏幕大小
Jun 04 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
Jun 21 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
Sep 25 Javascript
关于angular引入ng-zorro的问题浅析
Sep 09 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 Javascript
JavaScript Dom实现轮播图原理和实例
Feb 19 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随机生成唯一HASH值自定义函数
2015/04/20 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
设定php简写功能的方法
2019/11/28 PHP
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
python抓取最新博客内容并生成Rss
2015/05/17 Python
Python 基础教程之包和类的用法
2017/02/23 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
谈谈python中GUI的选择
2018/03/01 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
CSS3 边框效果
2019/11/04 HTML / CSS
IT工程师岗位职责
2014/07/04 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
环保证明
2015/06/23 职场文书
七年级作文之秋游
2019/10/21 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers