Я использую скрипт для подсчета чисел от 0 до их действительного значения.Чтобы запустить счетчик, я хочу, чтобы элемент находился в видимой области области просмотра.
Я нашел решение, чтобы проверить, находится ли элемент в видимой области.Но это не сработает, если я использую более одного числового элемента в разных областях страницы.Он считает каждый элемент с одинаковым классом (.counter
).
Если я дважды использую скрипт счетчика с другим именем, вторая версия не будет работать, а первая не будет работать при прокрутке.Только если у меня есть счетчик в видимой области при загрузке страницы.
Вот мой код счетчика:
$('.counter').each(function() {
var $this = $(this),
countTo = $this.attr('data-count');
$({ countNum: $this.text()}).animate({
countNum: countTo
},
{
duration: 2000,
easing:'linear',
step: function() {
$this.text(Math.floor(this.countNum));
},
complete: function() {
$this.text(this.countNum);
}
});
});
И это решение, которое я пробовал (и оно работает один раз на страницу): https://stackoverflow.com/a/488073/1788961
Здесь вы найдете скрипку со всем кодом: https://codepen.io/cray_code/pen/QYXVWL
Это код, чтобы проверить, прокручиваю ли я элемент, (см. Связанный ответ выше):
function isScrolledIntoView(elem)
{
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top;
var elemBottom = elemTop + $(elem).height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
function Utils() {
}
Utils.prototype = {
constructor: Utils,
isElementInView: function (element, fullyInView) {
var pageTop = $(window).scrollTop();
var pageBottom = pageTop + $(window).height();
var elementTop = $(element).offset().top;
var elementBottom = elementTop + $(element).height();
if (fullyInView === true) {
return ((pageTop < elementTop) && (pageBottom > elementBottom));
} else {
return ((elementTop <= pageBottom) && (elementBottom >= pageTop));
}
}
};
var Utils = new Utils();