Как остановить счетчик javascript на определенном номере

У меня есть этот код javascript для tampermonkey, который работает на Amazon. Что он делает, так это просто подсчитывает баланс вашей подарочной карты и делает вид, что я получаю деньги. Я хочу знать, можно ли остановить его на определенном номере.

var oof = document.getElementById("gc-ui-balance-gc-balance-value");

var lastCount = localStorage.getItem("lastCount");

oof.innerText = '$' + lastCount || "$10000";

function animateValue(id) {
    var obj = document.getElementById(id);
    var current = parseInt(localStorage.getItem("lastCount")) || 10000;

    setInterval(function () {
        var nextCount = current++;
        localStorage.setItem("lastCount", nextCount);
        obj.innerText = '$' + nextCount;
    }, 0.1);
}

animateValue('gc-ui-balance-gc-balance-value') 
setInteval возвращает уникальный идентификатор, который вы можете очистить с помощью clearInterval(<ID>); просто запомните его и вызовите его, если счетчик настолько высок, насколько вам нужно.
Dellirium 13.03.2019 14:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
671
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Может быть, очистив интервал, когда current достигает определенного значения, подобного этому

function animateValue(id) {
  // rest of the code
  let interval = setInterval(function() {
    var nextCount = current++;
    localStorage.setItem("lastCount", nextCount);
    obj.innerText = '$' + nextCount;
  }, 0.1);

  if (current === requiredVal) {
    clearInterval(interval)
  }
  return current;
}
Ответ принят как подходящий

Используйте ClearInterval внутри вашего обратного вызова setInterval, чтобы каждый раз, когда вызывается обратный вызов, вы могли проверить, достиг ли новый счетчик вашего порога, и очистить таймер, если он это делает.

Если вы проверите значение вне обратного вызова, логика не будет вызываться при каждом приращении счетчика.

function animateValue(id) {
    var obj = document.getElementById(id);
    var current = parseInt(localStorage.getItem("lastCount")) || 10000;

    var interval = null;
    var maxCount = 1000;
    var callback = function() {
        var nextCount = current++;
        if (nextCount === maxCount) {
            clearInterval(interval);
        }
        localStorage.setItem("lastCount", nextCount);
        obj.innerText = '$' + nextCount;
    }
    interval = setInterval(callback, 0.1);
}

Вот демо:

let current = 0;
let interval = null;

const callback = () => {
    let nextCount = current++;
    console.info(nextCount);
    if (nextCount === 5) {
        clearInterval(interval);
    }
}

interval = setInterval(callback, 100);

@ Jmuse.v2, я заменил функцию стрелки на обычную функцию и заменил let/const на var, теперь это работает?

jo_va 13.03.2019 15:25

Можете ли вы попытаться сделать так, чтобы это работало с остальной частью моего кода или чем-то еще, потому что я не знаю, куда его поместить. Также maxCount не определен

Jmuse.v2 13.03.2019 15:30

@ Jmuse.v2, да, вы должны определить maxCount, это всего лишь пример, и я уже интегрировал его в вашу функцию animateValue.

jo_va 13.03.2019 15:32

Когда я получил от вас новый код, я просто добавил «animateValue('gc-ui-balance-gc-balance-value')» внизу, и он начал работать! Большое спасибо!

Jmuse.v2 13.03.2019 15:36

Другие вопросы по теме