Здесь вы допустили несколько ошибок, поэтому, прежде всего, , чтобы достичь такой цели, вы должны использовать setTimeout
вместо setInterval
, потому что интервал обычно будет повторяться через определенное время, поэтому это может быть одной из возможных причин, по которой вас дважды вызывают , когда вы нажимаете кнопку. Затем вам нужно создать общую c функцию для этой причины и затем вызвать ее при создании документа вместо того, чтобы создавать два разных интервала и вызывать их по отдельности.
Таким образом, при соблюдении этих правил ваш окончательный код должен быть примерно таким:
HTML
<button class="specialAttack" :disabled="sDisabled" @click="specialAttack();">Special Attack {{ sTimer }}</button>
Javascript
data: () => {
return {
sTimer: 11,
sDisabled: false,
asd: null
};
},
methods: {
specialAttack() {
clearTimeout(this.asd); // Or as you suggest in comments you can disbale it here with replacing this: this.sDisabled = true
if (this.sTimer > 0) {
this.asd = setTimeout(() => {
this.sDisabled = true;
this.sTimer -= 1;
this.specialAttack();
}, 1000);
} else {
clearTimeout(this.asd);
this.sTimer = 11;
this.sDisabled = false;
}
}
},
created() {
this.specialAttack();
}
Вот рабочая демонстрация: