You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

610 lines
17 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* FancyBox - simple and fancy jQuery plugin
* Examples and documentation at: http://fancy.klade.lv/
* Version: 1.2.1 (13/03/2009)
* Copyright (c) 2009 Janis Skarnelis
* Licensed under the MIT License: http://en.wikipedia.org/wiki/MIT_License
* Requires: jQuery v1.3+
*/
;(function($) {
$.fn.fixPNG = function() {
return this.each(function () {
var image = $(this).css('backgroundImage');
if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
image = RegExp.$1;
$(this).css({
'backgroundImage': 'none',
'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=" + ($(this).css('backgroundRepeat') == 'no-repeat' ? 'crop' : 'scale') + ", src='" + image + "')"
}).each(function () {
var position = $(this).css('position');
if (position != 'absolute' && position != 'relative')
$(this).css('position', 'relative');
});
}
});
};
var elem, opts, settings,busy = false,showNextTimer,imagePreloader = new Image, loadingTimer, loadingFrame = 1, imageRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i;
var isIE = ($.browser.msie && parseInt($.browser.version.substr(0,1)) < 8);
$.fn.fancybox = function(settings) {
settings = $.extend({}, $.fn.fancybox.defaults, settings);
var matchedGroup = this;
function _initialize() {
elem = this;
opts = settings;//);$.map(
_start();
return false;
};
function _start() {
if (busy) return;
if ($.isFunction(opts.callbackOnStart)) {
opts.callbackOnStart();
}
if(opts.autoPlay)
{
$.fn.fancybox.Play();
}
var d = settings.itemArray;
opts.itemArray = [];
opts.itemCurrent = 0;
settings.itemArray=d;
if (settings.itemArray.length > 0) {
opts.itemArray = settings.itemArray;
} else {
var item = {};
if (!elem.rel || elem.rel == '') {
var item = {href: elem.href, title: elem.title};
if ($(elem).children("img:first").length) {
item.orig = $(elem).children("img:first");
}
opts.itemArray.push( item );
} else {
var subGroup = $(matchedGroup).filter("a[rel=" + elem.rel + "]");
var item = {};
for (var i = 0; i < subGroup.length; i++) {
item = {href: subGroup[i].href, title: subGroup[i].title};
if ($(subGroup[i]).children("img:first").length) {
item.orig = $(subGroup[i]).children("img:first");
}
opts.itemArray.push( item );
}
while ( opts.itemArray[ opts.itemCurrent ].href != elem.href ) {
opts.itemCurrent++;
}
}
}
if (opts.overlayShow) {
if (isIE) {
$('embed, object, select').css('visibility', 'hidden');
}
$("#fancy_overlay").css('opacity', opts.overlayOpacity).show();
}
_change_item();
};
function _change_item() {
$("#fancy_right, #fancy_left, #fancy_close, #fancy_title,#fancy_top_binner").hide();
var href = opts.itemArray[ opts.itemCurrent ].href;
if (href.match(/#/)) {
var target = window.location.href.split('#')[0]; target = href.replace(target, ''); target = target.substr(target.indexOf('#'));
_set_content('<div id="fancy_div">' + $(target).html() + '</div>', opts.frameWidth, opts.frameHeight);
} else if (href.match(imageRegExp)) {
imagePreloader = new Image; imagePreloader.src = href;
if (imagePreloader.complete) {
_proceed_image();
} else {
$.fn.fancybox.showLoading();
$(imagePreloader).unbind().bind('load', function() {
$(".fancy_loading").hide();
_proceed_image();
});
}
} else if (href.match("iframe") || elem.className.indexOf("iframe") >= 0) {
_set_content('<iframe id="fancy_frame" onload="$.fn.fancybox.showIframe()" name="fancy_iframe' + Math.round(Math.random()*1000) + '" frameborder="0" hspace="0" src="' + href + '"></iframe>', opts.frameWidth, opts.frameHeight);
} else {
$.get(href, function(data) {
_set_content( '<div id="fancy_ajax">' + data + '</div>', opts.frameWidth, opts.frameHeight );
});
}
};
function _proceed_image() {
if (opts.imageScale) {
var w = $.fn.fancybox.getViewport();
var r = Math.min(Math.min(w[0] - 36, imagePreloader.width) / imagePreloader.width, Math.min(w[1] - 60, imagePreloader.height) / imagePreloader.height);
var width = Math.round(r * imagePreloader.width);
var height = Math.round(r * imagePreloader.height);
} else {
var width = imagePreloader.width;
var height = imagePreloader.height;
}
_set_content('<img alt="" id="fancy_img" src="' + imagePreloader.src + '" />', width, height);
};
function _preload_neighbor_images() {
if ((opts.itemArray.length -1) > opts.itemCurrent) {
var href = opts.itemArray[opts.itemCurrent + 1].href;
if (href.match(imageRegExp)) {
objNext = new Image();
objNext.src = href;
}
}
if (opts.itemCurrent > 0) {
var href = opts.itemArray[opts.itemCurrent -1].href;
if (href.match(imageRegExp)) {
objNext = new Image();
objNext.src = href;
}
}
};
function _set_content(value, width, height) {
busy = true;
var pad = opts.padding;
if (isIE) {
$("#fancy_content")[0].style.removeExpression("height");
$("#fancy_content")[0].style.removeExpression("width");
}
if (pad > 0) {
width += pad * 2;
height += pad * 2;
$("#fancy_content").css({
'top' : pad + 'px',
'right' : pad + 'px',
'bottom' : pad + 'px',
'left' : pad + 'px',
'width' : 'auto',
'height' : 'auto'
});
if (isIE) {
$("#fancy_content")[0].style.setExpression('height', '(this.parentNode.clientHeight - 20)');
$("#fancy_content")[0].style.setExpression('width', '(this.parentNode.clientWidth - 20)');
}
} else {
$("#fancy_content").css({
'top' : 0,
'right' : 0,
'bottom' : 0,
'left' : 0,
'width' : '100%',
'height' : '100%'
});
}
if ($("#fancy_outer").is(":visible") && width == $("#fancy_outer").width() && height == $("#fancy_outer").height()) {
$("#fancy_content").fadeOut("fast", function() {
$("#fancy_content").empty().append($(value)).fadeIn("normal", function() {
_finish();
});
});
return;
}
var w = $.fn.fancybox.getViewport();
var itemLeft = (width + 36) > w[0] ? w[2] : (w[2] + Math.round((w[0] - width - 36) / 2));
var itemTop = (height + 50) > w[1] ? w[3] : (w[3] + Math.round((w[1] - height - 50) / 2));
var itemOpts = {
'left': itemLeft,
'top': itemTop,
'width': width + 'px',
'height': height + 'px'
};
if ($("#fancy_outer").is(":visible")) {
$("#fancy_content").fadeOut("normal", function() {
$("#fancy_content").empty();
$("#fancy_outer").animate(itemOpts, opts.zoomSpeedChange, opts.easingChange, function() {
$("#fancy_content").append($(value)).fadeIn("normal", function() {
_finish();
});
});
});
} else {
if (opts.zoomSpeedIn > 0 && opts.itemArray[opts.itemCurrent].orig !== undefined) {
$("#fancy_content").empty().append($(value));
var orig_item = opts.itemArray[opts.itemCurrent].orig;
var orig_pos = $.fn.fancybox.getPosition(orig_item);
$("#fancy_outer").css({
'left': (orig_pos.left - 18) + 'px',
'top': (orig_pos.top - 18) + 'px',
'width': $(orig_item).width(),
'height': $(orig_item).height()
});
if (opts.zoomOpacity) {
itemOpts.opacity = 'show';
}
$("#fancy_outer").animate(itemOpts, opts.zoomSpeedIn, opts.easingIn, function() {
_finish();
});
} else {
$("#fancy_content").hide().empty().append($(value)).show();
$("#fancy_outer").css(itemOpts).fadeIn("normal", function() {
_finish();
});
}
}
};
function _set_navigation() {
if (opts.itemCurrent != 0) {
$("#fancy_left, #fancy_left_ico").unbind().bind("click", function(e) {
e.stopPropagation();
opts.itemCurrent--;
if(!opts.itemArray[opts.itemCurrent-1])//<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
{
_change_item();
//opts.itemCurrent++;
$.fn.fancybox.StopPlay();
$('#fancy_top_binner').css("background-image","url('/js/fancybox/fancy_Play.png')").attr("title","Play").unbind().bind("click",$.fn.fancybox.Play);
return false;
}
_change_item();
return false;
});
$("#fancy_left").show();
}
if (opts.itemCurrent != ( opts.itemArray.length -1)) {
$("#fancy_right, #fancy_right_ico").unbind().bind("click", function(e) {
e.stopPropagation();
opts.itemCurrent++; //##########################
if(!opts.itemArray[opts.itemCurrent+1])//<2F><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
{
_change_item();
//opts.itemCurrent--;
$.fn.fancybox.StopPlay();
$('#fancy_top_binner').css("background-image","url('/js/fancybox/fancy_PrevPlay.png')").attr("title","Reverse").unbind().bind("click",$.fn.fancybox.PrevPlay);
return false;
}
_change_item();
return false;
});
$("#fancy_right").show();
}
};
function _finish() {
_set_navigation();
_preload_neighbor_images();
$(document).keydown(function(e) {
if (e.keyCode == 27) {
$.fn.fancybox.close();
$(document).unbind("keydown");
} else if(e.keyCode == 37 && opts.itemCurrent != 0) {
opts.itemCurrent--;
_change_item();
$(document).unbind("keydown");
} else if(e.keyCode == 39 && opts.itemCurrent != (opts.itemArray.length - 1)) {
opts.itemCurrent++;
_change_item();
$(document).unbind("keydown");
}
});
if (opts.centerOnScroll) {
$(window).bind("resize scroll", $.fn.fancybox.scrollBox);
} else {
$("div#fancy_outer").css("position", "absolute");
}
if (opts.hideOnContentClick) {
$("#fancy_wrap").click($.fn.fancybox.close);
}
$("#fancy_overlay, #fancy_close").bind("click", $.fn.fancybox.close);//
$("#fancy_close").show();
if (opts.itemArray[ opts.itemCurrent ].title !== undefined && opts.itemArray[ opts.itemCurrent ].title.length > 0) {
$('#fancy_title div').html(opts.itemArray[ opts.itemCurrent ].title);
$('#fancy_title').show();
}
if(opts.autoPlay) //<2F><>ʾ<EFBFBD><CABE><EFBFBD>ſ<EFBFBD><C5BF><EFBFBD>ͼ<EFBFBD><CDBC>
{
$('#fancy_top_binner').show();
}
if (opts.overlayShow && isIE) {
$('embed, object, select', $('#fancy_content')).css('visibility', 'visible');
}
if ($.isFunction(opts.callbackOnShow)) {
opts.callbackOnShow();
}
busy = false;
};
return this.unbind('click').click(_initialize);
};
$.fn.fancybox.scrollBox = function() {
var pos = $.fn.fancybox.getViewport();
$("#fancy_outer").css('left', (($("#fancy_outer").width() + 36) > pos[0] ? pos[2] : pos[2] + Math.round((pos[0] - $("#fancy_outer").width() - 36) / 2)));
$("#fancy_outer").css('top', (($("#fancy_outer").height() + 50) > pos[1] ? pos[3] : pos[3] + Math.round((pos[1] - $("#fancy_outer").height() - 50) / 2)));
};
$.fn.fancybox.getNumeric = function(el, prop) {
return parseInt($.curCSS(el.jquery?el[0]:el,prop,true))||0;
};
$.fn.fancybox.getPosition = function(el) {
var pos = el.offset();
pos.top += $.fn.fancybox.getNumeric(el, 'paddingTop');
pos.top += $.fn.fancybox.getNumeric(el, 'borderTopWidth');
pos.left += $.fn.fancybox.getNumeric(el, 'paddingLeft');
pos.left += $.fn.fancybox.getNumeric(el, 'borderLeftWidth');
return pos;
};
$.fn.fancybox.showIframe = function() {
$(".fancy_loading").hide();
$("#fancy_frame").show();
};
$.fn.fancybox.getViewport = function() {
return [$(window).width(), $(window).height(), $(document).scrollLeft(), $(document).scrollTop() ];
};
$.fn.fancybox.animateLoading = function() {
if (!$("#fancy_loading").is(':visible')){
clearInterval(loadingTimer);
return;
}
$("#fancy_loading > div").css('top', (loadingFrame * -40) + 'px');
loadingFrame = (loadingFrame + 1) % 12;
};
$.fn.fancybox.showLoading = function() {
clearInterval(loadingTimer);
var pos = $.fn.fancybox.getViewport();
$("#fancy_loading").css({'left': ((pos[0] - 40) / 2 + pos[2]), 'top': ((pos[1] - 40) / 2 + pos[3])}).show();
$("#fancy_loading").bind('click', $.fn.fancybox.close);
loadingTimer = setInterval($.fn.fancybox.animateLoading, 66);
};
//
$.fn.fancybox.StopPlay = function() {//ֹͣ<CDA3>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
if(showNextTimer)
{
clearInterval(showNextTimer);
//$('#fancy_top_binner').hide();
showNextTimer =null;
}
};
$.fn.fancybox.Play=function(){ //<2F><>ǰ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
//if(showNextTimer)clearInterval(showNextTimer);
showNextTimer = setInterval(function(){ $("#fancy_right").trigger("click")},opts.playDelay);
$("#fancy_top_binner").css("background-image","url('/js/fancybox/fancy_StopPlay.png')").attr("title","Stop");
$("#fancy_top_binner").unbind().click(function(){
$.fn.fancybox.StopPlay();
//$('#fancy_top_binner').show();
$(this).css("background-image","url('/js/fancybox/fancy_Play.png')").attr("title","Play").unbind().bind("click",$.fn.fancybox.Play);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
});
};
$.fn.fancybox.PrevPlay=function(){ //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
//if(showNextTimer)clearInterval(showNextTimer);
showNextTimer = setInterval(function(){ $("#fancy_left").trigger("click")},opts.playDelay);
$("#fancy_top_binner").css("background-image","url('/js/fancybox/fancy_StopPlay.png')").attr("title","Stop");;
$("#fancy_top_binner").unbind().click(function(){
$.fn.fancybox.StopPlay();
$(this).css("background-image","url('/js/fancybox/fancy_PrevPlay.png')").attr("title","Reverse").unbind().bind("click",$.fn.fancybox.PrevPlay);
});
};
$.fn.fancybox.close = function() {
busy = true;
$.fn.fancybox.StopPlay();
$(imagePreloader).unbind();
$("#fancy_overlay, #fancy_close").unbind();
if (opts.hideOnContentClick) {
$("#fancy_wrap").unbind();
}
$("#fancy_close, .fancy_loading, #fancy_left, #fancy_right, #fancy_title,#fancy_top_binner").hide();
if (opts.centerOnScroll) {
$(window).unbind("resize scroll");
}
__cleanup = function() {
$("#fancy_overlay, #fancy_outer").hide();
if (opts.centerOnScroll) {
$(window).unbind("resize scroll");
}
if (isIE) {
$('embed, object, select').css('visibility', 'visible');
}
if ($.isFunction(opts.callbackOnClose)) {
opts.callbackOnClose();
}
busy = false;
};
if ($("#fancy_outer").is(":visible") !== false) {
if (opts.zoomSpeedOut > 0 && opts.itemArray[opts.itemCurrent].orig !== undefined) {
var orig_item = opts.itemArray[opts.itemCurrent].orig;
var orig_pos = $.fn.fancybox.getPosition(orig_item);
var itemOpts = {
'left': (orig_pos.left - 18) + 'px',
'top': (orig_pos.top - 18) + 'px',
'width': $(orig_item).width(),
'height': $(orig_item).height()
};
if (opts.zoomOpacity) {
itemOpts.opacity = 'hide';
}
$("#fancy_outer").stop(false, true).animate(itemOpts, opts.zoomSpeedOut, opts.easingOut, __cleanup);
} else {
$("#fancy_outer").stop(false, true).fadeOut("fast", __cleanup);
}
} else {
__cleanup();
}
return false;
};
$.fn.fancybox.build = function() {
var html = '';
html += '<div id="fancy_overlay"></div>';
html += '<div id="fancy_wrap">';
html += '<div class="fancy_loading" id="fancy_loading"><div></div></div>';
html += '<div id="fancy_outer">';
html += '<div id="fancy_inner">';
html += '<div id="fancy_top_binner"></div>';
html += '<div id="fancy_close"></div>';
html += '<div id="fancy_bg"><div class="fancy_bg fancy_bg_n" ></div><div class="fancy_bg fancy_bg_ne"></div><div class="fancy_bg fancy_bg_e"></div><div class="fancy_bg fancy_bg_se"></div><div class="fancy_bg fancy_bg_s"></div><div class="fancy_bg fancy_bg_sw"></div><div class="fancy_bg fancy_bg_w"></div><div class="fancy_bg fancy_bg_nw"></div></div>';
html += '<a href="javascript:;" id="fancy_left"><span class="fancy_ico" id="fancy_left_ico"></span></a><a href="javascript:;" id="fancy_right"><span class="fancy_ico" id="fancy_right_ico"></span></a>';
html += '<div id="fancy_content"></div>';
html += '<div id="fancy_title" class="fancy_title"></div>';
html += '</div>';
html += '</div>';
html += '</div>';
$(html).appendTo("body");
$('<table cellspacing="0" cellpadding="0" border="0"><tr><td class="fancy_title_left"></td><td class="fancy_title_main" ><div></div></td><td class="fancy_title_right" ></td></tr></table>').appendTo('#fancy_title');
if (isIE) {
$("#fancy_inner").prepend('<iframe class="fancy_bigIframe" scrolling="no" frameborder="0"></iframe>');
$("#fancy_close, .fancy_bg, .fancy_title, .fancy_ico").fixPNG();
}
};
$.fn.fancybox.defaults = {
padding : 10,
imageScale : true,
zoomOpacity : false,
zoomSpeedIn : 0,
zoomSpeedOut : 0,
zoomSpeedChange : 300,
easingIn : 'swing',
easingOut : 'swing',
easingChange : 'swing',
frameWidth : 425,
frameHeight : 355,
playDelay : 5000,
overlayShow : true,
overlayOpacity : 0.3,
hideOnContentClick : false,
centerOnScroll : true,
autoPlay : false,
itemArray : [],
callbackOnStart : null,
callbackOnShow : null,
callbackOnClose : null
};
$(document).ready(function() {
$.fn.fancybox.build();
});
})(jQuery);