动画css进度条而不在更新之间跳转?

Posted

技术标签:

【中文标题】动画css进度条而不在更新之间跳转?【英文标题】:Animate css progress bar without jumping between updates? 【发布时间】:2015-02-12 02:52:31 【问题描述】:

我正在我的网站上使用它……

<progress id='video-progress' min='0' max='100' value=''></progress>

这是元素的整个样式……

#video-progress 
    -webkit-appearance: none;
    border: none;
    position:fixed;
    bottom:0;
    left:0;
    height:3px;
    width:100%;
    z-index:1;

所以它所做的只是将页面底部的屏幕宽度从 0 移动到 100%。 进度条通过 javascript 更新。

但是,由于我的视频只有 30 秒长,更新的单个步骤作为进度条的“跳转”执行。 因此没有平滑的条形运动。

知道如何为进度条设置动画或在更新的步骤之间平滑它吗?

更新:

JavaScript……

function updateProgressBar() 
    var progressBar = document.getElementById('video-progress');
    var percentage = Math.floor((100 / fmVideo.duration) * fmVideo.currentTime);
    progressBar.value = percentage;

【问题讨论】:

能否也添加 JavaScript 代码? 能否也添加 JavaScript? 我更新了js代码。 【参考方案1】:

您可以通过使用setInterval 在每个15 millisecond 递增其value 来为其设置动画,如果value 大于percentage 使用clearInterval 则停止递增。

此代码提取当前的value 并将其递增,直到达到percentage 的值。

注意: percentage 手动设置为 70

var progressBar = document.getElementById('video-progress');

function updateProgressBar() 
  var percentage = 70;
  var curr = progressBar.value;
  var update = setInterval(function() 
    if (curr > percentage) 
      clearInterval(update);
    
    progressBar.value = curr++;
  , 15)


updateProgressBar();
#video-progress 
  -webkit-appearance: none;
  border: none;
  position: fixed;
  bottom: 0;
  left: 0;
  height: 3px;
  width: 100%;
  z-index: 1;
&lt;progress id='video-progress' min='0' max='100' value=''&gt;&lt;/progress&gt;

【讨论】:

【参考方案2】:

这对我来说非常适合!

function smoothProgress(e) 
    var id = $("#"+e.data.id),
        dur = 5000,
        seq = 100,
        max = parseInt( id.attr("max"), 10),
        chunk = max / dur * seq,
        loop = setInterval(function() 
        if( id.val() < max )
            id.val( id.val() + chunk );
        else
            clearInterval(loop);
        
    , seq);

$(document).ready(function() 
    $("#launch").on("click", id: $("progress").attr("id"), smoothProgress);
);

当然,您可以调整dur参数或根据您的视频时长动态检索它,以及seq参数(越低越流畅)。

这是一个fiddle 用于演示。

【讨论】:

以上是关于动画css进度条而不在更新之间跳转?的主要内容,如果未能解决你的问题,请参考以下文章

持续时间长于更新时的 Qt 进度条动画

CSS / jQuery:动态更新的文本出现在右侧而不是圆形进度条内

用户窗体内的进度条

详解用CSS3制作圆形滚动进度条动画效果

使用 CSS 动画进度条

Vue项目页面跳转时候的,浏览器窗口上方的进度条显示