前言
作為一個有追求有信仰的程式設計師,做一個網站絕不是僅僅能用就行了,當我們實現功能後,或者在寫程式碼的過程中就要考慮怎麼去優化,一個網站要去優化,作為前端要考慮的是資源優化(減少 http 請求啊,固定圖片壓縮啊,精靈圖合併啊,或者使用圖示字型啊),安全問題(程式碼壓縮醜化,儲存 cookie 或者storage 時候加密啊),還有效能優化,資源優化的重中之重就是圖片的優化,載入圖片是很耗費資源的。正常情況下,當圖片沒有載入過來的時候,如果沒有外層標籤限制高度,會沒有圖片的位置,圖片資源載入過來之後,開始下載,如果圖片夠大,圖片會從頭到尾慢慢顯示,給人非常不舒服的感覺。
解決方案
圖片的優化其實現在有兩種解決方案:
- 先顯示一張背景圖,到圖片載入過來時候顯示載入圖片
- 先載入圖片的縮圖,然後模糊,縮圖非常小,結合模糊效果,可以比純色更好的佔位符,而不會犧牲有效載荷。到圖片完全出來時候顯示大圖,同時模糊到清晰
當然了,如果想要更好的效果,要配合圖片懶載入,就是當滾輪滾動到特定位置在載入圖片,這篇文章重點是將第二種解決方案,圖片從模糊到清晰,廢話不多說,上程式碼
圖片從模糊到清晰
html部分
<figure>
<div class="image-wrap">
<img class="oldImage" src="https://img.findaily.cn/kol/201710/cstartMTZmODY5MTAtN2Q3OS00ZGNkLTk1YmMtMGNiNjVmOWYzNjU5XyNjcm9wLXdfMTgyOS1oXzEyMDAteF80Ni15XzAtcl8xIw==cend.jpg?x-oss-process=image/resize,p_10" src="https://segmentfault.comhttps://img.findaily.cn/kol/201710/cstartMTZmODY5MTAtN2Q3OS00ZGNkLTk1YmMtMGNiNjVmOWYzNjU5XyNjcm9wLXdfMTgyOS1oXzEyMDAteF80Ni15XzAtcl8xIw==cend.jpg">
</div>
</figure>
css部分
figure .image-wrap {
width: 500px;
height: 312px;
position: relative;
overflow: hidden;
}
figure .image-wrap .oldImage {
width: 100%;
-webkit-filter: blur(10px);
transition: all 0.5s
}
js部分
var image = document.querySelector(`.oldImage`),
imageParentDom = image.parentNode,
src = image.dataset.src;
var newImage = document.createElement(`img`);
newImage.src = src;
newImage.style.cssText = `position: absolute;left:0;top:0;width:100%;z-index:-1`;
newImage.onload = function () {
imageParentDom.appendChild(newImage);
setTimeout(() => {
imageParentDom.removeChild(image);
},500)
}