Как изменить изображение по клику на кнопке на JavaScript
Пытаюсь заменить картинку по клику на любой кнопке. Ссылка на одну картинку записана в this.preImg, на другую в this.postImg. Изменение происходит через переменную imagine. Переменная imagine по клику перезаписывается на нужное значение. но функция все равно всегда возвращает исходное значение. Фрагмент html из проекта на vue.js ниже
<template>
<div>
<div class="preview">
<img :src='this.getImg' class="media" />
</div>
<div class="btn-group">
<button id="first"
@click="getAnswer"
class="btn-group__answers">
{{ this.answers[0].text }}
</button>
<button id="second"
@click="getAnswer"
class="btn-group__answers">
{{ this.answers[1].text }}
</button>
<button id="third"
@click="getAnswer"
class="btn-group__answers">
{{ this.answers[2].text }}
</button>
</div>
</div>
</template>`
src - вычисляемое свойство. getImg-вычисляемый метод, который возвращает картинку, в зависимости от того была нажата одна из кнопок или нет.
<script>
export default {
name: "test",
data: function () {
return {
questions : [
{
text:"first",
answers:[1,2,3]
},
{
text:"second",
answers:[1,2,3]
},
{
text:"third",
answers:[1,2,3]
}
],
preImg:https://www.publicdomainpictures.net/pictures/270000/nahled/sunset-picture.jpg,
postImg:https://www.publicdomainpictures.net/pictures/200000/velka/fall-in-new-england-1476453700HVx.jpg
}
},
computed:{
getImg(){
let imagine;
let img1=this.preImg;
let img2=this.postImg;
let button = document.querySelectorAll('button');
imagine=img1;
for(let i=0; i<button.length; i++){
button[i].addEventListener('click', function(){
imagine=img2
console.log(imagine)
})
}
return imagine;
}
}
};
</script>
Ответы (1 шт):
Автор решения: Dudoserg
→ Ссылка
Так пойдет?
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
</head>
<body>
<div id="app" style="height:500px">
{{num}}
<div class="preview">
<img :src='img' class="media" width="200" height="200"/>
</div>
<div class="btn-group">
<button id="0"
v-on:click="getAnswer($event)">
1
</button>
<button id="1"
v-on:click="getAnswer($event)">
2
</button>
<button id="2"
v-on:click="getAnswer($event)">
3
</button>
</div>
</div>
</body>
</html>
<script>
new Vue({
el: "#app",
data: {
img: 'https://www.publicdomainpictures.net/pictures/270000/nahled/sunset-picture.jpg',
imgs: [
{img: 'https://www.publicdomainpictures.net/pictures/270000/nahled/sunset-picture.jpg'},
{img: 'https://www.publicdomainpictures.net/pictures/200000/velka/fall-in-new-england-1476453700HVx.jpg'},
{img: 'https://i.pinimg.com/736x/ab/b6/a8/abb6a800ab2193fcedd9bda566b7402c.jpg'},
],
num: 0,
},
methods: {
getAnswer: function (event) {
targetId = event.currentTarget.id;
this.img = this.imgs[targetId].img;
this.num = targetId;
}
}
})
</script>