前端初學者,目前是大三狗。
本專業不感興趣,所有自學前端打算轉行。
第一次寫文章,請各位大佬多多指教。
剛看完htmlt與css基礎部分,js還在學習中,做了一個小練習。
暫時沒有截gif的軟體,先用截圖代替吧。
效果圖就是這樣:
步驟:
1.構建立體均勻分佈的圖片
2.使圖片旋轉
使用到的知識點:
css部分:
1.transform
2.transform-style
3.perspective
4.transition
5.animation
js部分:
setInterval
transform屬性:
transform: none|transform-functions;
複製程式碼
Transform屬性應用於元素的2D或3D轉換。這個屬性允許你將元素旋轉,縮放,移動,傾斜等。
transform-style
transform–style屬性指定巢狀元素是怎樣在三維空間中呈現。
transform-style: flat|preserve-3d;
複製程式碼
這裡我們需要用到的是perserve-3d
使用這個屬性必需先使用transforn
屬性
perspective
這個屬性是允許你改變3D檢視的透視方式。
值越大距離眼睛月圓,值越小距離眼睛越近。
transition
transition
屬性是一個速記屬性有四個屬性:transition-property
, transition-duration
, transition-timing-function
, and transition-delay
transition: property duration timing-function delay;
複製程式碼
-
transition-property
指定CSS屬性的name
,transition
效果 -
transition-duration
transition
效果需要指定多少秒或毫秒才能完成 -
transition-timing-function
指定transition
效果的轉速曲線 -
transition-delay
定義transition
效果開始的時候
animation
animation
和transition
這兩個屬性我覺得我講不清楚,大家還是自己去查一下吧。
首先定義一個div
來存放圖片
<div class="wrap">
<div id="photos">
<img class="pic1" src="pic/3D/favorite1.jpg" alt="">
<img class="pic2" src="pic/3D/favorite2.jpg" alt="">
<img class="pic3" src="pic/3D/favorite3.jpg" alt="">
<img class="pic4" src="pic/3D/favorite9.jpg" alt="">
<img class="pic5" src="pic/3D/favorite5.jpg" alt="">
<img class="pic6" src="pic/3D/favorite6.jpg" alt="">
</div>
</div>
複製程式碼
設定css
*{
padding: 0px;
margin: 0px;
}
body{
background-color: black;
}
.wrap{
perspective: 1600px;
}
#photos{
width: 300px;
height:300px;
margin: 200px auto;
transform-style: preserve-3d;
transition: all .5s ease;
animation: spin 20s linear infinite;
}
img{
width: 250px;
height: 300px;
margin-bottom: 100px;
position: absolute;
border: 1px solid gray;
border-radius: 20px;
opacity: 0.8;
}
複製程式碼
此時圖片應該是都重疊在一起的,用js使圖片立體分佈均勻
首先 建立變數獲得photos物件
存放photo下的img
獲得img的長度
使圖片立體分佈均勻,這一步其實用css可以單獨設定,但是重複工作太多,所以直接用js即可。
遍歷phoNum
,為其新增style
這裡的rotate指的是以螢幕為面。水平向右為X軸,豎直向上為y軸,垂直螢幕向外為z軸,所以我們只需要設定y軸的值,即trotateY()
注意:我們新增的圖片沒有上面和底下的 如果設定為上下面也有圖片,style需要單獨在cssh中設定。我嘗試新增了頂面,用js設定,但是沒搞出來,如果有哪位大佬知道怎麼弄,請指教。
var phoArr = document.getElementById("photos");
var phoNum = phoArr.getElementsByTagName("img");
var phoLen = phoNum.length;
var ang = Math.floor( 360/phoLen);
for(var i = 0; i < phoLen; i++){
phoNum[i].style = `transform : rotateY(` + ang*i + `deg) `;
}
複製程式碼
此時應該是這樣的效果:
使圖片分散開,需要新增translateZ()
,
這裡設定translateZ
為300
for(var i = 0; i < phoLen; i++){
phoNum[i].style = `transform : rotateY(` + ang*i + `deg) translateZ(300px) `;
}
複製程式碼
這樣圖片就是均勻分散開的。
最後新增動畫使圖片動起來
使用@keyframes
可以使圖片動起來。
它是通過通過從一個樣式過渡到另一個樣式
具體的用法有很多,不一一細說了。
這裡我只設定了水平方向的轉動,即只設定了rotateY()
從0到360deg,正好為一圈
若設定了rotateX()
則在豎直方向也會轉動
@keyframes spin {
from {
transform: rotateY(0);
}
to {
transform: rotateY(360deg);
}
}
複製程式碼
結束。
本文參考: