国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用高斯模糊的效果逐步加載圖片(仿 Medium)

開發(fā) 前端
用過 Medium 的用戶不會(huì)不記得它的圖片加載方式——純色-高斯模糊-加載完成并顯示。這是一種很優(yōu)雅的圖片預(yù)加載的方式(因?yàn)?Medium 的圖片質(zhì)量都很高,如果全部一下加載的話,需要的時(shí)間難以想象,所以,這是一種很棒的做法)。

[[170778]]

用過 Medium 的用戶不會(huì)不記得它的圖片加載方式——純色-高斯模糊-加載完成并顯示。

這是一種很優(yōu)雅的圖片預(yù)加載的方式(因?yàn)?Medium 的圖片質(zhì)量都很高,如果全部一下加載的話,需要的時(shí)間難以想象,所以,這是一種很棒的做法)。從***次打開 Medium 這個(gè)網(wǎng)站開始,我就被這種技術(shù)給吸引住了——好吧,直到今天才去研究它。

在 Medium 網(wǎng)站,打開任何一篇文章,然后,我們來 inspect 一下:

  1. <figure name="512a"  
  2.         id="512a"  
  3.         class="graf--figure graf--layoutCroppedHeightPreview graf-after--h3" 
  4.     <div class="aspectRatioPlaceholder is-locked"
  5.         <div class="aspectRatioPlaceholder-fill"  
  6.              style="padding-bottom: 30%;" 
  7.         ></div> 
  8.         <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded"  
  9.              data-image-id="1*dZnfeZiXxf2BgN3VSQuOlA.jpeg"  
  10.              data-width="3600"  
  11.              data-height="3600"  
  12.              data-scroll="native" 
  13.         > 
  14.             <img src="https://cdn-images-1.medium.com/freeze/fit/t/60/18/1*dZnfeZiXxf2BgN3VSQuOlA.jpeg?q=20"  
  15.                  crossorigin="anonymous"  
  16.                  class="progressiveMedia-thumbnail js-progressiveMedia-thumbnail" 
  17.             > 
  18.             <canvas class="progressiveMedia-canvas js-progressiveMedia-canvas"  
  19.                     width="75"  
  20.                     height="22" 
  21.             ></canvas> 
  22.             <img class="progressiveMedia-image js-progressiveMedia-image"  
  23.                  data-src="https://cdn-images-1.medium.com/fit/t/1600/480/1*dZnfeZiXxf2BgN3VSQuOlA.jpeg"  
  24.                  src="https://cdn-images-1.medium.com/fit/t/1600/480/1*dZnfeZiXxf2BgN3VSQuOlA.jpeg" 
  25.             > 
  26.             <noscript class="js-progressiveMedia-inner"
  27.                 &lt;img class="progressiveMedia-noscript js-progressiveMedia-inner" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*dZnfeZiXxf2BgN3VSQuOlA.jpeg"&gt; 
  28.             </noscript> 
  29.         </div> 
  30.     </div> 
  31. </figure>  

可以看到,Medium 為每一張圖片都設(shè)置了這么長(zhǎng)的一段 HTML。這樣做的目的就是為了讓這個(gè)圖片的逐步加載過程能夠平滑如一,同時(shí)還能在一定程度上提升用戶體驗(yàn)。就算圖片沒有加載出來,顯示給用戶的是一個(gè)高斯模糊的圖片,其實(shí)也不失美感。

那么,這個(gè)圖片的逐步加載過程具體是什么樣的呢?

  1. 渲染一個(gè) div 容器,這個(gè)容器就是用來顯示最終展示給用戶的圖片的。通過對(duì)容器設(shè)置一個(gè)百分比的 padding-bottom 來讓其比例和大小與最終圖片的比例和大小相同,這樣,就能避免圖片加載出來的時(shí)候?qū)е碌捻撁娴闹嘏?
  2. 使用 img 標(biāo)簽來加載一張?jiān)瓐D質(zhì)量的 10% ~ 20% 左右的圖片,這張圖片的質(zhì)量很低,而且很小,所以可以馬上加載出來;
  3. 一旦小圖加載完成,就開始使用 canvas 來進(jìn)行繪制,添加模糊效果,同時(shí),開始請(qǐng)求最終要加載的大圖;
  4. 當(dāng)最終的大圖也加載完成之后,顯示大圖,隱藏掉 canvas。

