如何利用jQuery+CSS呈現Windows Phone Mango的Metro翻轉特效
會寫這篇是因為感覺這效果的應用還蠻廣的,而且視覺效果也不錯。起初看到把它應用在網站上的是阿湯,他的布景直覺上看上去就是很清爽簡單,加上右邊的側邊攔把它融合成一塊,大大減少了不必要的空間,還有就是綠色工廠也用了相同的效果。還有看過把這個效果直接當作是網站的版型,所以整個網頁就沒有用到很長的捲軸。
於是就開始分析這個效果的寫法,然後在大陸某網站找到這個原始檔,不過我不清楚這個的原始作者是誰,所以如果知道再加上來囉。
效果

如何利用jQuery+CSS呈現Windows Phone的翻轉特效
第1步 首先我們先來看看的翻轉特效背後的祕密吧,這是純HTML,之後我們還要再用CSS來給他裝飾。
<div class="header"> <div class="control"> <img class="button middle" src="圖片Control" /> </div> </div> <div class="navBar"> <div class="item"> <div class="card middle"><img src="圖片First" tww="First" /></div> <div class="card middle last"><img src="圖片Second" tww="Second" /></div> <div class="card middle"><img src="圖片Third" tww="Third" /></div> <div class="card middle last"><img src="圖片Forth" tww="Forth" /></div> <div class="card middle long"><img src="圖片Long" tww="Long"/></div> <div class="card middle"><img src="圖片Bottom First" tww="Bottomst" /></div> <div class="card middle last"><img src="圖片Bottom Second" tww="Bottomnd" /></div> <div class="clear"></div> </div> </div> <div class="BarContent skew"> <div id="First" class="hideit" style="display: none;"> (區域程式碼First...) </div> <div id="Second" class="hideit" style="display: none;"> (區域程式碼Second...) </div> <div id="Third" class="hideit" style="display: none;"> (區域程式碼Third...) </div> <div id="Forth" class="hideit" style="display: none;"> (區域程式碼Forth...) </div> <div id="Long" class="hideit" style="display: none;"> (區域程式碼Long...) </div> <div id="Bottomst" class="hideit" style="display: none;"> (區域程式碼Bottom First...) </div> <div id="Bottomnd" class="hideit" style="display: none;"> (區域程式碼Bottom Second...) </div> <div class="fixed"></div> </div>
第2步 接下來我們用CSS來裝飾他一下,然後加入翻轉效果,整個翻轉的效果,主要是用CSS的transform,再搭配transition的時間延遲、rotate的傾斜角度計算所做出來的。
/** Mango **/
.fixed {
clear: both;
}
.navBar{
width:250px;
overflow: hidden;
margin: 0 auto;}
.item{
width:250px;
display:block;
margin: 0 auto;
background:rgb(0, 204, 255);
}
.BarContent {
width:250px;
-webkit-transition:0.3s ease-in-out;
-moz-transition:0.3s ease-in-out;
-o-transition:0.3s ease-in-out;
margin: 0 auto;
}
.skew {
-webkit-transform-origin:0 0;
-o-transform-origin:0 0;
-moz-transform-origin:0 0;
-ms-transform-origin:0 0;
transform-origin:0 0;
-webkit-transform:scale(0.7) translate(-135px,0px) rotateY(90deg);
-o-transform:scale(0.7) translate(-135px,0px) rotate(30deg);
-moz-transform:scale(0.7) translate(-135px,0px) rotate(30deg);
-ms-transform:scale(0.7) translate(-135px,0px) rotate(30deg);
}
.control {
width:250px;
height:50px;
margin: 2px auto;
background:rgb(0, 204, 255);
}
.button {
width:250px;
height:50px;
cursor:pointer; }
.middle {
margin: 0 auto;
cursor:pointer;
display:block;
}
.card {
float:left;
display:block;
width:123px;
height:123px;
-webkit-transition:0.09s ease-in-out;
-moz-transition:0.09s ease-in-out;
-o-transition:0.09s ease-in-out;
cursor:pointer;
margin:2px 4px 2px 0;
background:rgb(0, 204, 255);
}
.last {
margin-right:0;
}
.long {
width:250px;
margin-right:0;
}
.card.cover {
-webkit-transform-origin:0 0;
-o-transform-origin:0 0;
-moz-transform-origin:0 0;
-ms-transform-origin:0 0;
transform-origin:0 0;
-webkit-transform:scale(1.3) translate(-35px,-30px) rotateY(90deg) skew(0deg,-30deg);
-o-transform:scale(1.1) translate(-35px,-30px) skew(0deg,-30deg);
-moz-transform:scale(1.1) translate(-35px,-30px) skew(0deg,-30deg);
-ms-transform:scale(1.1) translate(-35px,-30px) skew(0deg,-30deg);
}
第3步 整個翻轉的效果已經做完了,接下來我們要利用jQuery來控制翻轉的觸發時間,再加上一些淡入(fadeIn)、淡出(fadeOut)的特效,如果你不喜歡可以把他移除。
/* Mango */
$(function(){
var card = $(".card");
$(".card").click(function(){
$(this).find("img").attr("tww");
$(this).fadeTo(1500,0);
$(".item").fadeOut(500,skew);
$(".BarContent").show();
$(".BarContent").fadeIn(1450);
$(".hideit").hide();
function skew(){
$(".BarContent").removeClass("skew");
$(".BarContent").fadeIn(1300);
}
var list = $(this).siblings(".card");
var i = 0;
(function cover() {
list.eq(i ).addClass("cover").fadeTo(90,0,cover);
})();
var title = $(this).find("img").attr("tww");
$("#" title).fadeIn(1300);
})
$(".header .control").click(function(){
$(".BarContent").addClass("skew");
$(".BarContent").fadeOut(900);
$(".item").fadeIn(1500);
$(".BarContent").hide();
var j = 0;
(function cover2() {
card.eq(j ).removeClass("cover").fadeTo(90,1,cover2);
})();
})
})
範例預覽
範例下載
終於找到這效果了XD