У меня есть counter
функций jQuery, и мне нужно вызвать его, когда я просматриваю страницу
$(document).ready(function () {
$.fn.counter = function () {
$(this).each(function () {
var num = $(this).data('counter');
var i = 1,
self = $(this).html(i);
var interval = setInterval(function () {
self.html(++i);
if (i >= num) {
clearInterval(interval);
}
}, 100);
});
};
$(window).scroll(function() {
var height = $(window).scrollTop();
if(height > 300) {
$('.counter-1, .counter-2, .counter-3, .counter-4').counter();
}
});
});
Проблема в том, что когда я снова прокручиваю страницу, функция снова или снова вызывается снова и снова каждый раз.
Я попытался использовать этот код
$(document).ready(function () {
$.fn.counter = function () {
$(this).each(function () {
var num = $(this).data('counter');
var i = 1,
self = $(this).html(i);
var interval = setInterval(function () {
self.html(++i);
if (i >= num) {
clearInterval(interval);
}
}, 100);
});
};
$(window).one('scroll', function () {
var height = $(window).scrollTop();
if (height > 300) {
$('.counter-1, .counter-2, .counter-3, .counter-4').counter();
}
});
});
но в этом случае после перезагрузки функция страницы не вызывается.
Есть ли способ вызвать функцию только один раз на прокрутке и не вызывать ее снова, а вызвать ее после перезагрузки страницы?
Вы должны использовать пространство имен с .on/.off
:
$(window).on('scroll.custom', function () {
var height = $(window).scrollTop();
if (height > 300) {
$('.counter-1, .counter-2, .counter-3, .counter-4').counter();
$(window).off('scroll.custom')
}
});
scroll.custom
, а не простоscroll
?window.scroll
. Это просто безопасность, так как без пространства имен вы удалили бы каждое событие прокрутки в окне.