jquery動(dòng)畫2.元素坐標(biāo)動(dòng)畫效果(創(chuàng)建一個(gè)圖片走廊)
更新時(shí)間:2012年08月24日 10:57:48 作者:
今天文章的內(nèi)容是關(guān)于使用jquery的animate方法,修改html元素的position屬性,創(chuàng)建一個(gè)圖片走廊
效果預(yù)覽圖片:

大家可以下載demo看完整效果,下面介紹制作過程。
1.首先創(chuàng)建一個(gè)html頁面,html結(jié)構(gòu)如下:
<div id="slider">
<div id="viewer">
<img id="image1" src="img/amstrad.jpg" alt="Amstrad CPC 472" />
<img id="image2" src="img/atari.jpg" alt="Atari TT030" />
<img id="image3" src="img/commodore16.jpg" alt="Commodore 64" />
<img id="image4" src="img/commodore128.jpg" alt="Commodore 128" />
<img id="image5" src="img/spectrum.jpg" alt="Sinclair ZX Spectrum +2" />
</div>
<ul id="ui">
<li class="hidden" id="prev"><a href="" title="Previous">«</a></li>
<li><a href="#image1" title="Image 1" class="active">Image 1</a></li>
<li><a href="#image2" title="Image 2">Image 2</a></li>
<li><a href="#image3" title="Image 3">Image 3</a></li>
<li><a href="#image4" title="Image 4">Image 4</a></li>
<li><a href="#image5" title="Image 5">Image 5</a></li>
<li class="hidden" id="next"><a href="" title="Next">»</a></li>
</ul>
</div>
大家一看就明白,viewer包含了幾張圖片,ul對(duì)象里面包含了‘上一條'、‘下一條'和各個(gè)圖片對(duì)應(yīng)的導(dǎo)航。
2.接下來需要為這些html元素設(shè)置css樣式,css我就不多說了,就是給viewer、圖片等元素加樣式,viewer同時(shí)只能顯示一張圖片:
#slider
{
width: 500px;
position: relative;
}
#viewer
{
width: 400px;
height: 300px;
margin: auto;
position: relative;
overflow: hidden;
}
#slider ul
{
width: 350px;
margin: 0 auto;
padding: 0;
list-style-type: none;
}
#slider ul:after
{
content: ".";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
#slider li
{
margin-right: 10px;
float: left;
}
#prev, #next
{
position: absolute;
top: 175px;
}
#prev
{
left: 20px;
}
#next
{
position: absolute;
right: 10px;
}
.hidden
{
display: none;
}
#slide
{
width: 2000px;
height: 300px;
position: absolute;
top: 0;
left: 0;
}
#slide img
{
float: left;
width: 400px;
height: 300px;
}
#title
{
margin: 0;
text-align: center;
}
3.為頁面添加jquery和jquery.easing.1.3.js的引用。然后就是我們這篇的重頭了,為導(dǎo)航編寫相應(yīng)的js事件。
首先我們需要?jiǎng)?chuàng)建一個(gè)新的div來包裝5張圖片。
$('#viewer').wrapInner('<div id="slide"></div>');
接下來我們使用jquery的selector找到slider,slide,prev,next等對(duì)象,把他們存到相應(yīng)的js變量中。
var container = $('#slider'),
prev = container.find('#prev'),
prevChild = prev.find('a'),
next = container.find('#next').removeClass('hidden'),
nextChild = next.find('a'),
slide = container.find('#slide')
創(chuàng)建兩個(gè)新的js變量,key保存當(dāng)前活動(dòng)圖片id,details保存所有圖片各自的position和title信息。
key = "image1",
details = {
image1: {
position: 0,
title: slide.children().eq(0).attr('alt')
},
image2: {
position: -400,
title: slide.children().eq(1).attr('alt')
},
image3: {
position: -800,
title: slide.children().eq(2).attr('alt')
},
image4: {
position: -1200,
title: slide.children().eq(3).attr('alt')
},
image5: {
position: -1600,
title: slide.children().eq(4).attr('alt')
}
};
為了顯示圖片標(biāo)題,我們需要添加一個(gè)h2標(biāo)題到頁面。
$('<h2>', {
id: 'title',
text: details[key].title
}).prependTo('#slider');
上述工作完成后,就可以開始為a標(biāo)簽添加click事件了,這里的a標(biāo)簽分兩種,一種是‘上一條'和‘下一條',另外一種是各圖片對(duì)應(yīng)的導(dǎo)航。我們需要分別為他們添加相應(yīng)的click事件。但是他們都會(huì)使用到一個(gè)相同的回調(diào)函數(shù),我們先完成回調(diào)函數(shù)的編寫。代碼思路我就直接以注釋的方式完成。
function postAnim(dir) {
//首先我們獲取到當(dāng)前活動(dòng)圖片的id,只包含數(shù)字部分
var keyMath = parseInt(key.match(/\d+$/));
//slide的left小于0,也就是說當(dāng)前活動(dòng)圖片不是圖片1,‘上一條'導(dǎo)航顯示;否則‘上一條'導(dǎo)航消失
(parseInt(slide.css('left')) < 0) ? prev.show() : prev.hide();
//slide的left等于-1600,也就是說當(dāng)前活動(dòng)圖片是第五章,‘下一條'導(dǎo)航消失,否則‘下一條'導(dǎo)航顯示
(parseInt(slide.css('left')) === -1600) ? next.hide() : next.show();
//if條件語句當(dāng)使用‘上一條'和‘下一條'導(dǎo)航時(shí)才有意義。實(shí)現(xiàn)的功能就是點(diǎn)‘上一條'是key減一,點(diǎn)‘下一條'key加1
if (dir) {
var titleKey = (dir === 'back') ? keyMath - 1 : keyMath + 1;
key = 'image' + titleKey;
}
//重新設(shè)置h2標(biāo)題
container.find('#title').text(details[key].title);
//重新設(shè)置當(dāng)前哪個(gè)圖片為活動(dòng)狀態(tài)
container.find('.active').removeClass('active');
container.find('a[href=#' + key + ']').addClass('active');
}
接下來我們完成‘上一條'和‘下一條'導(dǎo)航的功能。
nextChild.add(prevChild).click(function (e) {
//阻止默認(rèn)事件,否則動(dòng)畫效果就沒有了
e.preventDefault();
var arrow = $(this).parent();
//當(dāng)前slide沒有動(dòng)畫時(shí),我們才添加新的動(dòng)畫效果
if (!slide.is(':animated')) {
slide.animate({
left: (arrow.attr('id') === 'prev') ? '+=400' : '-=400'
}, 'slow', 'easeOutBack', function () {
(arrow.attr("id") === "prev") ? postAnim("back") : postAnim("forward");
});
}
});
最后是圖片對(duì)應(yīng)的各自導(dǎo)航的功能實(shí)現(xiàn)。
$('#ui li a').not(prevChild).not(nextChild).click(function (e) {
//阻止默認(rèn)事件
e.preventDefault();
//獲取當(dāng)前活動(dòng)圖片id
key = $(this).attr('href').split('#')[1];
//設(shè)置動(dòng)畫效果
slide.animate({
left: details[key].position
}, 'slow', 'easeOutBack', postAnim);
});
本課的內(nèi)容完畢了,大家可以下載demo,查看功能具體是如下實(shí)現(xiàn)的。
demo下載地址:jQuery.animation.position

