小程序视频或音频自定义可拖拽进度条

小程序原生组件的音频播放时并没有进度条的显示,而此次项目中,鉴于原生的视频进度条样式太丑,产品要求做一个可拖拽的进度条满足需求。
视频和音频提供的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滑块移动速度很慢,拖拽移动的时间间隔较大,用户体验差。

原文地址:https://www.cnblogs.com/homehtml/p/12694248.html

时间: 2024-10-10 10:38:52

小程序视频或音频自定义可拖拽进度条的相关文章

小程序开发如何实现视频或音频自定义可拖拽进度条

程序原生组件的音频播放时并没有进度条的显示,而此次在我们所接的项目中,鉴于原生的视频进度条样式太丑,产品要求做一个可拖拽的进度条满足需求.视频和音频提供的api大致是相似的,可以根据以下代码修改为与音频相关的进度条.wxml的结构如下: <video id="myVideo" src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534

拖拽进度条(SeekBar)

监听方法:setOnSeekBarChangeListener 监听器:SeekBar.OnSeekBarChangeListener 简单,直接上代码: 1.Activity //拖拽进度条 public class SeekBarActivity extends Activity { private Context context; private SeekBar seekBar; private TextView textView; @Override protected void onC

基于&lt;MediaElement&gt;的WPF视频播放器(可拖拽进度条播放)

一.前言       前两天上峰要求做一个软件使用向导,使用WPF制作.这不,这两天从一张白纸开始学起,做一个播放演示视频的使用向导.以下是粗设计的原型代码: 二.效果图 三.代码 前台代码: 1 <Window 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

公众号|F小程序视频抓包

| 今天的主题全部是公众号,翻阅了一下浏览器历史记录竟然能够回想一下一天做了什么 先说今天的重点,那就是发现了一个公众号蹭热度的方法———音频.某公众号的热度文章竟然可以查找到相同标题的多篇文章,而且这文章的热度比原文章还高 进去仔细研究发现,只是一段音频——重新配音,重新编辑,加入音乐,把时长增加了(可能避免重复吧),这让我产生了丰富的联想 是不是要考虑建立一个小号专门搜索当日热门,来进行转录音,发挥一下我骚气的声音? 于是果断开通了第二个公众号(希望不要像买书或者下载软件一下,只搜集不使用)

自定义事件拖拽组件

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>自定义事件拖拽组件</title> <style> #div1{ width:100px; height:100px; background:red; position:abs

「小程序JAVA实战」小程序视频展示页开发(52)

转自:https://idig8.com/2018/09/22/xiaochengxujavashizhanxiaochengxushipinzhanshiyekaifa51/ 这次说下,小程序的视频组件,图标放置 关联到了之前没有说过的一个组件cover-view.https://github.com/limingios/wxProgram.git 中No.15 覆盖在原生组件之上的文本视图 官网介绍>https://developers.weixin.qq.com/miniprogram/d

微信小程序-隐藏和显示自定义的导航

微信小程序中不能直接操作window对象,document文档,跟html的树结构不相同. 实现类似导航的隐藏显示,如图效果: 点击网络显示或隐藏网络中包含的内容.其他类似. 如果是jquery很方便实现,能直接操作document.在微信小程序中实现思路是:在逻辑层定义变量,通过setData赋值. 方法一:通过变量直接赋值,给每一个要控制显示的view定义变量 .wxml 代码: <!--index.wxml--> <view class="navView" bi

vue视频: 自定义指令 &amp;&amp; 拖拽 &amp;&amp; 自定义键盘信息

v-textv-forv-html 指令: 扩展html语法 自定义指令:1. 自定义属性指令: Vue.directive(指令名称,function(参数){ this.el -> 原生DOM元素 // vm.$el }); <div v-red="参数"></div> 指令名称: v-red -> red * 注意: 必须以 v-开头(定义时去掉v-) <!DOCTYPE html> <html lang="en&q

DragVideo,一种在播放视频时,可以任意拖拽的方案

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53638896 前言 项目已开源到我的github: https://github.com/hejunlin2013/DragVideo DragVideo A Method to Drag the Video When Playing Video 一种在播放视频时,能够拖拽的方案 为什么有这个工程 经常在爱奇艺网站上看电影,看到如