
最近不曉得為啥 youtube 推薦富奸的幽遊白書 , 還是仙水篇 XD 應該至少有個 20 年沒看了吧 , 小時候看覺得仙水篇最精采 , 仙水就是個很複雜的角色阿 ~
然後看到片尾曲的效果就來順便寫看看 , 本來以為用 css 就全部搞定 , 可是照片浮起來的效果實在太機車了 , 最後還是靠 js 處理這塊
本來一開始做的時候是直接在每個 photo
上面去設定動畫旋轉效果 , 弄完才發現暈了 , 應該要圍繞著一個中心點轉
所以開了兩個中心點來用 , 一個讓照片跟著中心點轉 , 另外一個則是讓照片浮起來時當作參考位置用
這裡會用到一個老技巧 , 當設定父層這樣的時候 , 之後的子層就會從中間開始計算 , 比較符合常人思考的座標 , 而不是電腦座標 , 不然正常 left:0 top:0
都是從左上角計算
1 2 3 4 5 6
| position: absolute; margin: auto; left: 0; right: 0; bottom: 0; top: 0;
|
動畫的部分每隔 10%
增加 36deg
, 最常見的雷大概就是 deg
忘了寫 , 還有做這類的東西最好角度都用正數 , 不然用負數到時候靠程式計算會被自己雷到 XD
1 2 3 4 5 6 7 8 9 10 11
| 0% { --deg: 0deg; }
10% { --deg: 36deg; }
20% { --deg: 72deg; }
|
然後他圖片的灰色跟模糊效果就是如下 , 另外有時候會看到一些網站整頁都是灰色那是因為它直接在 html
設定 filter: grayscale(100%)
1
| filter: grayscale(100%) blur(3px);
|
最後就是 js 的部分 , run
會取得隨機的照片元素 , 套用預先定義好的樣式 , 然後把它附加到 outer-center
, 而 clear
則是清除樣式 , 並且把元素還原回 center
裡面
兩個函數結尾都會先 clearInterval
接著從新循環 setInterval
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| var photoNum = 1 var filterNum = 1 var interval = setInterval(run, 3000)
function clear() { let p = document.querySelector('.photo' + photoNum.toString()) let center = document.querySelector('.center') p.classList.remove('normal-filter' + filterNum.toString()) center.appendChild(p) clearInterval(interval) interval = setInterval(run, 3000) }
function run() { photoNum = getRandomNumber(1, 20) let p = document.querySelector('.photo' + photoNum.toString()) let outerCenter = document.querySelector('.outer-center') filterNum = getRandomNumber(1, 3) p.classList.add('normal-filter' + filterNum.toString()) outerCenter.appendChild(p) clearInterval(interval) interval = setInterval(clear, 3000) }
function getRandomNumber(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); }
|
See the Pen
Untitled by 喇賽人 (@weber87na)
on CodePen.