【问题标题】:Animate Chart Bars from Left to Right从左到右为图表栏设置动画
【发布时间】:2021-02-23 22:54:34
【问题描述】:

我想为条形图制作动画,但我希望条形图从左到右制作动画。到目前为止,它们都是同时进行的。

我怎样才能做到这一点?

$(function() {
  $("#bars li .bar").each(function() {
    var percentage = $(this).data('percentage');

    $(this).animate({
      'height': percentage + '%'
    }, 1000);
  });
});
@import "lesshat";
@import url(https://fonts.googleapis.com/css?family=Roboto:400+700);
body {
  background: #30303A;
  font-family: Roboto;
}

#chart {
  width: 650px;
  height: 300px;
  margin: 30px auto 0;
  display: block;
}

#chart #numbers {
  width: 50px;
  height: 100%;
  margin: 0;
  padding: 0;
  display: inline-block;
  float: left;
}

#chart #numbers li {
  text-align: right;
  padding-right: 1em;
  list-style: none;
  height: 29px;
  border-bottom: 1px solid #444;
  position: relative;
  bottom: 30px;
}

#chart #numbers li:last-child {
  height: 30px;
}

#chart #numbers li span {
  color: #eee;
  position: absolute;
  bottom: 0;
  right: 10px;
}

#chart #bars {
  display: inline-block;
  background: rgba(0, 0, 0, 0.2);
  width: 600px;
  height: 300px;
  padding: 0;
  margin: 0;
  box-shadow: 0 0 0 1px #444;
}

#chart #bars li {
  display: table-cell;
  width: 100px;
  height: 300px;
  margin: 0;
  text-align: center;
  position: relative;
}

#chart #bars li .bar {
  display: block;
  width: 70px;
  margin-left: 15px;
  background: #49E;
  position: absolute;
  bottom: 0;
}

#chart #bars li .bar:hover {
  background: #5AE;
  cursor: pointer;
}

#chart #bars li .bar:hover:before {
  color: white;
  content: attr(data-percentage) '%';
  position: relative;
  bottom: 20px;
}

#chart #bars li span {
  color: #eee;
  width: 100%;
  position: absolute;
  bottom: -2em;
  left: 0;
  text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="chart">
  <ul id="bars">
    <li>
      <div data-percentage="56" class="bar"></div><span>Option 1</span></li>
    <li>
      <div data-percentage="33" class="bar"></div><span>Option 2</span></li>
    <li>
      <div data-percentage="54" class="bar"></div><span>Option 3</span></li>
    <li>
      <div data-percentage="94" class="bar"></div><span>Option 4</span></li>
    <li>
      <div data-percentage="23" class="bar"></div><span>Option 5</span>
    </li>
  </ul>
</div>

View on JSFiddle

【问题讨论】:

  • 您可以使用delay() 或设置timeouts 来错开动画。您是否希望每个栏都等到前一个栏完成动画?还是您只是想在前一个栏开始后将每个动画延迟一点?

标签: javascript html jquery css animation


【解决方案1】:

您可以根据索引调整时间,这样最右边的条形需要更长的时间来制作动画。

$("#bars li .bar").each( function( index ) {
    var percentage = $(this).data('percentage');
    console.log(percentage)
    $(this).animate({
      'height' : percentage + '%'
    }, 1000 + index * 500);
});

