首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在html中流畅地运行进度条

如何在html中流畅地运行进度条
EN

Stack Overflow用户
提问于 2018-08-20 00:04:49
回答 4查看 2.3K关注 0票数 5

代码语言:javascript
复制
function move() {
  var elem = document.getElementById("myBar");   
  var width = 1;
  var counter = 1;
  var id = setInterval(frame, 1000);
  function frame() {
    if (width >= 60) {
      clearInterval(id);
    } else {
      width += 1; 
      elem.innerHTML = counter++;
      elem.style.width = width + 'px'; 
    }
  }
}
代码语言:javascript
复制
#myProgress {
  width: 120px;
  background-color: #ddd;
}

#myBar {
  width: 0px;
  height: 10px;
  background-color: #4CAF50;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>JavaScript Progress Bar</h1>

<div id="myProgress">
  <div id="myBar">0</div>
</div>
<br>
<button onclick="move()">Click Me</button>

在上面的代码片段中有一个渐进栏,当点击按钮时它会自动填充,它会通过添加1的style.width来填充栏。我希望渐进式条形能够平滑地填充,但毫秒数应保持不变,即1000。

EN

回答 4

Stack Overflow用户

发布于 2018-08-20 00:11:11

transition:width 600ms linear;添加到

代码语言:javascript
复制
#myBar {
  width: 2px;
  height: 10px;
  background-color: #4CAF50;
  transition:width 600ms linear;
}

这将平滑地设置条的宽度动画。

注意:保持过渡时间等于setInterval超时,以避免动画抖动

代码语言:javascript
复制
function move() {
  var elem = document.getElementById("myBar");   
  var width = 1;
  var counter = 1;
  var id = setInterval(frame, 1000);
  function frame() {
    if (width >= 60) {
      clearInterval(id);
    } else {
      width += 1; 
      elem.innerHTML = counter++;
      elem.style.width = width + 'px'; 
    }
  }
}
代码语言:javascript
复制
#myProgress {
  width: 120px;
  background-color: #ddd;
}

#myBar {
  width: 2px;
  height: 10px;
  background-color: #4CAF50;
  transition:width 1000ms linear;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>JavaScript Progress Bar</h1>

<div id="myProgress">
  <div id="myBar"></div>
</div>

<br>
<button onclick="move()">Click Me</button>

CSS中的过渡在两个值之间进行平滑插值。这意味着当你将宽度增加1px时,浏览器将通过动画来增加宽度,这只发生在增加宽度的javascript代码被执行之后。

票数 0
EN

Stack Overflow用户

发布于 2018-08-20 00:11:18

可以渲染的最小单位是像素。

您可以做的是检查某个反转以增加宽度。在下面的示例中,我将宽度增加了10px,以便您可以正确地看到transition

代码语言:javascript
复制
function move() {
  var elem = document.getElementById("myBar");   
  var width = 0;
  var counter = 0;
  var id = setInterval(frame, 600);
  function frame() {
    if (width >= 60) {
      clearInterval(id);
    } else {
      counter++
      console.log(counter);
      if(counter % 5 == 0)
      {
        width += 10; 
        elem.style.width = width + 'px'; 
      }
    }
  }
}
代码语言:javascript
复制
#myProgress {
  width: 120px;
  background-color: #ddd;
}
#myBar {
  width: 2px;
  height: 10px;
  background-color: #4CAF50;
  -webkit-transition: width 0.5s;
  -moz-transition: width 0.5s;
  -ms-transition: width 0.5s;
  -o-transition: width 0.5s;
  transition: width 0.5s;      
}
代码语言:javascript
复制
<div id="myProgress">
  <div id="myBar"></div>
</div>

<br>
<button onclick="move()">Click Me</button>

票数 0
EN

Stack Overflow用户

发布于 2018-08-20 00:16:09

如何调整JavaScript代码以获得所需的结果:

代码语言:javascript
复制
function move() {
  var elem = document.getElementById("myBar");
  var width = 0.5;
  // change the milliseconds to 10 or 5 to fill it relatively faster
  var id = setInterval(frame, 20);

  function frame() {
    if (width >= 120) {
      clearInterval(id);
    } else {
      width += 0.5;
      elem.style.width = width + 'px';
    }
  }
}
代码语言:javascript
复制
#myProgress {
  width: 120px;
  background-color: #ddd;
}

#myBar {
  width: 2px;
  height: 10px;
  background-color: #4CAF50;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>JavaScript Progress Bar</h1>

<div id="myProgress">
  <div id="myBar"></div>
</div>

<br>
<button onclick="move()">Click Me</button>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51919478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档