麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JavaScript模仿Pinterest實現圖片預加載功能

2019-11-20 08:40:16
字體:
來源:轉載
供稿:網友

前言

對于Pinterest網站,從前端設計出發的話,我們一定不會忘記我們曾經非常流行的瀑布流布局。但是今天,給大家簡要分析下 Pinterest上另外一項非常值得借鑒圖片加載細節。

看看下面的截圖:

大家可以感覺到圖片出來的時候預先繪制輪廓,重點是預制區域的顏色采用與圖片較為相似的色彩值,當圖片加載完全后,會有種漸入的效果。

其中谷歌的圖片搜索也用到了類似效果:

我們稱之為這種效果為Color Placeholder [色彩預置],當圖片加載的時候,我們優先顯示其所在容器的背景顏色(如同很多會顯示一個加載的gif),由于受限于不同的圖片和大小,因此相比與齊刷刷的加載gif,不同色塊體驗 可能 更好吧(至少Pinterest Google這么認為吧).

實現步驟

接下來我們進入正題,如何自己實現這樣的動畫加載效果(實現的方式肯定有很多的也歡迎大家提出更好的思路)

我們先定義下基本的html結構

<!--一個post當作一個單位--> <div class="post">  <div class="image-bg" style="background-color:#141646"> <img width="310" height="242" src="https://mir-s3-cdn-cf.behance.net/projects/404/89388038777855.Y3JvcCwxMDk1LDg1NiwyNTIsMjE.png" /> </div> <p class="title">Mars</p></div> 

再看下css設置

