jquery實(shí)現(xiàn)百葉窗效果
今天試著用jq寫了下圖片百葉窗效果,就是鼠標(biāo)經(jīng)過那張圖,那張圖顯示,其他圖片縮小~
最開始看效果的時(shí)候覺得好復(fù)雜,以為是寬度的變化寫的動(dòng)畫,但是后來細(xì)想,如果是寬度變化,那么圖片變窄的時(shí)候肯定會(huì)失真了,后來經(jīng)過學(xué)習(xí),發(fā)現(xiàn)原來原理很簡(jiǎn)單:
基本原理就是,將圖片都絕對(duì)定位到盒子里,然后分別定位,平分整個(gè)盒子,圖片就會(huì)顯示一種層疊效果了(本案例是通過left值控制位置);然后通過jq控制,當(dāng)鼠標(biāo)經(jīng)過某張圖片的時(shí)候這張圖片完全顯示(即left值進(jìn)行變化),其他圖片的left值也進(jìn)行相應(yīng)的改變。
文字描述起來很難懂的樣子,先上html和css布局效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
</body>
</html>
布局很簡(jiǎn)單,接下來就是jq控制各個(gè)圖片相對(duì)位置的變化了。
起始位置:五張圖片的 left 值在css已經(jīng)寫好,就是平分了整個(gè)盒子的寬度;
鼠標(biāo)經(jīng)過時(shí)候:經(jīng)過的那張圖片完全顯示,即占據(jù)寬度280px(圖片的寬度是280px),剩余的寬度是 (盒子寬度-280px)/剩余的圖片數(shù)量,根據(jù)所得值確定各個(gè)圖片的終止位置,left值;
感覺自己說的好復(fù)雜,先看下鼠標(biāo)講過某張圖的時(shí)候的動(dòng)畫效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript">
var lefts;
var idx;
$("img").each(function(){
$(this).mouseenter(function(e) {
idx = $(this).index();
lefts = idx * 35;
//當(dāng)前圖片的變化
$(this).stop(true).animate({"left" : idx * 35}, 1000);
});
})
當(dāng)前圖片能夠愉快的玩耍了,接下來的重點(diǎn)就是其余圖片怎么運(yùn)動(dòng)。
此時(shí),我們可以把剩余的圖片分成左右兩部分,用jq 的 ":lt()" 和 ":gt()"方法寫出剩余部分的效果。這里有一個(gè)小小的坑,自己也是繞了半天,最后還是別人提醒的才繞出來。
以當(dāng)前圖片左側(cè)動(dòng)畫效果為例,最開始我是這么寫的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript">
var lefts;
var idx;
$("img").each(function(){
$(this).mouseenter(function(e) {
idx = $(this).index();
lefts = idx * 35;
//當(dāng)前圖片的變化
$(this).stop(true).animate({"left" : idx * 35}, 1000);
$(“img:lt( idx )“).each(function(){
$(this).stop(true).animate({"left" : ($(this).index()) * 35}, 1000)
})
});
})
看上去沒有什么錯(cuò)誤,見證奇跡~~~奇跡~~跡~~~然而并沒有什么奇跡,原因就是 $(“img:lt( idx )“) 這種寫法,里面的idx已經(jīng)不是變量了,所以無法獲取當(dāng)前的 idx 值,我們可以在外面定義一個(gè)變量,同時(shí)用 + 連接 lt 和變量 idx,再把變量引入進(jìn)去即可。
因此更改后如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript">
var lefts;
var idx;
var imgL;
$("img").each(function(){
$(this).mouseenter(function(e) {
idx = $(this).index();
imgL = "img:lt(" + idx + ")"
lefts = idx * 35;
//當(dāng)前圖片的變化
$(this).stop(true).animate({"left" : idx * 35}, 1000);
$(imgL).each(function(){
$(this).stop(true).animate({"left" : ($(this).index()) * 35}, 1000)
})
});
})
這樣奇跡就出現(xiàn)了~~ 同樣的道理,右側(cè)也是同樣的方法。
最終代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<style type="text/css">
div{
width: 420px;
height: 186px;
border: 2px solid #ccc;
overflow: hidden;
position: relative;
margin: 100px auto;
}
img{
width:280px;
height:186px;
border: none;
display: block;
position: absolute;
top: 0;
}
img:nth-of-type(1){
left: 0;
}
img:nth-of-type(2){
left: 84px;
}
img:nth-of-type(3){
left: 168px;
}
img:nth-of-type(4){
left: 252px;
}
img:nth-of-type(5){
left: 336px;
}
</style>
<div class="box">
<img src="http://tupian.enterdesk.com/2013/mxy/10/12/1/17.jpg">
<img src="http://tupian.enterdesk.com/2013/mxy/07/0715/1/7.jpg">
<img src="http://src.house.sina.com.cn/imp/imp/deal/5c/fa/e/afb00d1b581922fa567f9d65bfd_p1_mk1.jpg">
<img src="http://www.wallcoo.com/nature/wild_field_01/wallpapers/1440x900/3787717_Wild_field_v1224236762.jpg">
<img src="http://pic31.nipic.com/20130628/10700765_164502542117_2.jpg">
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript">
//精簡(jiǎn)之后的方法
var lefts;
var idx;
var imgL;
var imgR;
$("img").each(function(){
$(this).mouseenter(function(e) {
idx = $(this).index();
imgL = "img:lt(" + idx + ")" //獲取當(dāng)前左側(cè)的所有圖片,如果直接用 $("img:lt(idx)"),idx會(huì)被當(dāng)做字符串,獲取不到對(duì)應(yīng)的值
imgR = "img:gt(" + idx + ")" //獲取當(dāng)前右側(cè)的所有圖片
lefts = idx * 35;
//當(dāng)前圖片的變化
$(this).stop(true).animate({"left" : idx * 35}, 1000);
//左側(cè)圖片的變化
$(imgL).each(function(){
$(this).stop(true).animate({"left" : ($(this).index()) * 35}, 1000)
})
//右側(cè)圖片的變化
$(imgR).each(function(){
$(this).stop(true).animate({"left" : ($(this).index()+7) * 35}, 1000)
})
});
})
$("img").each(function(){
$(this).mouseleave(function(){
$("img").each(function(){
$(this).stop(true).animate({"left" : ($(this).index())*84}, 1000);
})
});
})
</script>
</body>
</html>
鼠標(biāo)移出效果,就是恢復(fù)到最開始的狀態(tài),就不在敘述了。
方法可能不是最簡(jiǎn)單的方法,說的也可能不甚詳盡,希望大神多多指教,我也多多學(xué)習(xí)~~~
ps: 圖片不知道怎么加上來,稍后看下再改吧。歡迎各位加入交流學(xué)習(xí)前端群 466039913
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
jQuery網(wǎng)頁(yè)選項(xiàng)卡插件rTabs用法實(shí)例分析
這篇文章主要介紹了jQuery網(wǎng)頁(yè)選項(xiàng)卡插件rTabs用法,較為詳細(xì)的分析了jquery選項(xiàng)卡插件rTabs的定義、實(shí)現(xiàn)及使用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
基于Jquery+Ajax+Json的高效分頁(yè)實(shí)現(xiàn)代碼
分頁(yè)我相信大家存儲(chǔ)過程分頁(yè)已經(jīng)很熟悉了,ajax更是耳熟能詳了,更別說我們的json,等等2011-10-10
IE下使用jQuery重置iframe地址時(shí)內(nèi)存泄露問題解決辦法
這篇文章主要介紹了IE下使用jQuery重置iframe地址時(shí)內(nèi)存泄露問題解決辦法,需要的朋友可以參考下2015-02-02
基于jquery的一個(gè)簡(jiǎn)單的腳本驗(yàn)證插件
基于jquery的一個(gè)簡(jiǎn)單的腳本驗(yàn)證插件,希望能對(duì)大家有所幫助,有demo2010-04-04
jQuery+css實(shí)現(xiàn)的藍(lán)色水平二級(jí)導(dǎo)航菜單效果代碼
這篇文章主要介紹了jQuery+css實(shí)現(xiàn)的藍(lán)色水平二級(jí)導(dǎo)航菜單效果代碼,通過簡(jiǎn)單的jQuery操作鼠標(biāo)事件實(shí)現(xiàn)頁(yè)面元素樣式的切換功能,非常美觀大方,需要的朋友可以參考下2015-09-09
jQuery中hover方法搭配css的hover選擇器,實(shí)現(xiàn)選中元素突出顯示方法
下面小編就為大家?guī)硪黄猨Query中hover方法搭配css的hover選擇器,實(shí)現(xiàn)選中元素突出顯示方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05

