В настоящее время я изучаю VueJS с помощью видео курса.Я делал упражнения по директивам, но немного увлекся.В любом случае, моя цель - получить «эффект диско» при наведении курсора на кнопку «Disco Time».Это прекрасно работает, но я также хочу очистить интервал, когда вы выходите из кнопки.Я перепробовал несколько вещей (например, вызов четкого интервала в другом методе), и я почти уверен, что текущее решение не очень хорошее, но, насколько я понимаю, оно должно работать, по крайней мере.Можете ли вы сказать мне, почему это не работает и как это будет работать?Я также был бы заинтересован в более хороших решениях (но с использованием директивы, поскольку это было моей целью).
Спасибо за помощь новичку (:
<script>
export default {
data() {
return {
showing: false,
color: 'lightgreen',
stopIt: false,
stopItt: false,
}
},
directives: {
'myEvent': {
bind(el, binding) {
const type = binding.arg
const fn = binding.value
el.addEventListener(binding.arg, binding.value)
}
}
},
methods: {
change() {
this.showing = !this.showing;
this.color == 'lightgreen' ? this.color = 'lightblue' : this.color = 'lightgreen';
},
disco() {
if (this.stopIt == false) {
var myDisco = setInterval(() => {
this.color == 'lightgreen' ? this.color = 'lightcoral' : this.color = 'lightgreen'
}, 100)
}
else if (this.stopIt == true) {
setTimeout(() => {
clearInterval(myDisco)}, 1000)
}
},
stopDisco() {
this.stopIt = true
//this.stopItt = true
this.disco();
},
}
}
</script>
<template>
<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
<div :style="{color: color}">
<h1>Directives Exercise</h1>
</div>
<button v-myEvent:click="change" class="btn btn-primary">Show me!</button>
<button v-myEvent:mouseover="disco" v-myEvent:mouseleave="stopDisco" class="btn btn-primary">Disco Time!</button>
<p v-if="showing">
Now you see me!
</p>
<p>
{{ stopIt }}, {{ stopItt }}
</p>
</div>
</div>
</div>
</template>