上圖是Path App for iPhone的選單特效,但其實我並不常用Path... 只是某次同事介紹我使用時,我一直覺得它的選單特效很好玩!
心想應該也可以試著用CSS Transitions模擬出來,那何謂CSS Transitions?從規格書上的解釋:
CSS Transitions allows property changes in CSS values to occur smoothly over a specified duration.
也就是說~ 一般我們在設定CSS屬性值之後會立即呈現出效果,而透過CSS Transitions可以讓我們控制該效果要在多久的時間內如何來呈現,所以本文就是用CSS Transitions和一些JavaScript來模擬這個特效,有興趣可以參考下述的程式碼或直接觀看範例:
.Demo
Path Menu in CSS3 Transitions
function on(n,angle,delay)
{
n.style.webkitTransition = "all 150ms linear";
n.style.webkitTransitionDelay = delay+"ms";
n.style.webkitTransform = "rotate(-540deg)";
var sx = radius * Math.cos(angle*(Math.PI/180));
var sy = radius * Math.sin(angle*(Math.PI/180));
n.style.left = sx+"px";
n.style.top = sy+"px";
var sx2 = sx *0.91;
var sy2 = sy *0.91;
sx *= 0.9;
sy *= 0.9;
function round2(e)
{
e.stopPropagation();
n.removeEventListener("webkitTransitionEnd",round2,false);
n.style.webkitTransition = "all 100ms ease-out";
n.style.webkitTransform = "rotate(-360deg)";
n.style.left = sx+"px";
n.style.top = sy+"px";
function round3(e)
{
e.stopPropagation();
n.removeEventListener("webkitTransitionEnd",round3,false);
n.style.left = sx2+"px";
n.style.top = sy2+"px";
}
setTimeout(function(){
n.addEventListener("webkitTransitionEnd",round3,false);
},1);
}
n.addEventListener("webkitTransitionEnd",round2,false);
}
function off(n,angle,delay)
{
n.style.webkitTransition = "all 150ms ease-out";
n.style.webkitTransform = "rotate(-630deg)";
var sx = radius * Math.cos(angle*(Math.PI/180));
var sy = radius * Math.sin(angle*(Math.PI/180));
n.style.left = sx+"px";
n.style.top = sy+"px";
function round2(e)
{
e.stopPropagation();
n.removeEventListener("webkitTransitionEnd",round2,false);
n.style.webkitTransition = "all 150ms linear";
n.style.webkitTransitionDelay = delay+"ms";
n.style.webkitTransform = "rotate(-900deg)";
n.style.left = "0px";
n.style.top = "0px";
}
n.addEventListener("webkitTransitionEnd",round2,false);
}
