У меня есть несколько индикаторов выполнения, и мне нужно, чтобы они начали загружаться при прокрутке. Однако функция jQuery работает только тогда, когда страница загружается только в этом разделе, и когда я слегка прокручиваю страницу (пока она все еще находится в порту просмотра), функция перестает работать. Если страница загружается сверху, а я прокручиваю вниз, чтобы добраться до этого раздела, она не работает вообще.
Я пробовал разные подходы, чтобы заставить его работать, когда он находится в поле зрения, все из которых привели к одной и той же проблеме. Я также пробовал $ (window) .on ("прокрутка изменения размера", function ()).
Есть идеи, как это можно исправить?
$.fn.isInViewport = function() {
var elementTop = $(this).offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
};
$(window).on("scroll", function() {
$(".radialbar").each(function() {
var $bar = $(this).find(".radialbar--bar");
var $val = $(this).find(".radialbar__value-int");
var perc = parseInt($val.text(), 10);
if ($(this).isInViewport()) {
$({
p: 0
}).animate({
p: perc
}, {
duration: 3000,
easing: "swing",
step: function(p) {
$bar.css({
transform: "rotate(" + (45 + (p * 1.8)) + "deg)", // 100%=180° so: ° = % * 1.8
// 45 is to add the needed rotation to have the green borders at the bottom
});
$val.text(p | 0);
}
});
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="radialbar">
<div class="radialbar--base">
<div class="radialbar--bar"></div>
</div>
<div class="radialbar__value">
<span class="radialbar__value-int">100</span>
<span class="radialbar__value-perc">%</span>
</div>
<div class="radialbar__title">
Title
</div>
</div>