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


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解决由border属性引起的div宽度问题
Nov 26 Javascript
利用js读取动态网站从服务器端返回的数据
Feb 10 Javascript
解决js下referer兼容各大浏览器的方法
Nov 03 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
浏览器兼容性问题大汇总
Dec 17 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 Javascript
JS判断用户用的哪个浏览器实例详解
Oct 09 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
layui自定义工具栏的方法
Sep 19 Javascript
浅谈layui里的上传控件问题
Sep 26 Javascript
vue实现点击按钮下载文件功能
Oct 11 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 格式化数字的时候注意数字的范围
2010/04/13 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
jquery解析xml字符串示例分享
2014/03/25 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
常见的python正则用法实例讲解
2016/06/21 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
Django中的Model操作表的实现
2018/07/24 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Python中关于浮点数的冷知识
2019/09/22 Python
Python字节单位转换实例
2019/12/05 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
问卷调查计划书
2014/01/10 职场文书
营销总经理岗位职责
2014/02/02 职场文书
《锄禾》教学反思
2014/04/08 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
2014年信访工作总结
2014/11/17 职场文书
会议室管理制度范本
2015/08/06 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题
mysql 获取时间方式
2022/03/20 MySQL
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL