Я использую функцию галочки в компоненте a-frame для анимации. Я делаю это, устанавливая флаг true / false, а затем увеличивая число, которое обновляет вершины. Ниже я создал упрощенную версию, которая иллюстрирует этот процесс. Хотелось бы понять, как лучше использовать функцию галочки.
Конкретно мой вопрос состоит из 2 частей.
Как я могу остановить работу функции галочки после того, как моя функция в ней будет «завершена» (в данном случае, когда curr === to)?
Как сбросить установленный мною флаг, чтобы он сработал в первую очередь, чтобы потом снова запустить его?
Ниже вы увидите, что у меня есть неоднородное решение, чтобы остановить его (я проверяю, что значение curr, которое я увеличиваю, не превышает значение && this.curr < 9
), но это просто для того, чтобы остановить его бесконечную работу на экране / консоли.
Я попытался установить для атрибута 'change' значение false в конце функции, но снова кажется, что это происходит снова и снова, и кажется, что это повлияет на производительность, если что-то постоянно меняет атрибут? Может я ошибаюсь. Пожалуйста, посмотрите мой код ниже.
Компонент;
AFRAME.registerComponent('tickquery', {
schema: {
change: {type: 'boolean', default: false},
},
init: function () {
this.curr = 0
this.to = 10
this.dur = 400
this.parent = this.el
},
update: function () {
},
tick: function (t, td) {
if ( this.data.change === true && this.curr < 9 ){
if ( this.curr < this.to ) {
var step = this.stepCalc(this.curr, this.to, this.dur, td)
this.curr += step
this.parent.setAttribute('value', this.curr)
//console.log(this.curr)
}
}
},
stepCalc: function (curr, to, dur, td) {
var distance = Math.abs(curr - to)
var speed = distance/dur
var step = speed*td
return step;
},
});
HTML;
<a-scene test>
<a-text
id="ticker"
tickquery
value="0"
color="#333"
position="0 0 -5">
</a-text>
</a-scene>
И компонент, запускающий изменение;
AFRAME.registerComponent('test', {
init: function () {
setTimeout(function(){
var ticker = document.getElementById('ticker');
ticker.setAttribute('tickquery', {'change': true});
}, 2000);
},
});
И вот скрипка (подождите 2 секунды и увидите, что текст обновлен с галочкой)
Возможно, я неправильно подхожу к этому, поэтому, пожалуйста, сообщите, есть ли лучший способ справиться с этим. Если потребуется дополнительная информация, дайте мне знать. Спасибо.