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


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 相关文章推荐
js解决弹窗问题实现班级跳转DIV示例
Jan 06 Javascript
js获取字符串最后一位方法汇总
Nov 13 Javascript
node.js中的fs.createWriteStream方法使用说明
Dec 17 Javascript
JavaScript的9种继承实现方式归纳
May 18 Javascript
JavaScript中利用Array和Object实现Map的方法
Jul 27 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
Jun 12 jQuery
JavaScript-定时器0~9抽奖系统详解(代码)
Aug 16 Javascript
JavaScript设计模式之享元模式实例详解
Jan 17 Javascript
Vue中错误图片的处理的实现代码
Nov 07 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 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之Smarty入门
2007/01/04 PHP
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
Javascript Select操作大集合
2009/05/26 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
Python ATM功能实现代码实例
2020/03/19 Python
python软件都是免费的吗
2020/06/18 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
数控专业毕业生自荐信范文
2014/03/04 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
勤俭节约主题班会
2015/08/13 职场文书