返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS实现进度条顺滑版详细方案
  • 853
分享到

JS实现进度条顺滑版详细方案

2024-04-02 19:04:59 853人浏览 薄情痞子
摘要

进度条不顺滑 相信大多前端同学都自己写过音频、视频播放器,实现并不复杂。最近在小程序里,做了一个类似微博刷视频的需求。其中有一部分功能需要实现自定义进度条,在做完第一版之后发现进度条

进度条不顺滑

相信大多前端同学都自己写过音频、视频播放器,实现并不复杂。最近在小程序里,做了一个类似微博刷视频的需求。其中有一部分功能需要实现自定义进度条,在做完第一版之后发现进度条不顺滑,而后想查查网上看有没有什么好的方案,但最终没找到合适的。于是想看看微信小程序里的“微博”进度条如何,结果也是很生硬的动画,下面放了一个GIF,大家也可以自己搜索微信小程序的微博,找个视频看看效果。

常规方案

最终决定还是优化一下这个问题,先来捋一捋我们现有常规方案。

  • 监听TimeUpdate事件
  • 获取到当前播放时间,通过总时间计算进度百分比(currentTime / duration * 100)
  • 进度条width属性设置进度百分比

现有的方案是依赖事件获取当前播放时间,而这个事件大概在100~350毫秒触发一次,下面是我记录的小程序的事件对象队列。


[
    {"detail":{"currentTime":0.10509,"duration":5.83}},
    {"detail":{"currentTime":0.364527,"duration":5.83}},
    {"detail":{"currentTime":0.613648,"duration":5.83}},
]

目前的问题在于,每次获取到事件,就会更新进度条,没有过度动画效果,非常的生硬,下面是一个5s总时长的进度条变化过程:

核心代码:


const onProgress = (e, $dom) => {
    const updateFunc = (percent) => {
        $dom.style.width = percent+'%'
    }
    let percent = ((e.detail.currentTime / e.detail.duration) * 100).toFixed(1)
    updateFunc(percent)
}

transition

我们能很快想到用CSS的动画属性来做优化,想要灵活的控制,我选择使用 transition。transition可以定义动画执行时长,当我们改变width时,transition就会在规定时间内用动画的方式改变进度条宽度。首先动画执行时长一定要固定,并且在上一个执行时长结束之前最好不要再对width做改动,否则会导致冲突,动画会变得很奇怪。

  • 选择一个合理的transition执行时间:0.5s
  • 根据当前总时长,求出0.5s在进度条中所属百分比(100/duration/2)
  • 第一次TimeUpdate事件,就执行width改变,把进度条设置到0.5s的位置:width = 100/duration/2
  • 非第一次TimeUpdate事件,每当currentTime超过上一次进度条位置,就更新当前进度条百分比

听起来有点不好理解,我们画个图:

  1. 当第一次触发TimeUpdate事件,0.1336秒的时候(当然这个值随机的,可能是0.1~0.3之间),我们就设置width到0.5s的位置,这样进度条就和视频同步在运动,和真实的进度相差微弱的0.1秒。在动画执行的0.5s之间,UpdateTime也会有多次触发,
  2. 当某次UpdateTime的currentTime(0.7123s,这个值也是随机的)值大于上次执行的0.5s时,这个时候进度条的位置大概也在0.5s周围,我们再次触发下一个0.5s动画,也就是把width设置为1s的进度条位置
  3. 而后下个迭代currentTime>1s,width设置为1.5s,这样循环下去。

核心代码:


const playControl = {
  percent: 0,
  time: 0,
  duration: 0,
  first: true
}
const onProgress = (e, $dom) => {
    const updateFunc = (percent) => {
        playControl.percent = percent
        playControl.time = e.detail.currentTime
        $dom.style.width = percent+'%'
    }
    //当前视频进度第一次更新
    if (playControl.first) {
        playControl.duration = e.detail.duration
        playControl.first = false
        updateFunc(100 / e.detail.duration / 2)
    } else {
        let percent = ((e.detail.currentTime / e.detail.duration) * 100).toFixed(1)
        if (percent - playControl.percent > 0 || e.detail.currentTime >= e.detail.duration) {
            updateFunc(percent)
        }
    }
}

最终效果对比(PS:gif图效果有折损)

60s版本看起来和普通版差不多?把另一个60s挡住,来回对比,会发现还是有些区别。

解释起来还是有点费劲,还是没看明白?直接去看GitHub仓库代码,代码可直接运行:https://github.com/zimv/smooth-progress

此方案在部分场景下会有短暂延迟,比如暂停、拖动等,​个人总体觉得利大于弊。

到此这篇关于js实现进度条顺滑版详细方案的文章就介绍到这了,更多相关JS进度条顺滑版 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JS实现进度条顺滑版详细方案

