【问题标题】:How To Make an Animated Multi-Color Progress Bar?如何制作动画多色进度条?
【发布时间】:2017-08-20 09:18:39
【问题描述】:

如果我问的不是很清楚,我很抱歉。我正在尝试构建一个在页面加载时动画的多色进度条。我找到了与我正在寻找的示例类似的示例,但是 javascript/jquery 给我带来了问题。我不擅长那个领域。

示例 1:https://codepen.io/tamak/pen/hzEer

该链接显示了我希望栏如何在页面出现时逐渐扩展并以特定百分比停止。

jQuery(document).ready(function(){
  jQuery('.skillbar').each(function(){
    jQuery(this).find('.skillbar-bar').animate({
      width:jQuery(this).attr('data-percent')
    },6000);
  });
});

示例 2:http://www.cssflow.com/snippets/animated-progress-bar/demo

非常接近我所追求的,但我希望进度条在没有按钮的情况下运行。颜色本身,从红色到绿色,是我想要实现的目标。

提前致谢!我知道这可能要求很多,但我希望有人愿意尝试一下。

【问题讨论】:

  • 您的第二个示例包含您需要的一切。但是,不要在按钮上使用 onclick 事件来触发更改事件,只需使用 setInterval 在代码中手动触发它,如果您希望栏在特定延迟时更新,或者将其绑定到解决其他问题,例如 ajax 调用更新页面。

标签: javascript jquery html css progress-bar


【解决方案1】:

也许这会有所帮助:Bootstrap progress bar with gradient color showing proportionally on active width

至于移动进度条,你到底想让它怎么改变?您不需要按钮来执行此操作,但需要发生一些事情。你能更详细地解释一下那篇文章吗?

【讨论】:

  • 谢谢!这是相当有帮助的。至于进一步解释。大部分进度条是静态的。我只需要在一开始就改变它。从 0% 放大到我需要的任意数字(1% - 100%)。 Pandhi 的帖子是迄今为止我所追求的最好的例子
【解决方案2】:

您可以根据百分比设置具有时间间隔的按钮的点击事件。

$(document).ready(function(){
	var CurrentProgress =  '75%';
	setTimeout(function(){
  	$(".label").each(function() {
    	if($(this).html()==CurrentProgress){
      	$(this).click();
      }
    })
  },1000)
})
.container {
  margin: 80px auto;
  width: 640px;
  text-align: center;
}
.container .progress {
  margin: 0 auto;
  width: 400px;
}

.progress {
  padding: 4px;
  background: rgba(0, 0, 0, 0.25);
  border-radius: 6px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25), 0 1px rgba(255, 255, 255, 0.08);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25), 0 1px rgba(255, 255, 255, 0.08);
}

.progress-bar {
  position: relative;
  height: 16px;
  border-radius: 4px;
  -webkit-transition: 0.4s linear;
  -moz-transition: 0.4s linear;
  -o-transition: 0.4s linear;
  transition: 0.4s linear;
  -webkit-transition-property: width, background-color;
  -moz-transition-property: width, background-color;
  -o-transition-property: width, background-color;
  transition-property: width, background-color;
  -webkit-box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.25), inset 0 1px rgba(255, 255, 255, 0.1);
  box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.25), inset 0 1px rgba(255, 255, 255, 0.1);
}
.progress-bar:before, .progress-bar:after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
}
.progress-bar:before {
  bottom: 0;
  background: url("../img/stripes.png") 0 0 repeat;
  border-radius: 4px 4px 0 0;
}
.progress-bar:after {
  z-index: 2;
  bottom: 45%;
  border-radius: 4px;
  background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.05));
  background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.05));
  background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.05));
  background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.05));
}

#five:checked ~ .progress > .progress-bar {
  width: 5%;
  background-color: #f63a0f;
}

#twentyfive:checked ~ .progress > .progress-bar {
  width: 25%;
  background-color: #f27011;
}

#fifty:checked ~ .progress > .progress-bar {
  width: 50%;
  background-color: #f2b01e;
}

#seventyfive:checked ~ .progress > .progress-bar {
  width: 75%;
  background-color: #f2d31b;
}

#onehundred:checked ~ .progress > .progress-bar {
  width: 100%;
  background-color: #86e01e;
}

.radio {
  display: none;
}

.label {
  display: none;
  margin: 0 5px 20px;
  padding: 3px 8px;
  color: #aaa;
  text-shadow: 0 1px black;
  border-radius: 3px;
  cursor: pointer;
}
.radio:checked + .label {
  color: white;
  background: rgba(0, 0, 0, 0.25);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section class="container">
    <input type="radio" class="radio" name="progress" value="five" id="five" checked>
    <label for="five" class="label">5%</label>

    <input type="radio" class="radio" name="progress" value="twentyfive" id="twentyfive">
    <label for="twentyfive" class="label">25%</label>

    <input type="radio" class="radio" name="progress" value="fifty" id="fifty">
    <label for="fifty" class="label">50%</label>

    <input type="radio" class="radio" name="progress" value="seventyfive" id="seventyfive">
    <label for="seventyfive" class="label">75%</label>

    <input type="radio" class="radio" name="progress" value="onehundred" id="onehundred">
    <label for="onehundred" class="label">100%</label>

    <div class="progress">
      <div class="progress-bar"></div>
    </div>
  </section>

【讨论】:

  • 太棒了!万分感谢!你为我节省了很多头痛和时间。不过,我不确定您所说的带有时间间隔的点击事件是什么意思。但是,我现在也想知道是否有办法设置两个具有不同百分比的条形图。
  • 关于点击事件,你应该对jQuery有所了解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 2014-04-23
  • 1970-01-01
  • 2017-04-04
相关资源
最近更新 更多