У меня есть этот код 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')



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Может быть, очистив интервал, когда 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, теперь это работает?
Можете ли вы попытаться сделать так, чтобы это работало с остальной частью моего кода или чем-то еще, потому что я не знаю, куда его поместить. Также maxCount не определен
@ Jmuse.v2, да, вы должны определить maxCount, это всего лишь пример, и я уже интегрировал его в вашу функцию animateValue.
Когда я получил от вас новый код, я просто добавил «animateValue('gc-ui-balance-gc-balance-value')» внизу, и он начал работать! Большое спасибо!
setIntevalвозвращает уникальный идентификатор, который вы можете очистить с помощьюclearInterval(<ID>);просто запомните его и вызовите его, если счетчик настолько высок, насколько вам нужно.