以上就是 Medium 的做法。

我們可以自己來實(shí)現(xiàn)這個(gè)效果,實(shí)現(xiàn)過程如下:

  1. 渲染一個(gè)容器,保持與原圖的比例和尺寸相同,填充一個(gè)較淺的背景色;
  2. 先加載小圖,同時(shí)使用模糊效果;
  3. 小圖加載完成,開始請(qǐng)求大圖;
  4. 大圖加載完成,顯示大圖,隱藏小圖。

所以,綜合來看,其實(shí)并不復(fù)雜。

首先,我們可以把大圖和小圖的 URL 和尺寸都存起來,通過標(biāo)簽的 data 屬性去動(dòng)態(tài)獲取。所以,我們的 HTML 可以像下面這樣寫:

  1. <figure name="blur" 
  2.         class="blur-img-container" 
  3.         data-real-width="1174" 
  4.         data-real-height="670" 
  5.         data-src="images/sm2.jpeg" 
  6.         src="https://cdn-images-1.medium.com/max/2000/1*0WwtDkE1q6HGZwD6Kn9SuQ.jpeg" 
  7. ></figure>  

其中各個(gè)參數(shù)代表的含義是:

  • data-real-width: 大圖的寬度
  • data-real-height: 大圖的高度
  • data-src: 小圖的 URL
  • src: 大圖的 URL