大家可以下載demo看完整效果,下面介紹制作過程。
1.首先創(chuàng)建一個(gè)html頁面,html結(jié)構(gòu)如下:
復(fù)制代碼 代碼如下:
<div id="slider">
<div id="viewer">
<img id="image1" src="img/amstrad.jpg" alt="Amstrad CPC 472" />
<img id="image2" src="img/atari.jpg" alt="Atari TT030" />
<img id="image3" src="img/commodore16.jpg" alt="Commodore 64" />
<img id="image4" src="img/commodore128.jpg" alt="Commodore 128" />
<img id="image5" src="img/spectrum.jpg" alt="Sinclair ZX Spectrum +2" />
</div>
<ul id="ui">
<li class="hidden" id="prev"><a href="" title="Previous">«</a></li>
<li><a href="#image1" title="Image 1" class="active">Image 1</a></li>
<li><a href="#image2" title="Image 2">Image 2</a></li>
<li><a href="#image3" title="Image 3">Image 3</a></li>
<li><a href="#image4" title="Image 4">Image 4</a></li>
<li><a href="#image5" title="Image 5">Image 5</a></li>
<li class="hidden" id="next"><a href="" title="Next">»</a></li>
</ul>
</div>
大家一看就明白,viewer包含了幾張圖片,ul對(duì)象里面包含了‘上一條'、‘下一條'和各個(gè)圖片對(duì)應(yīng)的導(dǎo)航。
2.接下來需要為這些html元素設(shè)置css樣式,css我就不多說了,就是給viewer、圖片等元素加樣式,viewer同時(shí)只能顯示一張圖片:
復(fù)制代碼 代碼如下:
#slider
{
width: 500px;
position: relative;
}
#viewer
{
width: 400px;
height: 300px;
margin: auto;
position: relative;
overflow: hidden;
}
#slider ul
{
width: 350px;
margin: 0 auto;
padding: 0;
list-style-type: none;
}
#slider ul:after
{
content: ".";
visibility: hidden;
display: block;
height: 0;
clear: both;
}
#slider li
{
margin-right: 10px;
float: left;
}
#prev, #next
{
position: absolute;
top: 175px;
}
#prev
{
left: 20px;
}
#next
{
position: absolute;
right: 10px;
}
.hidden
{
display: none;
}
#slide
{
width: 2000px;
height: 300px;
position: absolute;
top: 0;
left: 0;
}
#slide img
{
float: left;
width: 400px;
height: 300px;
}
#title
{
margin: 0;
text-align: center;
}
3.為頁面添加jquery和jquery.easing.1.3.js的引用。然后就是我們這篇的重頭了,為導(dǎo)航編寫相應(yīng)的js事件。
首先我們需要?jiǎng)?chuàng)建一個(gè)新的div來包裝5張圖片。
復(fù)制代碼 代碼如下:
$('#viewer').wrapInner('<div id="slide"></div>');
接下來我們使用jquery的selector找到slider,slide,prev,next等對(duì)象,把他們存到相應(yīng)的js變量中。
復(fù)制代碼 代碼如下:
var container = $('#slider'),
prev = container.find('#prev'),
prevChild = prev.find('a'),
next = container.find('#next').removeClass('hidden'),
nextChild = next.find('a'),
slide = container.find('#slide')
創(chuàng)建兩個(gè)新的js變量,key保存當(dāng)前活動(dòng)圖片id,details保存所有圖片各自的position和title信息。
復(fù)制代碼 代碼如下:
key = "image1",
details = {
image1: {
position: 0,
title: slide.children().eq(0).attr('alt')
},
image2: {
position: -400,
title: slide.children().eq(1).attr('alt')
},
image3: {
position: -800,
title: slide.children().eq(2).attr('alt')
},
image4: {
position: -1200,
title: slide.children().eq(3).attr('alt')
},
image5: {
position: -1600,
title: slide.children().eq(4).attr('alt')
}
};
為了顯示圖片標(biāo)題,我們需要添加一個(gè)h2標(biāo)題到頁面。
復(fù)制代碼 代碼如下:
$('<h2>', {
id: 'title',
text: details[key].title
}).prependTo('#slider');
上述工作完成后,就可以開始為a標(biāo)簽添加click事件了,這里的a標(biāo)簽分兩種,一種是‘上一條'和‘下一條',另外一種是各圖片對(duì)應(yīng)的導(dǎo)航。我們需要分別為他們添加相應(yīng)的click事件。但是他們都會(huì)使用到一個(gè)相同的回調(diào)函數(shù),我們先完成回調(diào)函數(shù)的編寫。代碼思路我就直接以注釋的方式完成。
復(fù)制代碼 代碼如下:
function postAnim(dir) {
//首先我們獲取到當(dāng)前活動(dòng)圖片的id,只包含數(shù)字部分
var keyMath = parseInt(key.match(/\d+$/));
//slide的left小于0,也就是說當(dāng)前活動(dòng)圖片不是圖片1,‘上一條'導(dǎo)航顯示;否則‘上一條'導(dǎo)航消失
(parseInt(slide.css('left')) < 0) ? prev.show() : prev.hide();
//slide的left等于-1600,也就是說當(dāng)前活動(dòng)圖片是第五章,‘下一條'導(dǎo)航消失,否則‘下一條'導(dǎo)航顯示
(parseInt(slide.css('left')) === -1600) ? next.hide() : next.show();
//if條件語句當(dāng)使用‘上一條'和‘下一條'導(dǎo)航時(shí)才有意義。實(shí)現(xiàn)的功能就是點(diǎn)‘上一條'是key減一,點(diǎn)‘下一條'key加1
if (dir) {
var titleKey = (dir === 'back') ? keyMath - 1 : keyMath + 1;
key = 'image' + titleKey;
}
//重新設(shè)置h2標(biāo)題
container.find('#title').text(details[key].title);
//重新設(shè)置當(dāng)前哪個(gè)圖片為活動(dòng)狀態(tài)
container.find('.active').removeClass('active');
container.find('a[href=#' + key + ']').addClass('active');
}
接下來我們完成‘上一條'和‘下一條'導(dǎo)航的功能。
復(fù)制代碼 代碼如下:
nextChild.add(prevChild).click(function (e) {
//阻止默認(rèn)事件,否則動(dòng)畫效果就沒有了
e.preventDefault();
var arrow = $(this).parent();
//當(dāng)前slide沒有動(dòng)畫時(shí),我們才添加新的動(dòng)畫效果
if (!slide.is(':animated')) {
slide.animate({
left: (arrow.attr('id') === 'prev') ? '+=400' : '-=400'
}, 'slow', 'easeOutBack', function () {
(arrow.attr("id") === "prev") ? postAnim("back") : postAnim("forward");
});
}
});
最后是圖片對(duì)應(yīng)的各自導(dǎo)航的功能實(shí)現(xiàn)。
復(fù)制代碼 代碼如下:
$('#ui li a').not(prevChild).not(nextChild).click(function (e) {
//阻止默認(rèn)事件
e.preventDefault();
//獲取當(dāng)前活動(dòng)圖片id
key = $(this).attr('href').split('#')[1];
//設(shè)置動(dòng)畫效果
slide.animate({
left: details[key].position
}, 'slow', 'easeOutBack', postAnim);
});
本課的內(nèi)容完畢了,大家可以下載demo,查看功能具體是如下實(shí)現(xiàn)的。
demo下載地址:jQuery.animation.position
相關(guān)文章
jquery插件實(shí)現(xiàn)鼠標(biāo)經(jīng)過圖片右側(cè)顯示大圖的效果(類似淘寶)
分享一個(gè)jquery插件:實(shí)現(xiàn)類似淘寶上鼠標(biāo)經(jīng)過圖片右側(cè)顯示大圖的效果,感興趣的朋友可以研究下,或許對(duì)你學(xué)習(xí)jquery有所幫助,千萬不要錯(cuò)過啊2013-02-02
jQuery中json對(duì)象的復(fù)制方式介紹(數(shù)組及對(duì)象)
本文為大家介紹下jQuery中json對(duì)象的復(fù)制:jQuery自帶的$.map方式、深復(fù)制與淺復(fù)制等等,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-06-06
jquery實(shí)現(xiàn)可旋轉(zhuǎn)可拖拽的文字效果代碼
這篇文章主要介紹了jquery實(shí)現(xiàn)可旋轉(zhuǎn)可拖拽的文字效果代碼,涉及jquery響應(yīng)鼠標(biāo)事件動(dòng)態(tài)操作頁面元素樣式的相關(guān)技巧,需要的朋友可以參考下2016-01-01
jQuery實(shí)現(xiàn)淡入淡出二級(jí)下拉導(dǎo)航菜單的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)淡入淡出二級(jí)下拉導(dǎo)航菜單的方法,涉及jquery簡(jiǎn)單操作頁面元素展開與隱藏的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08
jQuery UI AutoComplete 自動(dòng)完成使用小記
jQuery UI AutoComplete 自動(dòng)完成使用小記,使用jquery的朋友實(shí)現(xiàn)搜索自動(dòng)完成等功能的朋友可以參考下。2010-08-08
jQuery實(shí)現(xiàn)無限往下滾動(dòng)效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)無限往下滾動(dòng)效果代碼,涉及jQuery基于ajax交互操作數(shù)據(jù)庫數(shù)據(jù)及頁面元素動(dòng)態(tài)變換的相關(guān)技巧,需要的朋友可以參考下2016-04-04
jquery checkbox全選、取消全選實(shí)現(xiàn)代碼
jquery實(shí)現(xiàn)checkbox全選、取消全選的代碼。2010-03-03

