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


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 this关键字使用分析
Oct 21 Javascript
使用jquery实现select添加实现后台权限添加的效果
May 28 Javascript
JavaScript针对网页节点的增删改查用法实例
Feb 02 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
Sep 21 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
Angular 4.X开发实践中的踩坑小结
Jul 04 Javascript
浅谈angular4 ng-content 中隐藏的内容
Aug 18 Javascript
windows下更新npm和node的方法
Nov 30 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
jQuery实现的导航条点击后高亮显示功能示例
Mar 04 jQuery
深入解析koa之异步回调处理
Jun 17 Javascript
JS实现滚动条触底加载更多
Sep 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
vue中监听返回键问题
2019/08/28 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
python实现计算资源图标crc值的方法
2014/10/05 Python
构建Python包的五个简单准则简介
2015/06/15 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
python实现括号匹配的思路详解
2018/08/23 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
怎样声明子类
2013/07/02 面试题
出国导师推荐信
2015/03/25 职场文书
2015年推普周活动总结
2015/03/27 职场文书
芙蓉镇观后感
2015/06/10 职场文书
团队执行力培训心得体会
2015/08/15 职场文书