я пытаюсь использовать setInterval с моей функцией moveImage, которая меняет положение моего изображения! вот мой код:
<template>
<div class = "randImg">
<img v-bind:style = "{top: imgTop + 'px', left: imgLeft + 'px',height: imgHeight + 'px', width: imgWidth + 'px'}"
class = "image" v-bind:src = "vue">
</div>
</template>
<script>
const vue = require("../assets/images/vue.png");
export default {
name: "randImg",
data() {
return {
vue,
imgTop: 0,
imgLeft: 0,
imgHeight: 64,
imgWidth: 64,
changeInterval: 1000
}
},
created() {
setInterval(this.moveImage(), this.changeInterval);
},
computed: {
moveImage() {
this.imgTop = Math.round(Math.random() * (screen.height - this.imgHeight));
this.imgLeft = Math.round(Math.random() * (screen.width - this.imgWidth));
}
}
}
</script>
как видите, я использую vue.js и получаю сообщение об ошибке "this.moveImage не является функцией" помогите пожалуйста решить эту проблему!



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


Это потому, что moveImage — это не метод, а computed property. Поскольку вычисляемое свойство vue сгенерирует для него getter.
Вам нужно переместить определение в methods
methods: {
moveImage() {
this.imgTop = Math.round(Math.random() * (screen.height - this.imgHeight));
this.imgLeft = Math.round(Math.random() * (screen.width - this.imgWidth));
}
}
И в вызове setTimeout вы хотите, чтобы функция возвращала значение, поэтому вам нужно вызвать ее так:
created() {
setInterval(this.moveImage, this.changeInterval);
}