【问题标题】:How to animate *independently* several sections of progress bars in Bootstrap?如何在Bootstrap中为*独立*几个进度条部分设置动画?
【发布时间】:2020-02-13 06:27:32
【问题描述】:

我有一些 Bootstrap 代码,当用户查看它时,它可以很好地为进度条部分设置动画。

但是,它会为页面中的所有进度条设置动画,而不是为查看的部分中的进度条设置动画。结果,当用户转到进度条的另一部分时,这些进度条已经动画了,他看不到任何动画。

然后我的问题是:如何修改下面的代码以在查看时独立为不同部分设置动画?

CSS

#skills {
  padding: 60px 0;
}

#skills .progress {
  height: 35px;
  margin-bottom: 10px;
}

#skills .progress .skill {
  font-family: "Open Sans", sans-serif;
  line-height: 35px;
  padding: 0;
  margin: 0 0 0 20px;
  text-transform: uppercase;
}

#skills .progress .skill .val {
  float: right;
  font-style: normal;
  margin: 0 20px 0 0;
}

#skills .progress-bar {
  width: 1px;
  text-align: left;
  transition: .9s;
}

JS

// Skills section
$('#skills').waypoint(function() {
  $('.progress .progress-bar').each(function() {
    $(this).css("width", $(this).attr("aria-valuenow") + '%');
  });
}, { offset: '80%'} );

HTML


<!-- The first section of progress bars somewhere in the page -->
<section id="skills">
  <div class="skills-content">
    <div class="progress">
      <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria- 
   valuemax="100"></div>
        <span class="skill">Skillset 1 - Skill 1 <i class="val"></i></span>
      </div>
    </div>
    <div class="progress">
      <div class="progress-bar" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria- 
   valuemax="100"></div>
        <span class="skill">Skillset 1 - Skill 2 <i class="val"></i></span>
    </div>
  </div>
</section>

<!-- Another section of progress bars further down the page -->
<section id="skills">
  <div class="skills-content">
    <div class="progress">
      <div class="progress-bar" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria- 
   valuemax="100"></div>
        <span class="skill">Skillset N - Skill 1 <i class="val"></i></span>
      </div>
    </div>
    <div class="progress">
      <div class="progress-bar" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria- 
   valuemax="100"></div>
        <span class="skill">Skillset N - Skill 2 <i class="val"></i></span>
      </div>
    </div>
    <div class="progress">
      <div class="progress-bar" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria- 
   valuemax="100"></div>
        <span class="skill">Skillset N - Skill 3 <i class="val"></i></span>
    </div>
  </div>
</section>

【问题讨论】:

  • 将 id="skills" 更改为 class="skills" 并相应地更新您的 js 代码

标签: javascript css twitter-bootstrap-3 progress-bar jquery-waypoints


【解决方案1】:

我刚刚注意到您没有正确关闭部分元素和其他标签

<section class="skills">
    <div class="skills-content">
        <div class="progress">
            <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria- valuemax="100">
            </div>
            <span class="skill">Skillset 1 - Skill 1 <i class="val"></i></span>
        </div>
        <div class="progress">
            <div class="progress-bar" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria- valuemax="100">
            </div>
            <span class="skill">Skillset 1 - Skill 2 <i class="val"></i></span>
        </div>
    </div>
</section>

<!-- Another section of progress bars further down the page -->
<section class="skills">
    <div class="skills-content">
        <div class="progress">
            <div class="progress-bar" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria- valuemax="100">
            </div>
            <span class="skill">Skillset N - Skill 1 <i class="val"></i></span>
        </div>
        <div class="progress">
            <div class="progress-bar" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria- valuemax="100">
            </div>
            <span class="skill">Skillset N - Skill 2 <i class="val"></i></span>
        </div>
        <div class="progress">
            <div class="progress-bar" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria- valuemax="100">
            </div>
            <span class="skill">Skillset N - Skill 3 <i class="val"></i></span>
        </div>
    </div>
</section>

当你的航路点函数调用你所有的进度元素而不是只有子进度元素时

$('#skills').waypoint(function() {
  $('.progress .progress-bar').each(function() { // <- you are getting all progress elements
    $(this).css("width", $(this).attr("aria-valuenow") + '%');
  });
}, { offset: '80%'} );

改成

$('.skills').waypoint(function () {
   var el = this.element;
   var children = $(el).find(".progress-bar");
   $(children).each(function () { // <- make sure getting only children elements
        $(this).css("width", $(this).attr("aria-valuenow") + '%');
   });
}, { offset: '80%' });

并确保其他技能部分在页面加载时不被用户查看(不在视口中)

【讨论】:

  • 还有 #skills 到 .skills ,OP 有多个技能部分
  • 这不起作用,没有动画。我按照@karthick 的建议将“#skills”更改为“.skills”,但仍然没有动画。
  • @michael 代码已编辑和测试,如果您愿意,可以尝试
  • 好的,这正在工作,值得在赏金中指出解决方案必须工作:)非常感谢!
【解决方案2】:

如果您在 HTML 中使用不同的类,然后在 JS 中在需要时一一启动不同的类,它应该可以工作

    <div class="progress">
      <div class="progress-bar progress-bar-1" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria- 
   valuemax="100"></div>
        <span class="skill">Skillset N - Skill 3 <i class="val"></i></span>
      </div>
    </div>
$('#skills').waypoint(function() {
  $('.progress-bar.progress-bar-1').each(function() {
    $(this).css("width", $(this).attr("aria-valuenow") + '%');
  });
}, { offset: '80%'} );

【讨论】:

  • 感谢您的回答。我无法修改要添加的每个进度条的 javascript 文件,这将违反 html、css 和 js 的可分离性。 @onur-gelmez 的解决方案在这方面会很好,虽然它不起作用......
猜你喜欢
  • 2015-03-23
  • 2016-02-24
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 2013-11-01
  • 2019-04-03
相关资源
最近更新 更多