188 lines
5.7 KiB
JavaScript
188 lines
5.7 KiB
JavaScript
/**
|
|
* jQuery jqGalScroll Plugin
|
|
* Examples and documentation at: http://benjaminsterling.com/jquery-jqgalscroll-photo-gallery/
|
|
*
|
|
* @author: Benjamin Sterling
|
|
* @version: 2.1
|
|
* @copyright (c) 2007 Benjamin Sterling, KenzoMedia
|
|
* @extendThanks Koesmanto Bong http://www.koesbong.com/
|
|
* Koes put a fire under my butt to improve this plugin
|
|
* and when I took too long he took what I had and added
|
|
* the horizontal scroll and in turn I ripped it from his
|
|
* hands and made it better :)
|
|
*
|
|
* Dual licensed under the MIT and GPL licenses:
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
* @requires jQuery v1.2.1 or later
|
|
* @optional jQuery Easing v1.2
|
|
*
|
|
* @name jqGalScroll
|
|
* @example $('ul').jqGalScroll();
|
|
*
|
|
* @Semantic requirements:
|
|
* The structure fairly simple; the structure should consist
|
|
* of a ul > li > img structure.
|
|
*
|
|
* <ul>
|
|
* <li><img src="common/img/dsc_0003.thumbnail.JPG"/></li>
|
|
* <li><img src="common/img/dsc_0012.thumbnail.JPG"/></li>
|
|
* </ul>
|
|
*
|
|
* @param String ease
|
|
* refer to http://gsgd.co.uk/sandbox/jquery.easing.php for values
|
|
*
|
|
* @example $('#gallery').jqGalScroll({speed:1000});
|
|
|
|
* @param String speed
|
|
* fast, slow, 1000, ext..
|
|
*
|
|
* @example $('#gallery').jqGalScroll({speed:1000});
|
|
*
|
|
* @param String height
|
|
* the default height of your wrapper
|
|
*
|
|
* @example $('#gallery').jqGalScroll({height:490});
|
|
*
|
|
* @param String titleOpacity
|
|
* the opacity of your title bar (if present)
|
|
*
|
|
* @example $('#gallery').jqGalScroll({titleOpacity:.70});
|
|
*
|
|
* @param String direction
|
|
* vertical horizontal diagonal
|
|
*
|
|
* @example $('#gallery').jqGalScroll({direction:'vertical'});
|
|
*
|
|
*/
|
|
(function($) {
|
|
$.fn.jqGalScroll = function(options){
|
|
return this.each(function(i){
|
|
var el = this
|
|
el.curImage = 0;
|
|
el.jqthis = $(this).css({position:'relative'});
|
|
el.jqchildren = el.jqthis.children();
|
|
el.opts = $.extend({}, jqGalScroll, options);
|
|
el.index = i;
|
|
el.totalChildren = el.jqchildren.size();
|
|
var width,height;
|
|
|
|
switch(el.opts.direction){
|
|
case 'horizontal':
|
|
width = el.totalChildren *el.opts.width;
|
|
height = el.opts.height;
|
|
break;
|
|
case 'vertical':
|
|
width = el.opts.width;
|
|
height = el.totalChildren *el.opts.height;
|
|
break;
|
|
default:
|
|
width = el.totalChildren *el.opts.width;
|
|
height = el.totalChildren *el.opts.height;
|
|
break;
|
|
};
|
|
|
|
el.container = $('<div id="jqGS'+i+'" class="jqGSContainer">').css({position:'relative'});
|
|
el.ImgContainer = $('<div class="jqGSImgContainer" style="height:'+el.opts.height+'px;position:relative;overflow:hidden">')
|
|
.css({height:el.opts.height,width:el.opts.width,position:'relative',overflow:'hidden'});
|
|
el.jqthis.css({height:height,width:width});
|
|
|
|
el.jqthis.wrap(el.container);
|
|
el.jqthis.wrap(el.ImgContainer);
|
|
el.pagination = $('<div class="jqGSPagination">');
|
|
el.jqthis.parent().parent().append(el.pagination);
|
|
var jqul = $('<ul>').appendTo(el.pagination);
|
|
var pos = {x:0,y:0};
|
|
|
|
el.jqchildren
|
|
.each(function(j){
|
|
var selected = '';
|
|
if(j == 0) selected = 'selected';
|
|
|
|
var $a = $('<a href="#'+(j)+'" class="'+selected+'">'+(j+1)+'</a>').click(function(){
|
|
var href = this.index;//href.replace(/^.*#/, '');
|
|
el.pagination.find('.selected').removeClass('selected');
|
|
$(this).addClass('selected');
|
|
var params = {};
|
|
if( el.opts.direction == 'diagonal'){
|
|
params = {right:(el.opts.width*href),bottom:(el.opts.height*href)}
|
|
}
|
|
else if( el.opts.direction == 'vertical'){
|
|
params = {bottom:(el.opts.height*href)}
|
|
}
|
|
else if( el.opts.direction == 'horizontal'){
|
|
params = {right:(el.opts.width*href)}
|
|
};
|
|
|
|
el.jqthis.stop().animate(params,el.opts.speed, el.opts.ease);
|
|
index = href;
|
|
return false;
|
|
});
|
|
|
|
var n = $a.get(0);
|
|
|
|
n.index = j;
|
|
|
|
$('<li>').appendTo(jqul).append($a);
|
|
|
|
if( el.opts.direction == 'diagonal'){
|
|
pos.x = j * el.opts.width;
|
|
pos.y = j * el.opts.height;
|
|
}
|
|
else if( el.opts.direction == 'horizontal'){
|
|
pos.x = j * el.opts.width;
|
|
}
|
|
else if( el.opts.direction == 'vertical'){
|
|
pos.y = j * el.opts.height;
|
|
};
|
|
|
|
var jqchild = $(this).css({height:el.opts.height,width:el.opts.width,position:'absolute',left:pos.x, top:pos.y});
|
|
|
|
var jqimg = jqchild.find('img').hide()
|
|
|
|
/*
|
|
if(jqimg.parent().is('a')){
|
|
var p = jqimg.parent();
|
|
jqimg.get(0).linkHref = p.attr('href');
|
|
p.remove();
|
|
jqimg.appendTo(jqchild);
|
|
};*/
|
|
|
|
jqimg.click(function(){
|
|
var next = n.index + 1;
|
|
if((n.index + 1) == el.totalChildren ){
|
|
el.pagination.find('[href$=#0]').click();
|
|
}
|
|
else{
|
|
el.pagination.find('[href$=#'+next+']').click();
|
|
}
|
|
});
|
|
|
|
var $loader = $('<div class="jqGSLoader">').appendTo(jqchild);
|
|
var $titleHolder = $('<div class="jqGSTitle">').appendTo(jqchild).css({opacity:el.opts.titleOpacity}).hide();
|
|
var image = new Image();
|
|
image.onload = function(){
|
|
image.onload = null;
|
|
$loader.fadeOut();
|
|
jqimg.css({marginLeft:-image.width*.5,marginTop:-image.height*.5,position:'absolute',left:'50%',top:'50%'}).fadeIn();
|
|
var alt = jqimg.attr('alt');
|
|
if(typeof alt != 'undefined'){
|
|
$titleHolder.text(alt).fadeIn();
|
|
}
|
|
};
|
|
image.src = jqimg.attr('src');
|
|
});
|
|
|
|
|
|
}); // end : this.each(function()
|
|
}; // end : $.fn.jqGalScroll
|
|
jqGalScroll = {
|
|
ease: null,
|
|
speed:0,
|
|
height: 500,
|
|
width: 500,
|
|
titleOpacity : .60,
|
|
direction : 'horizontal' // vertical horizontal diagonal
|
|
};
|
|
})(jQuery); |