广告
返回顶部
首页 > 资讯 > 精选 >JS怎么实现进度条顺滑功能
  • 270
分享到

JS怎么实现进度条顺滑功能

2023-06-20 18:06:46 270人浏览 泡泡鱼
摘要

本篇内容主要讲解“js怎么实现进度条顺滑功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS怎么实现进度条顺滑功能”吧!进度条不顺滑相信大多前端同学都自己写过音频、视频播放器,实现并不复杂。最

本篇内容主要讲解“js怎么实现进度条顺滑功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS怎么实现进度条顺滑功能”吧!

进度条不顺滑

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

JS怎么实现进度条顺滑功能

常规方案

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

  • 监听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总时长的进度条变化过程:

JS怎么实现进度条顺滑功能

核心代码:

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超过上一次进度条位置,就更新当前进度条百分比

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

JS怎么实现进度条顺滑功能

  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图效果有折损)

JS怎么实现进度条顺滑功能

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

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

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

到此,相信大家对“JS怎么实现进度条顺滑功能”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: JS怎么实现进度条顺滑功能

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS怎么实现进度条顺滑功能
    本篇内容主要讲解“JS怎么实现进度条顺滑功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS怎么实现进度条顺滑功能”吧!进度条不顺滑相信大多前端同学都自己写过音频、视频播放器,实现并不复杂。最...
    99+
    2023-06-20
  • JS实现进度条顺滑版详细方案
    进度条不顺滑 相信大多前端同学都自己写过音频、视频播放器,实现并不复杂。最近在小程序里,做了一个类似微博刷视频的需求。其中有一部分功能需要实现自定义进度条,在做完第一版之后发现进度条...
    99+
    2022-11-12
  • JS实现圆形进度条拖拽滑动
    本文实例为大家分享了JS实现圆形进度条拖拽滑动的具体代码,供大家参考,具体内容如下 效果展示 半圆进度条效果 圆形进度条 代码实现 <!doctype html>...
    99+
    2022-11-12
  • js如何实现音频控制进度条功能
    这篇文章主要介绍js如何实现音频控制进度条功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:代码如下:<!doctype html> <html&...
    99+
    2022-10-19
  • 易语言怎么实现进度条功能
    在易语言中,可以通过循环控制和延时操作来实现进度条功能。下面是一个简单的示例代码:```// 设置进度条的长度const Progr...
    99+
    2023-08-17
    易语言
  • 小程序怎么实现流程进度条功能
    今天小编给大家分享一下小程序怎么实现流程进度条功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现小程序流程进度条需求:没...
    99+
    2023-06-26
  • Django怎么实现带进度条的倒计时功能
    这篇文章主要介绍“Django怎么实现带进度条的倒计时功能”,在日常操作中,相信很多人在Django怎么实现带进度条的倒计时功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Django怎么实现带进度条的倒计...
    99+
    2023-07-06
  • Python实现控制台进度条功能
    本文实例讲述了Python显示进度条的方法,是Python程序设计中非常实用的技巧。分享给大家供大家参考。具体方法如下: 首先,进度条和一般的print区别在哪里呢? 答案就是print会输出一个n,也就是...
    99+
    2022-06-04
    控制台 进度条 功能
  • React和Node.js怎么实现快速上传进度条功能
    本文小编为大家详细介绍“React和Node.js怎么实现快速上传进度条功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“React和Node.js怎么实现快速上传进度条功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-05
  • 利用Glide怎么实现一个加载进度条功能
    利用Glide怎么实现一个加载进度条功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用Glide.with(MainActivity.this).using(new Pro...
    99+
    2023-05-31
    glide %d
  • 微信小程序怎么实现带滑块的进度条
    今天小编给大家分享一下微信小程序怎么实现带滑块的进度条的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、效果图二、实现逻辑功...
    99+
    2023-07-02
  • python控制台中实现进度条功能
    我们大多数人都希望写一些简单的python脚本的同时都想能够在程序运行的过程中实现进度条的功能以便查看程序运行的速度或者进度。今天就和大家探讨这个问题:如何在python控制台中实现进度条功 进度条最主要的...
    99+
    2022-06-04
    控制台 进度条 功能
  • CSS怎么实现进度条和订单进度条
    这篇文章主要讲解了“CSS怎么实现进度条和订单进度条 ”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS怎么实现进度条和订单进度条 ”吧!简单地效果图如下...
    99+
    2022-10-19
  • 怎么用js和ajax实现加载时的进度条
    这篇文章主要介绍“怎么用js和ajax实现加载时的进度条”,在日常操作中,相信很多人在怎么用js和ajax实现加载时的进度条问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么...
    99+
    2022-10-19
  • 怎么用vue实现页面加载时的进度条功能
    这篇“怎么用vue实现页面加载时的进度条功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用vue实现页面加载时的进度条...
    99+
    2023-07-04
  • vue中怎么实现一个拖拽进度条滑动组件
    这期内容当中小编将会给大家带来有关vue中怎么实现一个拖拽进度条滑动组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。调用组件如下:<slider :mi...
    99+
    2022-10-19
  • iOS实现步骤进度条功能实例代码
    前言 在开发中,我们经常在很多场景下需要用到进度条,比如文件的下载,或者文件的上传等。 本文主要给大家介绍的是一个步骤进度条效果,步骤进度条效果参考 iOS UIKit 框架中并没...
    99+
    2022-05-25
    ios 进度条 步骤
  • vue Nprogress进度条功能实现常见问题
    NProgress是页面跳转是出现在浏览器顶部的进度条 官网:http://ricostacruz.com/nprogress/ github:https://github.com/...
    99+
    2022-11-12
  • Android实现进度条(ProgressBar)的功能与用法
    Android中的进度条ProgressBar用于显示一个任务的进度,可以通过设置最大值和当前值来表示进度的完成度。以下是Progr...
    99+
    2023-08-11
    Android
  • Android怎么实现进度条
    在Android中可以通过ProgressBar控件来实现进度条的显示和更新。下面是一个简单的例子,演示了如何在Android中使用...
    99+
    2023-08-12
    Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作