同時(shí),我們需要定義一些 CSS 的 class 來對(duì)大圖和小圖進(jìn)行處理:

  1. .blur-img-container { 
  2.     position: relative
  3.     background: #eeeeee; 
  4.     background-size: cover; 
  5.     overflow: hidden; 
  6.  
  7. .blur-img-container img { 
  8.     position: absolute
  9.     top: 0; 
  10.     left: 0; 
  11.     width: 100%; 
  12.     height: 100%; 
  13.     opacity: 0; 
  14.     transition: all 0.4s ease-in-out
  15.  
  16. .blur-img-container .thumb-loaded { 
  17.     opacity: 1; 
  18.     filter: blur(10px); 
  19.     transform: scale(1); 
  20.  
  21. .blur-img-container .large-loaded { 
  22.     opacity: 1; 
  23.  
  24. .blur-img-container .thumb-hidden { 
  25.     opacity: 0; 
  26.  

然后,我們的重點(diǎn)在于 JavaScript 的處理。

  • 需要?jiǎng)討B(tài)的設(shè)置每個(gè)圖片的容器的 padding-bottom 以防止頁面發(fā)生重排;
  • 通過 image 的 onload 事件來控制其樣式和進(jìn)度

***點(diǎn),動(dòng)態(tài)設(shè)置我們的容器的 padding-bottom。可以通過計(jì)算寬高比然后換算成百分比:

  1. elem.style.paddingBottom = `${(realHeight / realWidth) * 100}%`; 

第二點(diǎn),使用圖像的 onload 事件來控制加載的進(jìn)度:

  1. let thumb = new Image(); 
  2. thumb.src = thumbSrc; 
  3. thumb.onload = () => { 
  4.     // 小圖加載完成,顯示小圖,設(shè)置樣式 
  5.     setStyle(thumb, 'thumb-loaded'); 
  6. }; 
  7. elem.appendChild(thumb); 
  8.  
  9. let realImg = new Image(); 
  10. realImg.src = lgSrc; 
  11. realImg.onload = () => { 
  12.     // 大圖加載完成,顯示大圖,隱藏小圖 
  13.     setStyle(realImg, 'large-loaded'); 
  14.     setStyle(thumb, 'thumb-hidden'); 
  15. }; 
  16.  
  17. // 將大圖添加到頁面中 
  18. elem.appendChild(realImg);  

其實(shí),只要把上面兩點(diǎn)主要的功能做好了,我們的這個(gè)效果基本上就實(shí)現(xiàn)了。

可以通過我的 GitHub Repo 來查看完整的源代碼和例子 blur-image

同時(shí),我將這個(gè)小功能封裝成了一個(gè) package,需要的朋友可以通過 npm install blur-image 或者 bower install blur-image 進(jìn)行安裝和使用。具體的安裝和使用方法可以查看文檔。

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2017-01-17 16:45:35

githubinstagramandroid

2024-10-10 16:02:34

2012-11-15 09:43:08

開發(fā)算法高斯模糊

2017-04-13 10:03:29

Java高斯模糊圖像

2023-04-27 08:42:50

效果

2015-02-02 16:42:49

特效密碼鎖

2015-01-19 12:19:04

iOS源碼ActionSheet仿QQ音樂

2011-04-15 09:29:20

jQueryFlash

2023-05-26 07:08:05

CSS模糊實(shí)現(xiàn)文字

2011-06-03 09:05:18

Android iphone tab

2011-06-03 09:34:14

Android iphone tab

2014-04-02 10:29:12

iOS 7模糊效果

2011-03-30 14:33:57

jQueryJavaScript

2017-03-22 10:35:06

AndroidRecyclerVie滑動(dòng)效果

2015-03-31 18:19:37

餓了么動(dòng)畫效果

2023-12-05 15:44:46

計(jì)算機(jī)視覺FastAPI

2021-08-30 06:20:39

CSS 技巧3D 效果

2023-09-26 21:53:27

Java圖像處理

2015-03-24 13:10:49

javascript中關(guān)村論壇提示效果

2012-06-05 10:22:45

jQuery
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

久久爱www.| 女人让男人操自己视频在线观看| 欧美人与拘性视交免费看| 亚洲一区在线看| jizzjizzxxxx| 麻豆精品在线观看| 国产一区二区高清不卡| 欧美另类69xxxxx| 97在线视频精品| 久久亚洲资源中文字| 婷婷综合社区| 亚洲欧美精品一区二区| 蜜桃av在线免费观看| 色综合久久久久综合| 国产不卡视频| 中文字幕一区二区三区在线观看| 国产午夜伦鲁鲁| 成人黄色国产精品网站大全在线免费观看 | 国产玉足榨精视频在线观看| 一区二区三区精品在线观看| 色婷婷狠狠18| 国产精品入口麻豆九色| 99热免费在线| 妺妺窝人体色777777| 日本特黄久久久高潮| 欧洲久久久久久| 久久国产欧美日韩精品| 咪咪色在线视频| 成人的网站免费观看| 国产xxxxx在线观看| 99re热视频精品| 男操女免费网站| 亚洲午夜精品网| 欧洲日本在线| 日韩精品视频免费| 精品免费av在线 | 视频在线观看入口黄最新永久免费国产 | 四虎地址8848精品| 欧美激情在线有限公司| 欧美日韩精品一区二区三区在线观看| 国内精品久久久久伊人av| 偷拍自拍一区| 国产在线观看一区二区三区| 国模一区二区三区| 美国av在线播放| 久久精品亚洲精品国产欧美| 午夜国产视频| 欧美一区二区人人喊爽| 国产精品蜜月aⅴ在线| 欧美中在线观看| 性欧美又大又长又硬| 91老司机在线| 沈樵精品国产成av片| 99国产精品白浆在线观看免费| 五月婷婷狠狠操| 大胆日韩av| 久久精品欧美| 国模少妇一区二区三区| 超碰在线人人爱| 在线观看日韩高清av| 在线日韩影院| 91av国产在线| 一道本一区二区| 精品国精品自拍自在线| 日本黄色免费在线| 午夜免费久久久久| 黄色免费成人| 人妻久久久一区二区三区| 亚洲一区精品在线| 国产直播在线| 国产精品美女呻吟| 国产麻豆精品在线| 性色av一区| 爽爽爽爽爽爽爽成人免费观看| 天天干天天操天天干天天操| 国产精品区一区二区三区| 日韩精品免费一区二区三区竹菊| 日韩电影免费观看在线观看| 人妖一区二区三区| 亚洲精品人成| 91人成在线| 精品国产免费人成在线观看| 欧美日韩一区高清| 性爽视频在线| 91久久精品美女高潮| a亚洲天堂av| 免费在线观看av| 91禁外国网站| 久久成人麻豆午夜电影| 美女无遮挡网站| 亚洲男人天堂古典| 欧美va天堂| 亚洲一级片免费| 亚洲黄色av女优在线观看 | 国产精品97| 亚洲电影免费观看高清完整版在线观看 | 久久精品人人| metart日本精品嫩模| 亚洲精品乱码久久久久久金桔影视 | 欧美激情在线免费| 99在线精品免费视频| 欧美日韩在线免费视频| 欧美美女在线直播| www.射射射| 亚洲福利在线观看| 最新国产精品| а√天堂www在线а√天堂视频| 久久精品国产成人精品| 免费高清不卡av| 中文字幕av资源一区| 性xxxxfreexxxxx欧美丶| 免费极品av一视觉盛宴| 日韩二区三区在线| 久久久久久国产精品| 狠狠色丁香婷综合久久| 毛片在线播放网址| 国产精品久久电影观看| 国产精品大尺度| 白嫩亚洲一区二区三区| 黄色一级视频播放| 欧美日韩高清一区二区三区| 久久人人88| 中文字幕在线第一页| 国产精品久久久久久久天堂| 国产精品高潮久久久久无| 亚洲自拍偷拍二区| 国产91九色视频| 五月婷婷久久综合| 天堂男人av| 一区二区三区四区电影| 69堂精品视频在线播放| 免费h片在线观看| 亚洲男人天天操| 最新黄色av网站| 国色天香2019中文字幕在线观看| 1313精品午夜理伦电影| 麻豆成人免费电影| 欧美freesex8一10精品| 日本中文字幕片| 伊人久久大香线蕉精品| 亚洲在线免费观看| 欧美激情亚洲| 欧美一级视频在线播放| 亚洲美女又黄又爽在线观看| 蜜桃一区二区三区在线| 91www在线| 国产 日韩 亚洲 欧美| 欧美国产日韩一区二区| 中文在线免费一区三区高中清不卡| 国产精品自在线拍| 日本fc2在线观看| 成人午夜电影免费在线观看| 日韩女优毛片在线| av中文字幕在线不卡| 日韩三区视频| av在线免费观看网| 亚洲伊人一本大道中文字幕| 成人自拍网站| 欧洲精品国产| 欧美大尺度激情区在线播放| 亚洲午夜激情免费视频| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产精品456露脸| 午夜精品久久| 亚洲精品456| 黄色影院在线看| 老司机免费在线视频| 中文字幕日韩在线观看| 亚洲人被黑人高潮完整版| 91免费国产在线观看| 欧美精品久久99久久在免费线| 好吊一区二区三区| 俺来也官网欧美久久精品| 欧美日韩成人免费视频| 国产精品久久999| 91精品免费在线| thepron国产精品| 成人免费看片39| 日本在线啊啊| 色视频成人在线观看免| 欧美视频一区二区三区在线观看| 久久九九影视网| japanese色系久久精品| 激情福利在线| 国产在线视频在线| 国产精品久久久久av| 亚洲大胆人体av| 亚洲同性同志一二三专区| 亚洲精品乱码| 成人在线精品| 成人精品福利| 麻豆一区二区三区视频| 欧洲久久久久久| 国产精品1区2区在线观看| 亚洲另类图片色| 欧美性极品xxxx做受| 99久久久久久| 美女诱惑黄网站一区| 不卡一区综合视频| 亚洲一区二区小说|