Я создал счетчик jQuery, но он начинает работать, как только я загружаю страницу, я хочу выполнить ее, когда на экране появляется раздел - PullRequest
0 голосов
/ 20 февраля 2020

код для счетчика, но он начинает работать после загрузки страницы, я хочу работать, когда раздел виден: -

$(document).ready(function() {

var counters = $(".counter");
var countersQuantity = counters.length;
var counter = [];

for (i = 0; i < countersQuantity; i++) {
counter[i] = parseInt(counters[i].innerHTML);
}

var count = function(start, value, id) {
var localStart = start;
setInterval(function() {
if (localStart < value) {
localStart++;
counters[id].innerHTML = localStart;
}
}, 80);
}
for (j = 0; j < countersQuantity; j++) {
count(0, counter[j], j);
}
});

1 Ответ

0 голосов
/ 20 февраля 2020

$(document).ready(function() { будет выполнять обратный вызов только после полной загрузки исходного DOM. На большой странице это может произойти через некоторое время после того, как начальные элементы будут видны пользователю.

Убедитесь, что jQuery включено выше (возможно, в <head>), затем после окончательного .counter элемент в HTML, немедленно вставьте тег script, чтобы он запускался сразу после создания элемента в DOM, не дожидаясь загрузки остальной части страницы:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>content</div>
<div>content</div>
<div class="counter">100</div>
<div class="counter">200</div>
<div class="counter">300</div>
<div class="counter">400</div>
<script>
var counters = $(".counter");
var countersQuantity = counters.length;
var counter = [];

for (i = 0; i < countersQuantity; i++) {
  counter[i] = parseInt(counters[i].innerHTML);
}

var count = function(start, value, id) {
  var localStart = start;
  setInterval(function() {
    if (localStart < value) {
      localStart++;
      counters[id].innerHTML = localStart;
    }
  }, 80);
}
for (j = 0; j < countersQuantity; j++) {
  count(0, counter[j], j);
}
</script>
<div>content</div>

Обратите внимание, что вы можете значительно очистить свой код, если вы используете sh, и вам не требуется большая библиотека, такая как jQuery, просто для выбора элементов:

<div>content</div>
<div>content</div>
<div class="counter">100</div>
<div class="counter">200</div>
<div class="counter">300</div>
<div class="counter">400</div>
<script>
for (const counter of document.querySelectorAll('.counter')) {
  const target = Number(counter.textContent);
  counter.textContent = 0;
  const interval = setInterval(() => {
    const curr = Number(counter.textContent);
    if (curr < target) counter.textContent = curr + 1;
    else clearInterval(interval);
  }, 80);
}
</script>
<div>content</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...