jquery動畫3.建立一個帶遮罩效果的圖片走廊

來源:互聯網
上載者:User

複製代碼 代碼如下:#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外掛程式如何製作,該部分以講解為主,外掛程式的詳細代碼和如何使用,還是參照demo。
  第一步是搭建外掛程式的骨架: 複製代碼 代碼如下:(function ($) {
$.tranzify = {
defaults: { //預設配置
transitionWidth: 40, //遮罩層每一小片段的寬度
transitionHeight: '100%', //遮罩層每一小片段高度
containerID: 'overlay', //遮罩層id
transitionType: 'venetian',//預設遮罩層動畫效果
prevID: 'prev',//上一條導航ID
nextID: 'next',//下一條導航ID
visibleClass: 'visible' //可見度class
},
//外掛程式初始化操作
createUI: function (config) {
},
//建立遮罩層
createOverlay: function (config) {
},
//運行動畫效果
runTransition: function (config) {
}
};
$.fn.extend({
//建立外掛程式函數
tranzify: function (options) {return this;
}
});
})(jQuery);

基本骨架有了,我們先來實現外掛程式函數tranzify的實現。代碼還是很簡單的,就是擷取當前的dom對象,對其建立相關html元素和相應事件,最後把this返回回去,實現鏈式模式,代碼如下: 複製代碼 代碼如下://建立外掛程式函數
tranzify: function (options) {
  //擴充配置
  var config = $.extend($.tranzify.defaults, options);
  //擷取當前dom對象,傳給config.selector
  config.selector = "#" + this.attr('id');
  //計算出我們需要建立的遮罩層片段數
  config.multi = parseInt(this.width()) / config.transitionWidth;
  //建立外掛程式
  $.tranzify.createUI(config);
  //返回對象本身,實現鏈式效果
  return this;
}

 接下來我們介紹createUI函數。首先擷取圖片總數: 複製代碼 代碼如下:var imgLength = $(config.selector).find('img').length,

接下來定義‘上一條'和‘下一條'導航,並添加到selector對象上。 複製代碼 代碼如下:prevA = $('<a></a>', {
id: config.prevID,
href: '#',
html: '«',
click: function (e) {
e.preventDefault();
//隱藏導航
$(config.selector).find('a').css('display', 'none');
//建立遮罩
$.tranzify.createOverlay(config);
//擷取當前顯示狀態的圖片
var currImg = $('.' + config.visibleClass, $(config.selector));
//當前圖片不是第一張圖片
if (currImg.prev().filter('img').length > 0) {
//將上一張圖片設定為可顯示狀態
currImg.removeClass(config.visibleClass).prev().addClass(config.visibleClass);
} else {
//設定最後一張圖片為可顯示狀態
currImg.removeClass(config.visibleClass);
$(config.selector).find('img').eq(imgLength - 1).addClass(config.visibleClass);
}
//運行遮罩效果
$.tranzify.runTransition(config);
}
}).appendTo(config.selector),
nextA = $('<a></a>', {
id: config.nextID,
href: '#',
html: '»',
click: function (e) {
e.preventDefault();
//隱藏導航
$(config.selector).find('a').css('display', 'none');
//建立遮罩
$.tranzify.createOverlay(config);
//擷取當前顯示狀態的圖片
var currImg = $('.' + config.visibleClass, $(config.selector));
//當前圖片不是最後一張圖片
if (currImg.next().filter('img').length > 0) {
//將下一張圖片設定為可顯示狀態
currImg.removeClass(config.visibleClass).next().addClass(config.visibleClass);
} else {
//設定第一張圖片為可顯示狀態
currImg.removeClass(config.visibleClass);
$(config.selector).find('img').eq(0).addClass(config.visibleClass);
}
//運行遮罩效果
$.tranzify.runTransition(config);
}
}).appendTo(config.selector);

最後別忘記把第一張圖片設定為顯示狀態。 複製代碼 代碼如下:$(config.selector).find('img').eq(0).addClass(config.visibleClass);

  下面介紹建立遮罩層的代碼。主要思路是:建立一組div,div的背景就是當前顯示的圖片,通過設定各個div css的left值,背景的backgroundPosition值,使這組div組成一個完整的圖片效果。還是看代碼吧,一看就一目瞭然了。 複製代碼 代碼如下://div left的位移量
var posLeftMarker = 0,
//div 背景position的位移量
bgHorizMarker = 0,
//遮罩層總的封裝對象
overlay = $('<div></div>', {
id: config.containerID
});
//迴圈,確定需要創造的片段數
for (var i = 0; i < config.multi; i++) {
//創造片段,每個片段只包含當前顯示圖片的一部分圖片
$('<div></div>', {
//設定寬度
width: config.transitionWidth,
//設定高度
height: config.transitionHeight,
css: {
//設定背景圖片,來源就是當前處於顯示狀態的圖片
backgroundImage: 'url(' + $('.' + config.visibleClass, $(config.selector)).attr('src') + ')',
//設定背景圖片大小,讓他們和外部容器高度、寬度一致。
//這樣無論你圖片的大小,都會和容易大小匹配
backgroundSize: $(config.selector).width() + 'px ' + $(config.selector).height() + 'px',
//設定背景位移量
backgroundPosition: bgHorizMarker + 'px 0',
//設定left值
left: posLeftMarker,
top: 0
}
}).appendTo(overlay);//添加到遮罩層容器
//重新計算位移量
bgHorizMarker -= config.transitionWidth;
posLeftMarker += config.transitionWidth;
}
//遮罩層容器添加到頁面
overlay.insertBefore('#' + config.prevID);

ok, 只剩運行遮罩層的代碼了。這段代碼也很簡單,就是擷取遮罩層容易下面的各個div,對他們添加動畫效果,逐個讓他們的高度或者寬度變為0,等整個動畫結束後,移出遮罩層容器。 複製代碼 代碼如下://擷取遮罩層容器
var transOverlay = $('#' + config.containerID),
//擷取遮罩層容器下各div
transEls = transOverlay.children(),
len = transEls.length - 1;
//根據配置運行不懂得動畫效果
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;
}

好了,內容講完了,把代碼拼接起來就可以運行最終效果了。希望這篇文章對你有協助。
  demo:jQuery.animation.tranzify

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.