#javascript #html #class
#javascript #HTML #класс
Вопрос:
Здравствуйте, я пытаюсь создать класс, в котором будет множество объектов, изменяющих фоновые изображения на сайте, без создания каждого объекта по одному.
Итак, я сделал это, чтобы изменить фоновое изображение одного «объекта» :
let x = 0; //index
const image = ["assets/img1.jpeg", "assets/img2.jpeg", "assets/img3.jpeg"]; //images to show
function displayNextImage() {
x = (x === 2) ? 0 : x 1;
document.getElementById("myID").setAttribute("style", "background-image: url(" image[x] ")") //change images
};
function startTimer() {
setInterval(displayNextImage, 3000); //start looping
}
startTimer();
Это работает, и поэтому я хочу сделать это классом :
class changingImageObject {
constructor(img1, img2, img3, id) {
this.image = [img1, img2, img3];
this.id = id;
this.x = 0;
};
displayNextImage() { //Change the showed image x 1
this.x = (this.x === 2) ? 0 : this.x 1;
document.getElementById(this.id).setAttribute("style", "background-image: url(" this.image[this.x] ")");
};
startTimer() { //Change image after 3sec (looping)
setInterval(this.displayNextImage, 3000);
};
}
const changingImages = new changingImageObject("assets/img1.jpeg", "assets/img2.jpeg", "assets/img3.jpeg", "myID");
changingImages.startTimer();
Я добавил скрипт в конец html, он создает объект, но функция displayNextImage выдает ошибку: Uncaught TypeError: не удается прочитать свойство ‘setAttribute’ null
в displayNextImage
Спасибо за чтение
Комментарии:
1. Что вы получаете, когда используете console.log
document.getElementById(this.id)
?2. О, это null, и когда я делаю console.log (this.id ) в displayNextImage это не определено, я не понимаю, почему… И когда я делаю console.log (this.id ) в конструкторе я получил идентификатор…
3. После setInterval все переменные в моем объекте становятся неопределенными…
4. Понятно. Кажется, вам нужно привязать
this
значение к функции . Попробуйте добавитьthis.displayNextImage.bind(this)
в свой конструктор.
Ответ №1:
Кажется, мне нужно было привязать свой метод к конструктору, благодаря Mubaraq.
Код с исправлением.
constructor(img1, img2, img3, id) {
this.image = [img1, img2, img3];
this.id = id;
this.x = 0;
this.displayNextImage = this.displayNextImage.bind(this);
};
Теперь мне нужно научиться использовать bind 🙂