本文链接: https://lsjlt.com/news/131620.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS实现进度条顺滑版详细方案
    进度条不顺滑 相信大多前端同学都自己写过音频、视频播放器,实现并不复杂。最近在小程序里,做了一个类似微博刷视频的需求。其中有一部分功能需要实现自定义进度条,在做完第一版之后发现进度条...
    99+
    2024-04-02
  • JS怎么实现进度条顺滑功能
    本篇内容主要讲解“JS怎么实现进度条顺滑功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS怎么实现进度条顺滑功能”吧!进度条不顺滑相信大多前端同学都自己写过音频、视频播放器,实现并不复杂。最...
    99+
    2023-06-20
  • JS实现圆形进度条拖拽滑动
    本文实例为大家分享了JS实现圆形进度条拖拽滑动的具体代码,供大家参考,具体内容如下 效果展示 半圆进度条效果 圆形进度条 代码实现 <!doctype html>...
    99+
    2024-04-02
  • JS实现滑动条案例
    本文实例为大家分享了JS实现滑动条效果的具体代码,供大家参考,具体内容如下 在完成这个案例之前需要看一下这个博客:JS案例-添加缓动画 这个案例会用到上面博客的缓动画函数。实现效果如...
    99+
    2024-04-02
  • js实现播放进度条
    以下是JS实现播放进度条的代码示例:HTML:```html...
    99+
    2023-09-20
    js
  • js中进度条的实现方式是什么
    这篇文章主要介绍“ js中进度条的实现方式是什么”,在日常操作中,相信很多人在 js中进度条的实现方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答” js中进度条的实现...
    99+
    2024-04-02
  • 原生JS实现加载进度条
    本文分享一个原生JS实现的动态加载进度条特效,效果如下: 实现的代码如下: <!DOCTYPE html> <html> <head> ...
    99+
    2024-04-02
  • HTML5如何实现自带进度条和滑块滑杆效果
    小编给大家分享一下HTML5如何实现自带进度条和滑块滑杆效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、H5自带进度条 <div id="d"> &nbs...
    99+
    2023-06-09
  • JS实现上传文件显示进度条
    本文实例为大家分享了JS实现上传文件显示进度条的具体代码,供大家参考,具体内容如下 用户反馈:图片上传过程中,如果网络比较慢,会发现上传图片后没有一点反应,体验性很差,图片回显也比较...
    99+
    2024-04-02
  • 微信小程序实现带滑块的进度条
    微信小程序项目需求,要实现一个带滑块并可左右滑动的进度条,看了小程序的文档,发现上面的progress组件无法满足需求,所以我自己写了一个,在这里总结一下。 一、效果图 二、实现逻...
    99+
    2024-04-02
  • JS实现拖拽进度条改变元素透明度
    今天要分享的是运用原生JS拖拽进度条改变元素透明度,效果如下: 以下是代码实现,欢迎大家复制粘贴。 <!DOCTYPE html> <html> &...
    99+
    2024-04-02
  • linux shell进度条实现方法
    直接看代码吧,很简单 #!/bin/bash b=''i=0while [ $i -le 100 ]do printf "progress:[%-50s]%d%%r" $b $i sleep...
    99+
    2022-06-04
    进度条 方法 linux
  • js如何实现自定义进度条效果
    这篇文章主要介绍js如何实现自定义进度条效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:代码如下:<!DOCTYPE html> <html&g...
    99+
    2024-04-02
  • linux shell实现进度条的方法
    这篇文章主要讲解了“linux shell实现进度条的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux shell实现进度条的方法”吧!直接看代码吧,很简单代码如下:#!/bin...
    99+
    2023-06-09
  • js如何实现音频控制进度条功能
    这篇文章主要介绍js如何实现音频控制进度条功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:代码如下:<!doctype html> <html&...
    99+
    2024-04-02
  • 微信小程序怎么实现带滑块的进度条
    今天小编给大家分享一下微信小程序怎么实现带滑块的进度条的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、效果图二、实现逻辑功...
    99+
    2023-07-02
  • vue+Ant Design进度条滑块与input联动效果实现
     需求:滑块进度与输入框为一致,默认值为80,最小不能小于30,最大为100  子组件: <template> <div class="p...
    99+
    2022-12-08
    vue Ant Design进度条滑块 Ant Design进度条滑块与input联动 ant-design-vue 动态添加input  Ant Design进度条联动
  • Linux下模拟实现进度条实例详解
    Linux下模拟实现进度条 在Linux系统下模拟进度条,首先需要了解一些简单基础知识: 1、在Linux系统下,r是回车符,n是换行符,回车是行不变光标回到该行的起始位置,换行是跳转到下一行,但...
    99+
    2022-06-04
    详解 实例 进度条
  • golang程序进度条实现示例详解
    目录引言原理上才艺调用代码QPS表达任务处理速度知识点总结引言 最近在工作中写一个批处理脚本,令人抓狂的是每次都不知道脚本要跑到啥时候结束,于是想到给程序添加个进度条。 逛了一圈,没...
    99+
    2024-04-02
  • Vue 实现接口进度条示例详解
    目录实现思路代码实现参数注入总结前端在向后端请求信息时,常常需要等待一定的时间才能得到返回结果。为了提高用户体验,可以通过实现一个接口进度条函数来增加页面的交互性和视觉效果。 接口...
    99+
    2023-05-17
    Vue 接口进度条 Vue 进度条
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作