$(function() {
  $("#bars li .bar").each( function( index ) {
    var percentage = $(this).data('percentage');
    $(this).animate({
      'height' : percentage + '%'
    }, 1000 + index * 500);
  });
});
@import "lesshat";
 @import url(https://fonts.googleapis.com/css?family=Roboto:400+700);
 body {
     background: #30303A;
     font-family: Roboto;
}
 #chart {
     width: 650px;
     height: 300px;
     margin: 30px auto 0;
     display: block;
}
 #chart #numbers {
     width: 50px;
     height: 100%;
     margin: 0;
     padding: 0;
     display: inline-block;
     float: left;
}
 #chart #numbers li {
     text-align: right;
     padding-right: 1em;
     list-style: none;
     height: 29px;
     border-bottom: 1px solid #444;
     position: relative;
     bottom: 30px;
}
 #chart #numbers li:last-child {
     height: 30px;
}
 #chart #numbers li span {
     color: #eee;
     position: absolute;
     bottom: 0;
     right: 10px;
}
 #chart #bars {
     display: inline-block;
     background: rgba(0,0,0,0.2);
     width: 600px;
     height: 300px;
     padding: 0;
     margin: 0;
     box-shadow: 0 0 0 1px #444;
}
 #chart #bars li {
     display: table-cell;
     width: 100px;
     height: 300px;
     margin: 0;
     text-align: center;
     position: relative;
}
 #chart #bars li .bar {
     display: block;
     width: 70px;
     margin-left: 15px;
     background: #49E;
     position: absolute;
     bottom: 0;
}
 #chart #bars li .bar:hover {
     background: #5AE;
     cursor: pointer;
}
 #chart #bars li .bar:hover:before {
     color: white;
     content: attr(data-percentage) '%';
     position: relative;
     bottom: 20px;
}
 #chart #bars li span {
     color: #eee;
     width: 100%;
     position: absolute;
     bottom: -2em;
     left: 0;
     text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="chart">  
  <ul id="bars">
    <li><div data-percentage="56" class="bar"></div><span>Option 1</span></li>
    <li><div data-percentage="33" class="bar"></div><span>Option 2</span></li>
    <li><div data-percentage="54" class="bar"></div><span>Option 3</span></li>
    <li><div data-percentage="94" class="bar"></div><span>Option 4</span></li>
    <li><div data-percentage="23" class="bar"></div><span>Option 5</span>
    </li>
  </ul>
</div>

要等待上一个动画完成,可以使用索引计算延迟。

$("#bars li .bar").each( function( index ) {
    var percentage = $(this).data('percentage');
    console.log(percentage)
    $(this).delay(index * 1000).animate({
      'height' : percentage + '%'
    }, 1000);
});

$(function() {
  $("#bars li .bar").each( function( index ) {
    var percentage = $(this).data('percentage');
    $(this).delay(index * 1000).animate({
      'height' : percentage + '%'
    }, 1000);
  });
});
@import "lesshat";
 @import url(https://fonts.googleapis.com/css?family=Roboto:400+700);
 body {
     background: #30303A;
     font-family: Roboto;
}
 #chart {
     width: 650px;
     height: 300px;
     margin: 30px auto 0;
     display: block;
}
 #chart #numbers {
     width: 50px;
     height: 100%;
     margin: 0;
     padding: 0;
     display: inline-block;
     float: left;
}
 #chart #numbers li {
     text-align: right;
     padding-right: 1em;
     list-style: none;
     height: 29px;
     border-bottom: 1px solid #444;
     position: relative;
     bottom: 30px;
}
 #chart #numbers li:last-child {
     height: 30px;
}
 #chart #numbers li span {
     color: #eee;
     position: absolute;
     bottom: 0;
     right: 10px;
}
 #chart #bars {
     display: inline-block;
     background: rgba(0,0,0,0.2);
     width: 600px;
     height: 300px;
     padding: 0;
     margin: 0;
     box-shadow: 0 0 0 1px #444;
}
 #chart #bars li {
     display: table-cell;
     width: 100px;
     height: 300px;
     margin: 0;
     text-align: center;
     position: relative;
}
 #chart #bars li .bar {
     display: block;
     width: 70px;
     margin-left: 15px;
     background: #49E;
     position: absolute;
     bottom: 0;
}
 #chart #bars li .bar:hover {
     background: #5AE;
     cursor: pointer;
}
 #chart #bars li .bar:hover:before {
     color: white;
     content: attr(data-percentage) '%';
     position: relative;
     bottom: 20px;
}
 #chart #bars li span {
     color: #eee;
     width: 100%;
     position: absolute;
     bottom: -2em;
     left: 0;
     text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="chart">  
  <ul id="bars">
    <li><div data-percentage="56" class="bar"></div><span>Option 1</span></li>
    <li><div data-percentage="33" class="bar"></div><span>Option 2</span></li>
    <li><div data-percentage="54" class="bar"></div><span>Option 3</span></li>
    <li><div data-percentage="94" class="bar"></div><span>Option 4</span></li>
    <li><div data-percentage="23" class="bar"></div><span>Option 5</span>
    </li>
  </ul>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2011-05-22
    • 2021-06-17
    • 2011-03-03
    相关资源
    最近更新 更多