那每天氣不錯,心情並很差,由於感冒了。
實現前端一個彈出框功能時,發現有背景圖片的彈出框,會出現閃白現象。由於心情不太好,我一直忍着。
直到今天, 研究一下解決方案,因而有了今天的文章。css
這是一個很基礎的問題,也很常見的問題。 正常狀況下咱們都會忽視他。html
我===內容 & 你 === 背景圖片前端
我顯示的時候,你已經在git
若不能,我顯示的時候,你儘快在github
你儘量的小web
能夠到背景圖片閃現空白解決方案 看到各類方案演示。瀏覽器
若是背景圖片相對小,或者你執意要這嘛作,圖片轉爲bas464,存到css或者html裏面。
演示: 背景圖片閃現空白方案-base背景圖片app
不足: base64佔帶寬啊!ide
<link rel="prefetch" ></link>
<link rel="prefetch" href="./img/bg-huoluo.jpg"/> .bg { background-image:url("./img/bg-huoluo.jpg"); background-size: contain; }
prefetch是對瀏覽器的暗示,暗示未來可能須要某些資源,但由瀏覽器決定是否加載以及何時加載這些資源。 優先級低。
pre家族:preload, prefetch, dns-prefetch, preconnect, prerender。
有人可能會問,幹嗎不用preload。 呵呵, 你說呢?
演示: 背景圖片閃現空白方案-preferchfetch
<img src="./img/bg-huoluo.jpg" alt="" title="" style="display: none"/> .bg { background-color: #2D2C27; background-image: url(./img/bg-huoluo.jpg); background-size: contain; }
這方案好理解,圖片已經請求下載啦。 其實不能解決首屏背景圖片的問題。
演示:背景圖片閃現空白方案-建立隱藏Img節點
let dg = null; function createDialog() { onImageLoad('./img/bg-huoluo.jpg').then(src => { if (!dg) { dg = document.createElement('div'); dg.className = "bg"; dg.style.backgroundImage = `url(${src})`; dg.id = "dialog"; dg.innerHTML = ` <div class="content">我愛赫蘿!!!!</div> ` document.body.appendChild(dg); } }) } function onImageLoad(src) { return new Promise((resolve, reject) => { let img = new Image(); img.src = src; img.onload = function () { resolve(src) } img.onerror = reject }) }
固然這是有明顯問題的,你不能由於一個背景圖片而讓內容沒法正常展示。
固然你能夠有修正方案。
演示: 背景圖片閃現空白方案-等待圖片加載完畢再顯示彈框
.bg { background-color:#433F34; background-size: contain; } .bg-new{ background-image: url(./img/bg-huoluo.jpg) }
這樣,背景圖片加載上的時候,不會有明顯的閃白效果。 固然要是背景圖片,五光十色,估計有點爲難客官啦。
再回頭看看總結:
我===內容 & 你 === 背景圖片
我顯示的時候,你已經在
若不能,我顯示的時候,你儘快在
你儘量的小
那麼:有下面的一些額外的話:
jpg有漸進式, png有交錯模式。
咱們一塊兒來看看效果。
演示: png正常,png交錯,jpg漸進