Vue和js在这个问题上非常陌生,很可能我错过了一个基本的基本问题,但我试图在数组中切换单独单击的图像类,而不同时切换所有的图像切换类。
模板:
<div class="collage-banner">
<img
v-for="image in images"
@click="imgSelected()"
:alt="image.alt"
class="collage"
:class="image.class"
:src="image.url"
:key="image"
/>联署材料:
export default {
data() {
return {
images: [
{ url: img1, class: "img-1", alt: "collage img" },
{ url: img2, class: "img-2", alt: "collage img" },
{ url: img3, class: "img-3", alt: "collage img" },
{ url: img4, class: "img-4", alt: "collage img" },
{ url: img5, class: "img-5", alt: "collage img" },
{ url: img6, class: "img-6", alt: "collage img" },
{ url: img7, class: "img-7", alt: "collage img" },
{ url: img8, class: "img-8", alt: "collage img" }
]
}
},
methods: {
imgSelected() {
if (this.images[0].url === img1) {
this.images[0].class = 'collage-click'
} else if (this.images[0].url === img2) {
this.images[0].class = 'img-1'
}
if (this.images[1].url === img2) {
this.images[1].class = 'collage-click'
} else if (this.images[1].url === img1) {
this.images[1].class = 'img-2'
}
}
}}
让我知道,如果进一步的信息是需要的,我更有可能已经采取了完全错误的方式!提前感谢!
发布于 2021-11-18 16:51:53
您可以将图像索引传递到您的imgSelected方法中,并使用它来更新该图像的类。
例如,:
模板:
<img
v-for="(image, index) in images" << updated
@click="imgSelected(index)" << updated
:alt="image.alt"
class="collage"
:class="image.class"
:src="image.url"
:key="image"
/>剧本:
methods: {
imgSelected (index) { // add index param
// use index to get relevant image from array
this.images[index].class = 'collage-click'
}
}如果您想从选定的图像(例如用户单击图像1,然后图像2 )中删除类,则还必须在更新最新单击的图像之前遍历图像和重置类。
例如。
methods: {
imgSelected (index) {
// reset all image classes
for (const i in this.images) {
this.images[i].class = `img${i + 1}` // reset image class e.g. img2 (need to add 1 to index since it will start at 0)
}
// use index to get relevant image from array
this.images[index].class = 'collage-click'
}
}发布于 2021-11-18 18:29:59
更好的方法是在图像数组中设置一个名为clicked的标志,并根据该布尔值切换类。
data() {
return {
images: [
{ url: img1, class: "img-1", clicked: false, alt: "collage img" },
{ url: img2, class: "img-2",clicked: false, alt: "collage img" },
{ url: img3, class: "img-3",clicked: false, alt: "collage img" },
{ url: img4, class: "img-4", clicked: false, alt: "collage img" },
]
}
},
methods: {
imgSelected (index) { // add index param
// use index to get relevant image from array
this.images[index].clicked = !this.images[index].clicked;
}
}在模板中
<img
v-for="(image, index) in images" << updated
@click="imgSelected(index)" << updated
:alt="image.alt"
:class="['collage', {`${image.class}`: !image.clicked, 'collage-click': image.clicked}]"
:src="image.url"
:key="image"
/>注意:如果您希望始终应用collage,那么可以在数组中使用它。如果您根本不想要拼贴类,而jus想在img1和collage-click之间切换,那么jus可以有一个类似于
:class="{`${image.class}`: !image.clicked, 'collage-click': image.clicked}"https://stackoverflow.com/questions/70022792
复制相似问题