css - 一旦路由加载而不显示它们,我如何在 Vue.js 中加载图像?
问题描述
我正在尝试在背景中添加 2 png 到 png 的过渡,并且能够在不同的场景(如客厅、餐厅等)之间切换。一旦我单击选择我要选择的房子的哪个区域的元素,图像就会被获取,但是因为加载需要一些时间,所以不会发生过渡,它们只会出现在背景图像的顶部,而不会平滑过渡从侧面。一旦路线被渲染,我需要一种方法来加载所有图像,或者如果你可以给我另一个解决方案,我很高兴听到这个问题。
这是模板
<template>
<div>
<div v-for="item in painting" :key="item.id" class="showroom">
<div class="setting">
<h1>{{ item.name }}</h1>
<h3>Choose a room:</h3>
<div v-for=" (room, idx) in rooms" :key="idx" id="roomSelection">
<img id="roomSelector" :src="room.roomview" @click="showRoom(room)">
<p>{{ room.name }}</p>
<br>
</div>
<p>Choose a wall color: <span id="colorPicker" :style="{backgroundColor: color}"><input type="color" id="base" v-model="color"></span></p>
<router-link to="/painting"><i class="fas fa-arrow-left"></i></router-link>
</div>
<div class="display">
<div :style="{backgroundColor: color}" class="wall">
<img :src="item.img">
</div>
<div class="forniture">
<transition name="slideIn">
<div v-for=" room in roomToShow" :key="room" class="setForniture">
<img class="left" :id="room.space1" :src="room.forniture1">
<img class="left" :id="room.space2" :src="room.forniture2">
</div>
</transition>
</div>
</div>
</div>
</div>
</template>
这是脚本
<script>
import { mapGetters } from 'vuex'
import sofa from '../assets/sofa.png'
import lamp from '../assets/lamp.png'
import table from '../assets/table.png'
import cabinet from '../assets/cabinet.png'
import chair from '../assets/chair.png'
import sidetable from '../assets/sidetable.png'
import livingroom from '../assets/livingroom.png'
import diningroom from '../assets/diningroom.png'
import lounge from '../assets/lounge.png'
export default {
data(){
return{
color: '#243E36',
rooms: [
{ name: "lounge", space1: 'lounge1', space2: 'lounge2', forniture1: chair, forniture2:sidetable, roomview: lounge},
{ name: "livingroom" , space1: 'livingroom1', space2: 'livingroom2', forniture1:sofa, forniture2:lamp, roomview: livingroom },
{ name: "diningroom" , space1: 'diningroom1', space2: 'diningroom2', forniture1: table, forniture2: cabinet, roomview: diningroom }
],
roomToShow: [],
}
},
computed: {
...mapGetters([
'showPainting',
'forSale',
'painting'
]),
},
methods: {
showRoom(room) {
setTimeout( () => {
this.roomToShow.shift();
this.roomToShow.push(room);
}, 100)
}
}
</script>
解决方案
解决此问题的最简单方法是仅使用 CSS 隐藏图像,但仍然从头开始加载所有图像(渲染元素)。你可以通过动态添加一个类到当前可见的图像中来实现:class=""
。
一个更复杂的解决方案(它还为您提供图像加载时间的回调)是为所有图像创建一个new Image()
并对onload
/做出反应onerror
。像这样,您可以在不更改 HTML 的情况下使用 JS abd 加载开头的所有图像。这是此用例的示例:如何创建 JavaScript 回调以了解图像何时加载?
推荐阅读
- ruby-on-rails - Rspec 测试在创建多态 has_many 关系时失败
- python-3.x - 如何使用计时器在 Cloud Functions 中运行 Python 代码
- postgresql - postgresql:测试 dblink 连接的触发器,如果不存在则建立
- python - 平均相邻值时通过numpy数组优化迭代
- linux - 为什么 LOAD 程序头的虚拟地址和 gdb 显示的运行时虚拟地址不同?
- awk - 使用 awk one liner 比较浮点数
- pytest - setup() 函数的 pytest 奇怪行为
- unicode - 为什么恢复的文件没有以前的符号?
- kentico - 如何在 C# Kentico 12 MVC 中获取别名路径/节点别名
- angular - 为什么离子物品不显示?