前段時間朋友介紹了一個很帥的網站 http://www.species-in-pieces.com/
F12看了一下 Dom 結構,發現做者只是結合了 CSS3 的 clip-path 和 transition 特性,就實現了很厲害的效果,每一個轉場和動物的細節都作得很棒。
html
而後我根據本身的理解作了一個Demo, 並將核心js部分打包了出來,歡迎感興趣的朋友一塊兒交流git
Demo中的圖片來自 https://www.behance.net/tomanders, 我只是作了低邊處理github
先從一個簡單的 clip-path 變形開始npm
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>simple move</title> <style> .polygon{ width: 600px; height: 300px; background-color: black; clip-path: polygon(20% 30%, 0 70%, 40% 70%); animation: move 1s infinite alternate; } @keyframes move { to { background-color: grey; clip-path: polygon(80% 70%, 100% 30%, 60% 30%); } } </style> </head> <body> <div class="polygon"></div> </body> </html>
這就是Demo中所須要的基本動畫 變形 + 變色, 至於如何構建精美的圖形變化, 就須要一點想象力和設計能力了bash
咱們須要先設計出滿意的低邊圖案,注意控制三角形的數量,越少越好越少越好越少越好越少越好越少越好越少越好動畫
接下來,須要將每一個三角形的座標和色值轉化爲數據格式。我目前找不到很高效的轉化方式,就用標註軟件標註完後,手工錄入,最後畫了3個就結束了。因此三角形的數量越少越好越少越好越少越好越少越好越少越好越少越好。網站
或者你有很好的方式介紹,請必定要告訴我。spa
如今準備工做完成了,最痛苦的階段也已通過去了.net
代碼實現的基本思路是這樣的插件
區區幾行代碼就不貼出來了,感興趣的移步 github
<script src="https://unpkg.com/ani-clipath/dist/ani-clipath.min.js">
npm install --save ani-clipath
須要自定義一個 DOM 容器,並設置好width和height
<style> .shapes{ width: 800px; height: 600px; } </style> ... <div class="shapes"></div>
初始化一個實例,並傳入參數
參數 | 類型 | 說明 |
---|---|---|
el | String | 綁定DOM容器 |
speed | Number | 控制變化速度 |
delay | Number | 控制變化的延遲 |
shapes | Array | 低邊圖形的座標 |
使用公共方法切換
方法 | 說明 |
---|---|
next() | 切換下一個圖形 |
previous() | 切換上一個圖形 |
<script> var aniClipath = new AniClipath({ el: '.shapes', speed: 1000, delay: 30, shapes: data }) setInterval(function(){ aniClipath.next() },3000) </script>
shapes 屬性的數據格式
var data = [ 第 1 個低邊圖形 [ // 基本圖形參數 { // 顏色 c: '#1A1A1A', // polygon座標 p: [ { x: '50%', y: '30%' }, { x: '30%', y: '70%' }, { x: '70%', y: '70%' }] } ... ], 第 2 個低邊圖形 [ { c: '#E6E6E6', p: [ { x: '50%', y: '70%' }, { x: '30%', y: '30%' }, { x: '70%', y: '30%' }] } ... ] ... 第 n 個低邊圖形 ]
先這樣了 歡迎star