首頁 > 軟體

Vue一個動態新增background-image的實現

2023-03-13 06:00:13

Vue一個動態新增background-image

一開始不知道該怎麼弄,後面查了下,應該這樣使用

 <div @click="dialogVisible = true" :style=" 
     {backgroundImage:'url('+personalData.avatar+')'}">    
      
                    <div>
                        <!-- <div></div> -->
                        <p>修改頭像</p>
                    </div>
 </div>

Vue踩坑background-image路徑

在前端開發中,background-image屬性非常常見,有很多時候需要使用內聯樣式來繫結此屬性,但是在vue專案中,如果如下面程式碼填寫路徑會找不到圖片

  • 專案中圖片都放在src/img資料夾,img和background-image參照都用相對路徑,即../../../這種形式。
  • 在專案打包build設定路徑assetsPublicPath:'./',然後哪些沒有轉成base64的背景圖都失效了。
<script type="text/javascript">
	import TemplateNav from './TemplateNav'
 
	export default {
		name: 'FooterNav',
		components: {
			'TemplateNav': TemplateNav
		},
		data() {
			return {
				//使用相對路徑會找不到圖片
				shouye:'url(../../assets/images/shouye/index2x.png)',
				fenlei:'url(../../assets/images/shouye/fenlei2x.png)',
				search:'url(../../assets/images/shouye/search2x.png)',
				shopcart:'url(../../assets/images/shouye/gouwuche2x.png)',
				mine:'url(../../assets/images/shouye/I2x.png)'
			}
		},
		props: {
			num: {
				default: '0'
			}
		},
	}
</script>

報錯如下:404(Not Found)

 正確的路徑應該如下面這樣

data() {
	return {
		shouye:'url(' + require('../../assets/images/shouye/index2x.png') + ')',
		fenlei:'url(' + require('../../assets/images/shouye/fenlei2x.png') + ')',
		search:'url(' + require('../../assets/images/shouye/search2x.png') + ')',
		shopcart:'url(' + require('../../assets/images/shouye/gouwuche2x.png') + ')',
		mine:'url(' + require('../../assets/images/shouye/I2x.png') + ')'
	}
},

使用require()方法,require()是node.js方法。

結合實際情況,處理方法如下

img標籤:

<img :src="require('../../../assets/images/icons/icon-add-pc.svg')">

背景圖:

<div :style="{backgroundImage:'url('+require('../../../assets/images/icon/icon-add-pc.svg')+')'}"></div>
 
//i標籤
<i :style="{backgroundImage:'url('+require('../../assets/home/ic-0-01.svg')+')'}"></i>

擴充套件:圖片格式(base64)

圖片的base64編碼就是可以將一張圖片資料編碼成一串字串,使用該字串代替影象地址url。

使用base64圖片的優點:

  • 減少http請求次數
  • 採用base64的圖片隨著頁面一起下載,因此不會存在跨域請求的問題
  • 沒有圖片更新要上傳圖片,因此不會造成清理圖片快取的問題。

使用base64圖片的缺點:

  • 增加css檔案的大小,比http請求大30%左右
  • 瀏覽器相容性,支援ie10及以上
  • 解析css的時間增長

base64圖片與csssprites技術

精靈圖技術就是將圖片合成一個大的圖片,將多次圖片請求合成一張大的請求,以此來達到減少http請求的次數。

對於base64圖片常見誤區

base64雖然有優點,但是其缺點也很明顯,在使用上存在一些明顯的缺陷

  • 使用base64不代表效能優化,使用base64減少了http請求,但是增加了css檔案的體積,css檔案體積增大意味著CPR的阻塞
  • CPR(Critical Rendering Path,關鍵渲染路徑):當瀏覽器從伺服器接收到一個HTML頁面的請求時,到螢幕上渲染出來要經過很多個步驟。瀏覽器完成這一系列的執行,或者說渲染出來我們常常稱之為“關鍵渲染路徑”。
  • 圖片不會導致關鍵路徑的阻塞,而轉換為base64後大大增加了css檔案的體積,css檔案的體積直接影響渲染,導致空白螢幕時間增長,html和css會阻塞渲染,而圖片不會阻塞渲染。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com