gpt4 book ai didi

javascript - 脚本多次运行

转载 作者:行者123 更新时间:2023-11-29 17:44:05 24 4
gpt4 key购买 nike

https://codepen.io/Yarwaa/pen/QBKqxK

我只是不明白为什么我的进度条会增加宽度然后将其减少回 0,然后重新执行此操作。

为什么我的脚本多次运行以及如何停止此操作?

p.s 如果我用 .off 停止我的脚本,它不会一遍又一遍地增加宽度,但是脚本将只对第一个元素起作用,它实际上只会忽略第二个元素。

我会很高兴得到任何帮助,我实际上迷失在这个

来自 Codepen 的代码:

<script>
$(document).ready(function(){
$(window).on('scroll', function(){

$(".progress-bar").each(function () {
var bottom_object = $(this).position().top + $(this).outerHeight();
var bottom_window = $(window).scrollTop() + $(window).height();
if( bottom_window > bottom_object ){
$(this).animate( {width: $(this).attr('aria-valuenow') + '%' }, 2000 );
}
});
});
});
</script>
<body>
<div class="block">
SCROLL DOWN
</div>
<div class="progress" id="progress">
<div class="progress-bar progress-bar-striped bg-success" id="progress-bar" role="progressbar" style="width: 0" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="block">
SCROLL DOWN
</div>
<div class="progress" id="progress">
<div class="progress-bar progress-bar-striped bg-success" role="progressbar" style="width: 0" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</body>

最佳答案

基本上发生的事情是,每次滚动到元素 View 时,您都在添加另一个动画事件,这似乎导致进度条在尝试重新调整到一个循环时陷入循环另一个

解决此问题的一种方法是确定动画是否已经发生。

jQuery 中使用 data 方法的例子

$(".progress-bar").each(function(){
//Setup the data for each .progress-bar
$(this).data('scrollInitialised',false);
});
$(window).on('scroll', function(){
$(".progress-bar").each(function () {
var $this= $(this);

//Check if the progress bar animation has been initialised yet
if($this.data('scrollInitialised') === false){

var bottom_object = $this.position().top + $this.outerHeight(),
bottom_window = $(window).scrollTop() + $(window).height();

//If it has not been initialised, check if it is within view
if( bottom_window > bottom_object ){
//Progress bar is in view, now we can animate
$this.animate( {width: $this.attr('aria-valuenow') + '%' }, 2000 );

//Set scrollInitialised to true so that we do not attempt to re-animate the scrollbar again
$this.data('scrollInitialised',true);

}

}

});
});

通过检查 .progress-bar 元素是否设置了 scrollInitialised,您可以防止在元素上设置多个动画

关于javascript - 脚本多次运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51413097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com