這個idea是我拷貝別人的,但代碼是我自已一點點敲出來的,首先向這位前輩致敬,我用的是chrome4九、firefox4三、IE9,jquery3.0。言辭請結合代碼,避免斷章取意。javascript
用到的圖片資源在個人百度雲盤裏
http://yun.baidu.com/share/link?shareid=710445916&uk=1302053889css
用來設置元素的層,值越大層次越高,當元素髮生重疊時,值較大的顯示在前面,值較小的顯示在後面,值相同時,在DOM樹中靠後位置的元素顯示在前面。html
z-index樣式不會改變元素在DOM樹中的位置java
注意這個css樣式存在瀏覽器兼容問題,當值爲負數的時候,不觸發綁定在元素上的事情,也不傳播事件。只是由於在firefox43多點了幾下…jquery
用來處理子元素超出父元素邊界的狀況,值爲hidden時,隱藏超出的部分。chrome
用來設置元素定位方式,默認值爲static,當該值最終不是static時,top、left的值纔有效,同時成爲子元素的定位點。數組
當值爲fixed的時,相對於瀏覽器視口的左頂點定位,不隨滾動條位置的變化而變化位置。瀏覽器
body、html元素的position的值都是static,不能成爲子元素的定位點。因此body子元素的定位在body元素position使用默認值的狀況下,是相對於瀏覽器顯示文檔的左頂點,由於一般不會對body設置什麼邊框、外邊距,因此看不出什麼區別。dom
(1)$.函數名,列如$.random,向全局添加ide
(2)$.fn.函數名,列如$.fn.centerPos,向JQuery對象中添加
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset=utf-8>
<script type="text/javascript" src="debug-jquery-3.0.0.js"></script>
<script type="text/javascript" src="base.js" ></script>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>爲了生活</title>
<style type="text/css">
*
{
margin:0;
padding:0;
}
body
{
background:url("bg.gif");
position:absolute;
}
#container
{
width:902px;
height:470px;
margin:0 auto;
position:fixed;
border:2px #fff solid;
box-shadow:1px 1px 3px #222;
}
#area1
{
width:449px;
height:334px;
}
#area2
{
width:451px;
height:165px;
margin-left:1px;
margin-top:1px;
}
#area3
{
width:451px;
height:167px;
margin-left:1px;
margin-top:1px;
}
#area4
{
width:192px;
height:135px;
clear:left;
margin-top:1px;
}
#area5
{
width:708px;
height:135px;
margin-top:1px;
}
#container div
{
float:left;
position:relative;
overflow:hidden;
}
#container div img
{
position:absolute;
//是z-index生效的前提之一
}
</style>
</head
<body>
<button accesskey="z" onclick="document.location.reload()">刷新</button>
<!—Alt+z可刷新頁面-->
<div id="container">
<!—圖片的z-index樣式在base.js中設置-->
<div id="area1">
<img src="area1/1.jpg" />
<img src="area1/2.jpg" />
<img src="area1/3.jpg" />
</div>
<div id="area2">
<img src="area2/1.jpg" />
<img src="area2/2.jpg" />
<img src="area2/3.jpg" />
</div>
<div id="area3">
<img src="area3/1.jpg" />
<img src="area3/2.jpg" />
<img src="area3/3.jpg" />
</div>
<div id="area4">
<img src="area4/1.jpg" />
<img src="area4/2.jpg" />
<img src="area4/3.jpg" />
</div>
<div id="area5">
<img src="area5/1.jpg" />
<img src="area5/2.jpg" />
<img src="area5/3.jpg" />
</div>
</div>
</body>
</html>
$(function()
{
//$開頭的是JQuery對象
var $container = $("#container"),
$areas = $container.find("div"),
maxZindex = 9999;
$areas.bind("mouseenter",function()
{
var index = $(this).data("index"),//div中層次最高的圖片索引
$imgs = $(this).find("img"),
length = $imgs.length,
$img = $imgs.eq(index),
random = $.random(0,7),
// random是自定義的方法
css,
nextImg;
if(index == length-1)
{
nextImg = $imgs.eq(0)[0];
}
else
{
nextImg = $imgs.eq(index+1)[0];
}
nextImg.style.zIndex = maxZindex-1;
//switch不支持隱式轉換,0和」0」是不匹配的
switch(random)
{
case 0:css = {top:"-"+$img.height()}; break;
case 1:css = {left:"-"+$img.width()};break;
case 2:css = {top:$img.height()};break;
case 3:css = {left:$img.width()};break;
case 4:css = {top:"-"+$img.height(),opacity:0};break;
case 5:css = {left:"-"+$img.width(),opacity:0};break;
case 6:css = {top:$img.height(),opacity:0};break;
case 7:css = {left:$img.width(),opacity:0};break;
}
$img.animate(css,"swing",function()
{
this.style.top = "0px";
this.style.left = "0px";
this.style.zIndex = 1;
nextImg.style.zIndex = maxZindex;
if(random>3)
{
$(this).css("opacity",1);
}
});
if(index == $imgs.length-1) index=-1;
$(this).data("index",++index);
}).each(function()
{
$(this).data("index",0);//層次最高的圖片在DOM樹中的索引
var $imgs = $(this).find("img");
$imgs.each(function(index)
{
this.style.zIndex = maxZindex-index;
})
}).bind("click",function()
{
$areas.trigger("mouseenter");
})
$container.centerPos();//元素相對於瀏覽器視口水平垂直居中
window.onresize = function()
{
//隨着瀏覽器視口大小的變化動態的改變元素的位置
$container.centerPos();
}
})
//產生大於等於min、小於等於max的值,值不在filter一維數組中
$.random = function(min,max,filter)
{
var i,
n = Math.floor(Math.random()*(max-min+1)+min);
if(filter != undefined && filter.constructor == Array)
{
if(filter.constructor == Array)
{
for(i=filter.length-1;i>-1;i--)
{
if(n == filter[i])
{
n = Math.floor(Math.random()*(max-min+1)+min)
i = filter.length;
}
}
}
else
{
window.console.warn("random第三個參數應爲一維數組");
}
}
return n;
}
//top、lef的值根據父元素的寬和高計算,也就是父元素是子元素的定位點
$.fn.centerPos = function()
{
var parent;
this.each(function(index)
{
parent = this.parentNode;
if(parent == document.body)
{
parent = window;
}
var position = $(this).css("position");
if(position == "fixed" || position=="absolute")
{
$(this).css("left",($(parent).width()-this.offsetWidth)/2+"px")
.css("top",($(parent).height()-this.offsetHeight)/2+"px");
}
else
{
window.console.error("沒有設置有效的position值");
}
})
return this;
}