.image-bg{ background: #e1e1e1; } img { width:100%; opacity: 0; transition: opacity .2s ease-in .25s; } .loaded img { opacity: 1; }

圖片默認是透明度為0,當加載完成后設置為1就行啦。

 $(function() { $('.post img').each(function() {  var el = this;  var image = new Image();  image.src = el.src;  image.onload = function() {   $(el).parent().addClass('loaded');  } }) })

大概基本思路就是這些,但是這里面最核心的就是確定所謂的Dominant Color(圖片中主要色彩)。

完整示例如下:

<!doctype html><html lang="en"><head><title>實現類似Pinterest 的圖片預加載功能</title><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"><link rel="stylesheet"  /> <style type="text/css">  html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-size: 62.5%; -webkit-tap-highlight-color: transparent } body { font-family: 'Helvetica Neue','/5FAE/8F6F/96C5/9ED1','/9ED1/4F53',sans-serif; letter-spacing: .01rem; font-size: 15px; line-height: 1.75em; color: #3A4145; -webkit-font-feature-settings: 'kern' 1; -moz-font-feature-settings: 'kern' 1; -o-font-feature-settings: 'kern' 1;  } h1{ padding-top: 40px; text-align: center; } .main{ width: 720px; margin: 80px auto; text-align: center;  } .post{ margin: 10px; font-size: 18px; color:#666; } .title{ line-height: 30px; } .image-bg{ background: #e1e1e1; } img { width:100%; opacity: 0; transition: opacity .2s ease-in .25s;  } .loaded img { opacity: 1; }</style><script src="http://s1.vued.vanthink.cn/jquery-1.10.2.min.js"></script></head><body class="doc"> <h1>實現類似Pinterest 的圖片預加載功能</h1> <div class="main row"> <div class="col-md-6">  <div class="post">  <div class="image-bg" style="background-color:#141646">   <img width="310" height="242" src="https://mir-s3-cdn-cf.behance.net/projects/404/89388038777855.Y3JvcCwxMDk1LDg1NiwyNTIsMjE.png" />  </div>    <p class="title">Mars</p>  </div> </div> <div class="col-md-6">  <div class="post">  <div class="image-bg" style="background-color:#3e90dc;" >   <img width="310" height="242" src="https://mir-s3-cdn-cf.behance.net/projects/404/1f430b36513911.Y3JvcCw4MjEsNjQyLDEwMSwzMA.jpg" />  </div>  <p class="title">Grass</p>  </div> </div> <div class="col-md-6">  <div class="post">  <div class="image-bg" style="background-color:#09171e;" >   <img width="310" height="242" src="https://mir-s3-cdn-cf.behance.net/projects/404/4bfb7136056367.Y3JvcCw5NTgsNzQ5LDIyMCwyNg.jpg" />  </div>  <p class="title">journet to the west2</p>  </div> </div> <div class="col-md-6">  <div class="post">  <div class="image-bg" style="background-color:#d4cab1;" >   <img width="310" height="242" src="https://mir-s3-cdn-cf.behance.net/projects/404/96ed6c36255639.Y3JvcCw1NDksNDI5LDEyNiwxODU.png" />  </div>  <p class="title">Marriage</p>  </div> </div> <div class="col-md-6">  <div class="post">  <div class="image-bg" style="background-color:#fff8fa;" >   <img width="310" height="242" src="https://mir-s3-cdn-cf.behance.net/projects/404/ce4a4336970823.Y3JvcCwxMDk1LDg1NiwyNTIsMjE.png" />  </div>  <p class="title">Birthday Card</p>  </div> </div> <div class="col-md-6">  <div class="post">  <div class="image-bg" style="background-color:#fff;" >   <img width="310" height="242" src="https://mir-s3-cdn-cf.behance.net/projects/404/fa5dec36514827.Y3JvcCwxMDk1LDg1Niw0ODUsMTY.png" />  </div>  <p class="title">Cup</p>  </div> </div>  </div> <script type="text/javascript"> $(function() { $('.post img').each(function() {  var el = this;  var image = new Image();  image.src = el.src;    image.onload = function() {   $(el).parent().addClass('loaded');  } })  })</script> </body></html>

設置背景的顏色

如果你用photoshop打開一張圖片的話,你只需要幾步就可以確定你希望得到的顏色: 濾鏡 -> 模糊 -> 平均即可。

當然這是針對你所能處理的圖片,如果面對海量的圖片的話,這個時候我們需要用程序去實現。

尋找到一張圖片較為明顯的顏色,需要在三維空間中找到一些聚合的點。如果自己寫的話,需要去了解一些聚合算法。當然自己并不打算去寫更多的內容關于如何去進行圖片的這些顏色的生成,這恐怕不是一篇文章能給說完的。實際上你安裝ImageMagick就可以簡單的實現預期效果:

convert path/or/url/to/image.png -resize 1x1 txt:- 

但是這個不太適合我們寫程序的。我們可以使用第三方的npm gm

var gm = require('gm');gm('demo1.png')  .resize(120, 120) .colors(1) .toBuffer('RGB', function (error, buffer) {  console.log(buffer.slice(0, 3)); });

運行輸出效果如下:

~ node gm.js./demo1.png:<Buffer 34 29 3b> ./demo2.png:<Buffer cf c3 ad> 

對比圖如下:

因此借助程序,我們可以在保存圖片的時候進行顏色采集,代碼中通過先將圖片進行大小調整,實際是出于性能的考慮。有助于節約運算時間。除此之外embed.ly也開放了對應的API,方便你獲取網絡圖片的主要色彩。

如果我們能夠有途徑獲取這樣的顏色的話,自然整體功能就沒有什么難度了。

擴展

其實除了純粹的顏色背景外,我們還可能會遇到類似 medium 的圖片(參考上圖)預加載技術,才開始圖片是模糊的。實際上我們可以通過插件生成一張幾素的小圖片,然后運用上高四模糊濾鏡,然后等待原圖加載完畢后,我們在顯示原來的圖片。

var gm = require('gm');gm('demo1.png')  .resize(4, 4) .toBuffer('GIF', function (error, buffer) {  console.log('data:image/gif;base64,' + buffer.toString('base64')); });
<div class="image-bg" style="background-color:#141646">  <img src="data:image/gif;base64,R0lGODlhBAADAPMJACwlPjAmPDUqOzgrOgQPSgkSShAVRhEWRplcFsR3EAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAEAAMAAAQJ0" width="310" height="242" real-src="https://mir-s3-cdn-cf.behance.net/projects/404/89388038777855.Y3JvcCwxMDk1LDg1NiwyNTIsMjE.png" />

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品一区二区三区在线播放 | 久久色网站 | 久久久成人999亚洲区美女 | 视频一区 日韩 | 深夜福利视频免费观看 | 国产一级一区二区 | 欧美一级理论 | 国产69精品久久99不卡免费版 | 午夜激情视频免费 | 天天舔天天插 | 美女扒开腿让男生桶爽网站 | 亚洲一区成人在线 | 草莓福利社区在线 | 久久精品日产高清版的功能介绍 | 娇喘在线 | 日本娇小videos高潮 | 久久久久亚洲国产精品 | 欧美成人鲁丝片在线观看 | 欧美a一 | 国产成人在线免费视频 | 深夜福利视频免费观看 | 日韩字幕| 91美女视频在线观看 | a黄色片| 国产精品成人免费一区久久羞羞 | 羞羞的动漫在线观看 | 亚洲爱爱网站 | 亚洲精品一区二区三区在线看 | 草莓视频在线导航 | 女人一级一级毛片 | 日韩精品一区二 | 亚洲欧洲av在线 | 九九热久久免费视频 | 日本高清黄色片 | 牛牛热这里只有精品 | 国产欧美在线一区二区三区 | 久久艹综合 | 国产一级淫片免费看 | 久久精品一级片 | 亚洲va久久久噜噜噜久久男同 | 国产无限资源在线观看 |