在Vue頁(yè)面中如何更優(yōu)雅地引入圖片詳解
在我們寫vue項(xiàng)目中肯定會(huì)用到各種圖片,那么如何更好的使用圖片資源呢。這里我講一下我常用的方法。
錯(cuò)誤示范
也許你的代碼里常常會(huì)這樣寫
<template>
<img :src="src">
</template>
<script>
export default{
data(){
return {
src: require('xxx.jpg')
}
}
}
</script>
在webpack中,require會(huì)自動(dòng)處理資源,這塊沒(méi)問(wèn)題,但是你放到vue的data里,vue會(huì)遍歷data,給src加上響應(yīng)式,但其實(shí)大部分時(shí)間,這個(gè)src并不需要響應(yīng)式,這里造成了性能浪費(fèi)。
通過(guò)computed
解決上面這個(gè)錯(cuò)誤方案,解決的方案之一:computed
<template>
<img :src="src">
</template>
<script>
const src = require('xxx.jpg')
export default{
computed:{
src(){
return src
}
}
}
</script>
computed本身就有緩存,可以減少一些性能浪費(fèi)
當(dāng)圖片不變的時(shí)候直接引入
<template>
<img :src="src">
</template>
或者
<template>
<div class="bg"></div>
</template>
<style>
.bg{
background:url("xxx.jpg")
}
</style>
當(dāng)我們這個(gè)圖片不會(huì)變化的時(shí)候,可以直接引入,并不需要賦值一個(gè)變量。
同樣,也可通過(guò)切換class名去動(dòng)態(tài)顯示圖片,這樣也比較好
<template>
<div :class="flag ? 'bg1':'bg2'"></div>
</template>
<script>
export default{
data(){
return {
flag: true
}
}
}
</script>
<style>
.bg1{
background:url("xxx1.jpg")
}
.bg2{
background:url("xxx2.jpg")
}
</style>
通過(guò)css變量切換圖片
這個(gè)只是我剛剛想起來(lái)的一個(gè)想法,理論上css變量可以存儲(chǔ)任何東西,那能否存放圖片地址呢。
<template>
<div class="bg"></div>
</template>
<script>
export default{
mounted(){
// 第一種方法,圖片地址或base64
this.$el.style.setProperty('--bg',`url("http://xxx.com/1.jpg")`)
// 第二種方法
this.$el.style.setProperty('--bg',`url("${require('../assets/1.png')}")`)
}
}
</script>
<style>
.bg{
--bg:url('xxx.jpg');
background-image:--bg;
}
</style>
個(gè)人測(cè)試成功,這個(gè)方法也可用,而且會(huì)比computed更好些,畢竟操作css變量開(kāi)銷更小。這個(gè)方法需要注意的是,css中圖片一般都是寫在url中的,因此需要拼接一個(gè)字符串url(你的內(nèi)容)。
通過(guò)css繪制
這個(gè)其實(shí)算一個(gè)題外話,有的時(shí)候一些圖像其實(shí)是可以通過(guò)css畫(huà)出來(lái)的,例如下圖中這個(gè)三角,大家百度一下就會(huì)有各種css三角生成器,這種圖形用css會(huì)比引入一個(gè)圖片更好。

總結(jié)一下,就是不要在vue的data中引入圖片,還是盡量使用css
總結(jié)
到此這篇關(guān)于在Vue頁(yè)面中如何更優(yōu)雅地引入圖片的文章就介紹到這了,更多相關(guān)Vue更優(yōu)雅引入圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Vue中點(diǎn)擊組件外關(guān)閉組件的實(shí)現(xiàn)方法
下面小編就為大家分享一篇基于Vue中點(diǎn)擊組件外關(guān)閉組件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
如何用vue-pdf包實(shí)現(xiàn)pdf文件預(yù)覽,支持分頁(yè)
這篇文章主要介紹了如何用vue-pdf包實(shí)現(xiàn)pdf文件預(yù)覽,支持分頁(yè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn)
本文主要介紹了Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Vue項(xiàng)目中使用addRoutes出現(xiàn)問(wèn)題的解決方法
大家應(yīng)該都知道可以通過(guò)vue-router官方提供的一個(gè)api-->addRoutes可以實(shí)現(xiàn)路由添加的功能,事實(shí)上就也就實(shí)現(xiàn)了用戶權(quán)限,這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中使用addRoutes出現(xiàn)問(wèn)題的解決方法,需要的朋友可以參考下2021-08-08
Vue3中axios請(qǐng)求封裝、請(qǐng)求攔截與相應(yīng)攔截詳解
目前前端最流行的網(wǎng)絡(luò)請(qǐng)求庫(kù)還是axios,所以對(duì)axios的封裝很有必要,下面這篇文章主要給大家介紹了關(guān)于Vue3中axios請(qǐng)求封裝、請(qǐng)求攔截與相應(yīng)攔截的相關(guān)資料,需要的朋友可以參考下2023-05-05
vue?動(dòng)態(tài)style?拼接寬度問(wèn)題
這篇文章主要介紹了vue?動(dòng)態(tài)style?拼接寬度問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09

