vue 动态背景图如何解决闪烁?
<div v-for="e in left"
:key="e.name"
@click="$router.push({ name: e.name })"
:style="{
backgroundImage: `url(${require('@/assets/images/' +
($route.name == e.name ? e.sel : e.nor))})`,
}"
></div>
切换会有概率出现闪烁
回答:
这里先提前初始化时导入好再使用, 你的现在是每次切换每次都是重新导入, 会费时间, 并且也可以加一个CSS, 做切换优化:
.fade-bg { transition: background-image 0.3s ease-in-out;
}
回答:
闪烁的问题可能是由于每次路由切换时,都需要重新加载并应用背景图导致的。你可以试着把背景图片提前加载并缓存,这样在切换路由时就不会出现闪烁现象。
以下是一个简单的解决方案:
在 Vue 实例的 data 对象中添加一个新属性 backgroundImages,用于存储预加载的背景图:
data() {
return {
backgroundImages: {},
};
},
在 mounted 钩子中预加载所有的背景图,并将它们存储在 backgroundImages 属性中:
mounted() { this.left.forEach((e) => {
const normalImage = require('@/assets/images/' + e.nor);
const selectedImage = require('@/assets/images/' + e.sel);
this.$set(this.backgroundImages, e.name, {
normal: normalImage,
selected: selectedImage,
});
});
},
更新模板,使用预加载的背景图:
<div
v-for="e in left"
:key="e.name"
@click="$router.push({ name: e.name })"
:style="{
backgroundImage: `url(${backgroundImages[e.name][$route.name === e.name ? 'selected' : 'normal']})`,
}"
></div>
这样,在切换路由时,应该不会出现闪烁现象。因为所有的背景图已经预先加载并缓存,不需要再重新加载。
以上是 vue 动态背景图如何解决闪烁? 的全部内容, 来源链接: utcz.com/p/934045.html