jquery動(dòng)畫3.創(chuàng)建一個(gè)帶遮罩效果的圖片走廊
更新時(shí)間:2012年08月24日 11:11:22 作者:
今天我們要完成的是一個(gè)帶有遮罩效果(補(bǔ)間動(dòng)畫)的圖片走廊jquery插件:jquery.tranzify.js
復(fù)制代碼 代碼如下:
#frame
{
position: relative;
width: 700px;
height: 400px;
overflow: hidden;
z-index: 0;
}
#frame img
{
width: 700px;
height: 400px;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
#frame img.visible
{
z-index: 2;
}
#frame a
{
display: block;
width: 50%;
height: 100%;
position: absolute;
top: 0;
z-index: 10;
color: transparent;
background-image: url(transparent.gif);
filter: alpha(opacity = 0);
text-align: center;
text-decoration: none;
font: 90px "Palatino Linotype" , "Book Antiqua" , Palatino, serif;
line-height: 400%;
}
#frame a:hover
{
color: #fff;
text-shadow: 0 0 5px #000;
filter: alpha(opacity = 100);
filter: Shadow(Color=#000, Direction=0);
}
#frame a:focus
{
outline: none;
}
#prev
{
left: 0;
}
#next
{
right: 0;
}
#overlay
{
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 3;
}
#overlay div
{
position: absolute;
}
接下來介紹jquery.tranzify.js插件如何制作,該部分以講解為主,插件的詳細(xì)代碼和如何使用,還是參照demo。
第一步是搭建插件的骨架:
復(fù)制代碼 代碼如下:
(function ($) {
$.tranzify = {
defaults: { //默認(rèn)配置
transitionWidth: 40, //遮罩層每一小片段的寬度
transitionHeight: '100%', //遮罩層每一小片段高度
containerID: 'overlay', //遮罩層id
transitionType: 'venetian',//默認(rèn)遮罩層動(dòng)畫效果
prevID: 'prev',//上一條導(dǎo)航ID
nextID: 'next',//下一條導(dǎo)航ID
visibleClass: 'visible' //可見性class
},
//插件初始化操作
createUI: function (config) {
},
//創(chuàng)建遮罩層
createOverlay: function (config) {
},
//運(yùn)行動(dòng)畫效果
runTransition: function (config) {
}
};
$.fn.extend({
//創(chuàng)建插件函數(shù)
tranzify: function (options) {return this;
}
});
})(jQuery);
基本骨架有了,我們先來實(shí)現(xiàn)插件函數(shù)tranzify的實(shí)現(xiàn)。代碼還是很簡(jiǎn)單的,就是獲取當(dāng)前的dom對(duì)象,對(duì)其創(chuàng)建相關(guān)html元素和相應(yīng)事件,最后把this返回回去,實(shí)現(xiàn)鏈?zhǔn)侥J?,代碼如下:
復(fù)制代碼 代碼如下:
//創(chuàng)建插件函數(shù)
tranzify: function (options) {
//擴(kuò)展配置
var config = $.extend($.tranzify.defaults, options);
//獲取當(dāng)前dom對(duì)象,傳給config.selector
config.selector = "#" + this.attr('id');
//計(jì)算出我們需要?jiǎng)?chuàng)建的遮罩層片段數(shù)
config.multi = parseInt(this.width()) / config.transitionWidth;
//創(chuàng)建插件
$.tranzify.createUI(config);
//返回對(duì)象本身,實(shí)現(xiàn)鏈?zhǔn)叫Ч?
return this;
}
接下來我們介紹createUI函數(shù)。首先獲取圖片總數(shù):
復(fù)制代碼 代碼如下:
var imgLength = $(config.selector).find('img').length,
接下來定義‘上一條'和‘下一條'導(dǎo)航,并添加到selector對(duì)象上。
復(fù)制代碼 代碼如下:
prevA = $('<a></a>', {
id: config.prevID,
href: '#',
html: '«',
click: function (e) {
e.preventDefault();
//隱藏導(dǎo)航
$(config.selector).find('a').css('display', 'none');
//創(chuàng)建遮罩
$.tranzify.createOverlay(config);
//獲取當(dāng)前顯示狀態(tài)的圖片
var currImg = $('.' + config.visibleClass, $(config.selector));
//當(dāng)前圖片不是第一張圖片
if (currImg.prev().filter('img').length > 0) {
//將上一張圖片設(shè)置為可顯示狀態(tài)
currImg.removeClass(config.visibleClass).prev().addClass(config.visibleClass);
} else {
//設(shè)置最后一張圖片為可顯示狀態(tài)
currImg.removeClass(config.visibleClass);
$(config.selector).find('img').eq(imgLength - 1).addClass(config.visibleClass);
}
//運(yùn)行遮罩效果
$.tranzify.runTransition(config);
}
}).appendTo(config.selector),
nextA = $('<a></a>', {
id: config.nextID,
href: '#',
html: '»',
click: function (e) {
e.preventDefault();
//隱藏導(dǎo)航
$(config.selector).find('a').css('display', 'none');
//創(chuàng)建遮罩
$.tranzify.createOverlay(config);
//獲取當(dāng)前顯示狀態(tài)的圖片
var currImg = $('.' + config.visibleClass, $(config.selector));
//當(dāng)前圖片不是最后一張圖片
if (currImg.next().filter('img').length > 0) {
//將下一張圖片設(shè)置為可顯示狀態(tài)
currImg.removeClass(config.visibleClass).next().addClass(config.visibleClass);
} else {
//設(shè)置第一張圖片為可顯示狀態(tài)
currImg.removeClass(config.visibleClass);
$(config.selector).find('img').eq(0).addClass(config.visibleClass);
}
//運(yùn)行遮罩效果
$.tranzify.runTransition(config);
}
}).appendTo(config.selector);
最后別忘記把第一張圖片設(shè)置為顯示狀態(tài)。
復(fù)制代碼 代碼如下:
$(config.selector).find('img').eq(0).addClass(config.visibleClass);
下面介紹創(chuàng)建遮罩層的代碼。主要思路是:創(chuàng)建一組div,div的背景就是當(dāng)前顯示的圖片,通過設(shè)置各個(gè)div css的left值,背景的backgroundPosition值,使這組div組成一個(gè)完整的圖片效果。還是看代碼吧,一看就一目了然了。
復(fù)制代碼 代碼如下:
//div left的偏移量
var posLeftMarker = 0,
//div 背景position的偏移量
bgHorizMarker = 0,
//遮罩層總的包裝對(duì)象
overlay = $('<div></div>', {
id: config.containerID
});
//循環(huán),確定需要?jiǎng)?chuàng)造的片段數(shù)
for (var i = 0; i < config.multi; i++) {
//創(chuàng)造片段,每個(gè)片段只包含當(dāng)前顯示圖片的一部分圖片
$('<div></div>', {
//設(shè)置寬度
width: config.transitionWidth,
//設(shè)置高度
height: config.transitionHeight,
css: {
//設(shè)置背景圖片,來源就是當(dāng)前處于顯示狀態(tài)的圖片
backgroundImage: 'url(' + $('.' + config.visibleClass, $(config.selector)).attr('src') + ')',
//設(shè)置背景圖片大小,讓他們和外部容器高度、寬度一致。
//這樣無論你圖片的大小,都會(huì)和容易大小匹配
backgroundSize: $(config.selector).width() + 'px ' + $(config.selector).height() + 'px',
//設(shè)置背景偏移量
backgroundPosition: bgHorizMarker + 'px 0',
//設(shè)置left值
left: posLeftMarker,
top: 0
}
}).appendTo(overlay);//添加到遮罩層容器
//重新計(jì)算偏移量
bgHorizMarker -= config.transitionWidth;
posLeftMarker += config.transitionWidth;
}
//遮罩層容器添加到頁(yè)面
overlay.insertBefore('#' + config.prevID);
ok, 只剩運(yùn)行遮罩層的代碼了。這段代碼也很簡(jiǎn)單,就是獲取遮罩層容易下面的各個(gè)div,對(duì)他們添加動(dòng)畫效果,逐個(gè)讓他們的高度或者寬度變?yōu)?,等整個(gè)動(dòng)畫結(jié)束后,移出遮罩層容器。
復(fù)制代碼 代碼如下:
//獲取遮罩層容器
var transOverlay = $('#' + config.containerID),
//獲取遮罩層容器下各div
transEls = transOverlay.children(),
len = transEls.length - 1;
//根據(jù)配置運(yùn)行不懂得動(dòng)畫效果
switch (config.transitionType) {
case 'venetian':
transEls.each(function (i) {
transEls.eq(i).animate({
width: 0
}, 'slow', function () {
if (i === len) {
transOverlay.remove();
$(config.selector).find('a').css('display', 'block');
}
});
});
break;
case 'strip':
var counter = 0;
function strip() {
transEls.eq(counter).animate({
height: 0
}, 150, function () {
if (counter === len) {
transOverlay.remove();
$(config.selector).find("a").css("display", "block");
} else {
counter++;
strip();
}
});
}
strip();
break;
}
好了,內(nèi)容講完了,把代碼拼接起來就可以運(yùn)行最終效果了。希望這篇文章對(duì)你有幫助。
demo下載地址:jQuery.animation.tranzify
您可能感興趣的文章:
- jQuery+css+html實(shí)現(xiàn)頁(yè)面遮罩彈出框
- JS遮罩層效果 兼容ie firefox jQuery遮罩層
- JQuery 遮罩層實(shí)現(xiàn)(mask)實(shí)現(xiàn)代碼
- jquery彈出關(guān)閉遮罩層實(shí)例
- jQuery+html5實(shí)現(xiàn)div彈出層并遮罩背景
- jQuery實(shí)現(xiàn)簡(jiǎn)單網(wǎng)頁(yè)遮罩層/彈出層效果兼容IE6、IE7
- jquery 圓角遮罩圖片實(shí)現(xiàn)圖片圓角
- jQuery實(shí)現(xiàn)單擊按鈕遮罩彈出對(duì)話框(仿天貓的刪除對(duì)話框)
- jquery下實(shí)現(xiàn)overlay遮罩層代碼
- jquery blockUI 遮罩不能消失與不能提交的解決方法
- jquery插件之信息彈出框showInfoDialog(成功/錯(cuò)誤/警告/通知/背景遮罩)
- jquery實(shí)現(xiàn)彈出層遮罩效果的簡(jiǎn)單實(shí)例
- jQuery實(shí)現(xiàn)按鈕點(diǎn)擊遮罩加載及處理完后恢復(fù)的效果
相關(guān)文章
jQuery實(shí)現(xiàn)級(jí)聯(lián)菜單效果(仿淘寶首頁(yè)菜單動(dòng)畫)
今天我們就帶大家體會(huì)一下級(jí)聯(lián)菜單的顯示,只是實(shí)現(xiàn)了簡(jiǎn)單的效果,不過大都原理是一樣的2014-04-04貼近用戶體驗(yàn)的Jquery日期、時(shí)間選擇插件
本文給大家分享一款貼近用戶體驗(yàn)的Jquery日期、時(shí)間選擇插件,需要的朋友可以參考下2015-08-08Jquery Ajax 學(xué)習(xí)實(shí)例2 向頁(yè)面發(fā)出請(qǐng)求 返回JSon格式數(shù)據(jù)
處理業(yè)務(wù)數(shù)據(jù),產(chǎn)生JSon數(shù)據(jù),供JqueryRequest.aspx調(diào)用2010-03-03jQuery 獲取、設(shè)置HTML或TEXT內(nèi)容的兩種方法
這篇文章主要介紹了jQuery 獲取、設(shè)置HTML或TEXT內(nèi)容的兩種方法,需要的朋友可以參考下2014-05-05javascript異步處理與Jquery deferred對(duì)象用法總結(jié)
這篇文章主要介紹了javascript異步處理與Jquery deferred對(duì)象用法,結(jié)合實(shí)例形式總結(jié)分析了jQuery異步請(qǐng)求處理相關(guān)操作技巧,需要的朋友可以參考下2019-06-06jQuery實(shí)現(xiàn)為圖片添加鏡頭放大效果的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)為圖片添加鏡頭放大效果的方法,提供了四種放大鏡效果供大家選擇使用,并附有完整的源碼下載地址,需要的朋友可以參考下2015-06-06