本demo應用了css3 transition animate,若有相容性問題,請升級你的瀏覽器! 這次先讓大家玩玩! 結構層 表現層 動畫的屬性值可以隨便調。 骰子的每個面的公共樣式 點數容器的公共樣式 行為層 <!doctype html> <html> <head> <meta charset ...
本demo應用了css3 transition animate,若有相容性問題,請升級你的瀏覽器!
這次先讓大家玩玩!
結構層
ul骰子容器包裹6個面li;每個面裡面包裹一個點數容器div.c-num用於position;最後就是調點數p的樣式了。
<ul class="container">
<li class="lf">
<div class="c-num">
<p class="num1"></p>
</div>
</li>
<li class="rt">
<div class="c-num">
<p class="num1"></p>
<p class="num2"></p>
<p class="num3"></p>
</div>
</li>
<li class="top">
<div class="c-num">
<p class="num1"></p>
<p class="num2"></p>
<p class="num3"></p>
<p class="num4"></p>
<p class="num5"></p>
</div>
</li>
<li class="btm">
<div class="c-num">
<p class="num1"></p>
<p class="num2"></p>
<p class="num3"></p>
<p class="num4"></p>
<p class="num5"></p>
<p class="num6"></p>
</div>
</li>
<li class="in">
<div class="c-num">
<p class="num1"></p>
<p class="num2"></p>
</div>
</li>
<li class="out">
<div class="c-num">
<p class="num1"></p>
<p class="num2"></p>
<p class="num3"></p>
<p class="num4"></p>
</div>
</li>
</ul>
表現層
ul,li,div,p{margin:0;padding:0;}
.container{
position:relative;
list-style:none;
}
先將容器ul相對定位,在將li絕對定位,則每個面li都在左上角便於rotate
transform:translate(100px,100px) rotateX(0deg) rotateY(0deg);
過渡xy方向以及旋轉 參考W3C http://www.w3school.com.cn/cssref/pr_transform.asp
transform-style:preserve-3d;
嵌套元素以3d展示 http://www.w3school.com.cn/cssref/pr_transform-style.asp
transform-origin:50px 50px;
旋轉中心位置http://www.w3school.com.cn/cssref/pr_transform-origin.asp
animation:nickAnimate 5s ease infinite;
動畫調用http://www.w3school.com.cn/cssref/pr_animation.asp
animation-fill-mode:forwards;
規定動畫完成後停留在最後一幀http://www.w3school.com.cn/cssref/pr_animation-fill-mode.asp
animation-play-state:paused;
預設為paused,不然頁面刷新會自動執行動畫的http://www.w3school.com.cn/cssref/pr_animation-play-state.asp
@keyframes nickAnimate{/*動畫定義*/
0%{
transform:translate(100px,100px) rotateX(0deg) rotateY(0deg);
}
100%{
transform:translate(130px,120px) rotateX(1360deg) rotateY(1360deg);
}
}
動畫的屬性值可以隨便調。
.container>li{
position:absolute;
width:100px;height:100px;
border-radius:15px;
background:#DDDBE6;
overflow:hidden;
border:1px solid #ddd;
}
骰子的每個面的公共樣式
將每個面rotate成一個立方體
.lf{
transform:rotateY(90deg) translateZ(-50px);
}
.rt{
transform:translateX(100px) rotateY(90deg) translateZ(-50px);
}
.top{
transform:translateY(-50px) rotateX(90deg);
}
.btm{
transform:translateY(50px) rotateX(90deg);
}
.in{
transform:translateZ(50px);
}
.out{
transform:translateZ(-50px);
}
現在可以看到一個立方體了吧,下麵就是一些定位樣式渲染成骰子的樣子
點數容器的公共樣式
.c-num{/*點數容器*/
position:relative;
width:100%;
height:100%;
background:radial-gradient(#fff 35%,#DDDBE6);
}
點數公用樣式 我把每個點都居中了,然後在translate,其實直接translate或者position也可以,仁者見仁智者見智吧
p[class^='num']{
position:absolute;
width:20px;
height:20px;
background-color:red;
border-radius:50%;
top:50%;left:50%;
margin-top:-5px;
margin-left:-5px;
}
下麵就是點數p的樣式微調了
/*點數1的面已經居中*/
.lf .num1{}
/*點數2的面translate慢慢調吧*/
.in .num1{
transform:translate(-5px,-20px);
}
.in .num2{
transform:translate(-5px,20px);
}
/*點數3的面*/
.rt .num1{
transform:translate(-5px,-30px);
}
.rt .num2{
transform:translateX(-5px);
}
.rt .num3{
transform:translate(-5px,30px);
}
/*點數4的面*/
.out .num1{
transform:translate(-20px,20px);
}
.out .num2{
transform:translate(-20px,-20px);
}
.out .num3{
transform:translate(20px,20px);
}
.out .num4{
transform:translate(20px,-20px);
}
/*點數5的面*/
.top .num1{
transform:translate(25px,-30px);
}
.top .num2{
transform:translate(-25px,-30px);
}
.top .num4{
transform:translate(-25px,25px);
}
.top .num5{
transform:translate(25px,25px);
}
/*點數6的面*/
.btm .num1{
transform:translate(-25px,30px);
}
.btm .num2{
transform:translate(-25px,0px);
}
.btm .num3{
transform:translate(-25px,-30px);
}
.btm .num4{
transform:translate(15px,30px);
}
.btm .num5{
transform:translate(15px,0px);
}
.btm .num6{
transform:translate(15px,-30px);
}
行為層
document.getElementsByClassName('run')[0].onclick=function(){
document.getElementsByClassName('container')[0].style.animationPlayState='running';
};
document.getElementsByClassName('paused')[0].onclick=function(){
document.getElementsByClassName('container')[0].style.animationPlayState='paused';
};
搖啊搖、暫停按鈕就是控制animate的運行狀態
ok!上完整代碼有興趣的玩玩吧!
<!doctype html> <html> <head> <meta charset="utf-8"> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0" name="viewport"> <title>css3 骰子 animate nick</title> <style> /*先將容器ul相對定位,在將li絕對定位,則每個面li都在左上角便於rotate*/ ul,li,div,p{margin:0;padding:0;} .container{ position:relative; list-style:none; transform:translate(100px,100px) rotateX(0deg) rotateY(0deg);/*過渡xy方向以及旋轉http://www.w3school.com.cn/cssref/pr_transform.asp*/ transform-style:preserve-3d;/*嵌套元素以3d展示 http://www.w3school.com.cn/cssref/pr_transform-style.asp*/ transform-origin:50px 50px;/*旋轉中心位置http://www.w3school.com.cn/cssref/pr_transform-origin.asp*/ animation:nickAnimate 5s ease infinite;/*動畫調用http://www.w3school.com.cn/cssref/pr_animation.asp*/ animation-fill-mode:forwards;/*規定動畫完成後停留在最後一幀http://www.w3school.com.cn/cssref/pr_animation-fill-mode.asp*/ animation-play-state:paused;/*預設為paused,不然頁面刷新會自動執行動畫的http://www.w3school.com.cn/cssref/pr_animation-play-state.asp*/ } @keyframes nickAnimate{/*動畫定義*/ 0%{ transform:translate(100px,100px) rotateX(0deg) rotateY(0deg); } 100%{ transform:translate(130px,120px) rotateX(1360deg) rotateY(1360deg); } } .container>li{ position:absolute; width:100px;height:100px; border-radius:15px; background:#DDDBE6; overflow:hidden; border:1px solid #ddd; } /*將每個面rotate成一個立方體*/ .lf{ transform:rotateY(90deg) translateZ(-50px); } .rt{ transform:translateX(100px) rotateY(90deg) translateZ(-50px); } .top{ transform:translateY(-50px) rotateX(90deg); } .btm{ transform:translateY(50px) rotateX(90deg); } .in{ transform:translateZ(50px); } .out{ transform:translateZ(-50px); } /*現在可以看到一個立方體了吧,下麵就是一些定位樣式渲染成骰子的樣子*/ .c-num{/*點數容器*/ position:relative; width:100%; height:100%; background:radial-gradient(#fff 35%,#DDDBE6); } p[class^='num']{/*點數公用樣式 我把每個點都居中了,然後在translate,其實直接translate或者position也可以,仁者見仁智者見智吧*/ position:absolute; width:20px; height:20px; background-color:red; border-radius:50%; top:50%;left:50%; margin-top:-5px; margin-left:-5px; } /*點數1的面已經居中*/ .lf .num1{} /*點數2的面translate慢慢調吧*/ .in .num1{ transform:translate(-5px,-20px); } .in .num2{ transform:translate(-5px,20px); } /*點數3的面*/ .rt .num1{ transform:translate(-5px,-30px); } .rt .num2{ transform:translateX(-5px); } .rt .num3{ transform:translate(-5px,30px); } /*點數4的面*/ .out .num1{ transform:translate(-20px,20px); } .out .num2{ transform:translate(-20px,-20px); } .out .num3{ transform:translate(20px,20px); } .out .num4{ transform:translate(20px,-20px); } /*點數5的面*/ .top .num1{ transform:translate(25px,-30px); } .top .num2{ transform:translate(-25px,-30px); } .top .num4{ transform:translate(-25px,25px); } .top .num5{ transform:translate(25px,25px); } /*點數6的面*/ .btm .num1{ transform:translate(-25px,30px); } .btm .num2{ transform:translate(-25px,0px); } .btm .num3{ transform:translate(-25px,-30px); } .btm .num4{ transform:translate(15px,30px); } .btm .num5{ transform:translate(15px,0px); } .btm .num6{ transform:translate(15px,-30px); } </style> </head> <body> <!--功能-運行、暫停按鈕--> <button class="run">搖啊搖</button> <button class="paused">暫停</button> <!--骰子的結構--> <!--骰子容器包裹6個面;每個面裡面包裹一個點數容器用於position;最後就是調點數樣式了--> <ul class="container"> <li class="lf"> <div class="c-num"> <p class="num1"></p> </div> </li> <li class="rt"> <div class="c-num"> <p class="num1"></p> <p class="num2"></p> <p class="num3"></p> </div> </li> <li class="top"> <div class="c-num"> <p class="num1"></p> <p class="num2"></p> <p class="num3"></p> <p class="num4"></p> <p class="num5"></p> </div> </li> <li class="btm"> <div class="c-num"> <p class="num1"></p> <p class="num2"></p> <p class="num3"></p> <p class="num4"></p> <p class="num5"></p> <p class="num6"></p> </div> </li> <li class="in"> <div class="c-num"> <p class="num1"></p> <p class="num2"></p> </div> </li> <li class="out"> <div class="c-num"> <p class="num1"></p> <p class="num2"></p> <p class="num3"></p> <p class="num4"></p> </div> </li> </ul> <script> // 搖啊搖、暫停按鈕就是控制animate的運行狀態 document.getElementsByClassName('run')[0].onclick=function(){ document.getElementsByClassName('container')[0].style.animationPlayState='running'; }; document.getElementsByClassName('paused')[0].onclick=function(){ document.getElementsByClassName('container')[0].style.animationPlayState='paused'; }; </script> </body> </html>View Code
畢竟還年少,自我感覺至少如此,有些玩心,大家有什麼新奇好的想法可以給我留言或在我的博客首頁qq交流,願我們在娛樂的過程中共同進步!