/* GalleryView - jQuery Content Gallery Plugin Author: Jack Anderson Version: 1.1 (April 5, 2009) Documentation: http://www.spaceforaname.com/jquery/galleryview/ Please use this development script if you intend to make changes to the plugin code. For production sites, please use jquery.galleryview-1.0.1-pack.js. */ (function($){ $.fn.galleryView = function(options) { var opts = $.extend($.fn.galleryView.defaults,options); var id; var iterator = 0; var gallery_width; var gallery_height; var frame_margin = opts.frame_margin; var strip_width; var wrapper_width; var item_count = 0; var slide_method; var img_path; var paused = false; var frame_caption_size = 20; var frame_margin_top = 5; var pointer_width = opts.pointer_width; var isIE6 = ($.browser.msie && ($.browser.version <= 6)) ? true : false; var isLessIE8 = ($.browser.msie && ($.browser.version <= 8)) ? true : false; //Define jQuery objects for reuse var j_gallery; var j_filmstrip; var j_frames; var j_panels; var j_pointer; /************************************************/ /* Plugin Methods */ /************************************************/ function showItem(i) { //Disable next/prev buttons until transition is complete $('.nav-next').unbind('click'); $('.nav-prev').unbind('click'); j_frames.unbind('click'); if(has_panels) { if(opts.fade_panels) { //Fade out all panels and fade in target panel if (isIE6) { j_panels.hide(); j_panels.eq(i%item_count).show(); if(!has_filmstrip) { $('.nav-prev').click(showPrevItem); $('.nav-next').click(showNextItem); } }else{ var jv = j_gallery.find(".panel:visible"); var jv_po = jv.find(".panel-overlay").hide(); var jv_o = jv.find(".overlay").hide(); jv.fadeOut(opts.transition_speed, function(){ jv_po.show(); jv_o.show(); }); j_panels.eq(i%item_count).fadeIn(opts.transition_speed,function(){ if(!has_filmstrip) { $('.nav-prev').click(showPrevItem); $('.nav-next').click(showNextItem); } }); } } } if(has_filmstrip) { if(slide_method=='strip') { j_filmstrip.stop(); var distance = getPos(j_frames[i]).left - (getPos(j_pointer[0]).left+2); var leftstr = (distance>=0?'-=':'+=')+Math.abs(distance)+'px'; j_filmstrip.animate({ 'left':leftstr },opts.transition_speed,opts.easing,function(){ if(i>item_count) { i = i%item_count; iterator = i; j_filmstrip.css('left','-'+((opts.frame_width+frame_margin)*i)+'px'); } else if (i<=(item_count-strip_size)) { i = (i%item_count)+item_count; iterator = i; j_filmstrip.css('left','-'+((opts.frame_width+frame_margin)*i)+'px'); } if(!opts.fade_panels) { j_panels.hide().eq(i%item_count).show(); } $('.nav-prev').click(showPrevItem); $('.nav-next').click(showNextItem); enableFrameClicking(); }); } else if(slide_method=='pointer') { j_pointer.stop(); var pos = getPos(j_frames[i]); j_pointer.animate({ 'left':(pos.left-2+'px') },opts.transition_speed,opts.easing,function(){ if(!opts.fade_panels) { j_panels.hide().eq(i%item_count).show(); } $('.nav-prev').click(showPrevItem); $('.nav-next').click(showNextItem); enableFrameClicking(); }); } if($('a',j_frames[i])[0]) { j_pointer.unbind('click').click(function(){ var a = $('a',j_frames[i]).eq(0); if(a.attr('target')=='_blank') {window.open(a.attr('href'));} else {location.href = a.attr('href');} }); } } }; function showNextItem() { $(document).stopTime("transition"); if(++iterator==j_frames.length) {iterator=0;} showItem(iterator); $(document).everyTime(opts.transition_interval,"transition",function(){ showNextItem(); }); return false; }; function showPrevItem() { $(document).stopTime("transition"); if(--iterator<0) {iterator = item_count-1;} //alert(iterator); showItem(iterator); $(document).everyTime(opts.transition_interval,"transition",function(){ showNextItem(); }); return false; }; function getPos(el) { var left = 0, top = 0; var el_id = el.id; if(el.offsetParent) { do { left += el.offsetLeft; top += el.offsetTop; } while(el = el.offsetParent); } if(el_id == id) {return {'left':left,'top':top};} else { var gPos = getPos(j_gallery[0]); var gLeft = gPos.left; var gTop = gPos.top; return {'left':left-gLeft,'top':top-gTop}; } }; function enableFrameClicking() { j_frames.each(function(i){ if($('a',this).length==0) { $(this).click(function(){ $(document).stopTime("transition"); showItem(i); iterator = i; $(document).everyTime(opts.transition_interval,"transition",function(){ showNextItem(); }); }); } }); }; function buildPanels() { if($('.panel-overlay').length>0) {j_panels.append('
');} if(!has_filmstrip) { $('').addClass('nav-next').attr('src',img_path+opts.nav_theme+'/next.png').appendTo(j_gallery).css({ 'position':'absolute', 'zIndex':'1100', 'cursor':'pointer', 'top':((opts.panel_height-22)/2)+'px', 'right':'10px', 'display':'none' }).click(showNextItem); $('').addClass('nav-prev').attr('src',img_path+opts.nav_theme+'/prev.png').appendTo(j_gallery).css({ 'position':'absolute', 'zIndex':'1100', 'cursor':'pointer', 'top':((opts.panel_height-22)/2)+'px', 'left':'10px', 'display':'none' }).click(showPrevItem); $('').addClass('nav-overlay').attr('src',img_path+opts.nav_theme+'/panel-nav-next.png').appendTo(j_gallery).css({ 'position':'absolute', 'zIndex':'1099', 'top':((opts.panel_height-22)/2)-10+'px', 'right':'0', 'display':'none' }); $('').addClass('nav-overlay').attr('src',img_path+opts.nav_theme+'/panel-nav-prev.png').appendTo(j_gallery).css({ 'position':'absolute', 'zIndex':'1099', 'top':((opts.panel_height-22)/2)-10+'px', 'left':'0', 'display':'none' }); } j_panels.css({ 'width':(opts.panel_width-parseInt(j_panels.css('paddingLeft').split('px')[0],10)-parseInt(j_panels.css('paddingRight').split('px')[0],10))+'px', 'height':(opts.panel_height-parseInt(j_panels.css('paddingTop').split('px')[0],10)-parseInt(j_panels.css('paddingBottom').split('px')[0],10))+'px', 'position':'absolute', 'top':(opts.filmstrip_position=='top'?(opts.frame_height+frame_margin_top+(opts.show_captions?frame_caption_size:frame_margin_top))+'px':'0px'), 'left':'0px', 'overflow':'hidden', 'background':'white', 'display':'none' }); $('.panel-overlay',j_panels).css({ 'position':'absolute', 'zIndex':'999', 'width':(opts.panel_width-20)+'px', 'height':opts.overlay_height+'px', 'top':(opts.overlay_position=='top'?'0':opts.panel_height-opts.overlay_height+'px'), 'left':'0', 'padding':'0 10px', 'color':opts.overlay_text_color, 'fontSize':opts.overlay_font_size }); $('.panel-overlay a',j_panels).css({ 'color':opts.overlay_text_color }); $('.overlay',j_panels).css({ 'position':'absolute', 'zIndex':'998', 'width':opts.panel_width+'px', 'height':opts.overlay_height+'px', 'top':(opts.overlay_position=='top'?'0':opts.panel_height-opts.overlay_height+'px'), 'left':'0', 'background':opts.overlay_color, 'opacity':opts.overlay_opacity }); $('.panel iframe',j_panels).css({ 'width':opts.panel_width+'px', 'height':(opts.panel_height-opts.overlay_height)+'px', 'border':'0' }); }; function buildFilmstrip() { j_filmstrip.wrap('
'); if(slide_method=='strip') { j_frames.clone().appendTo(j_filmstrip); j_frames.clone().appendTo(j_filmstrip); j_frames = $('li',j_filmstrip); } if(opts.show_captions) { j_frames.append('
').each(function(i){ $(this).find('.caption').html($(this).find('img').attr('title')); }); } j_filmstrip.css({ 'listStyle':'none', 'margin':'0', 'padding':'0', 'width':strip_width+'px', 'position':'absolute', 'zIndex':'900', 'top':'0', 'left':'0', 'height':(opts.frame_height+10)+'px', 'background':opts.background_color }); j_frames.css({ 'float':'left', 'position':'relative', 'height':opts.frame_height+'px', 'zIndex':'901', 'marginTop':frame_margin_top+'px', 'marginBottom':'0px', 'marginRight':frame_margin+'px', 'padding':'0', 'cursor':'pointer' }); $('img',j_frames).css({ 'border':'none' }); $('.strip_wrapper',j_gallery).css({ 'position':'absolute', 'top':(opts.filmstrip_position=='top'? 0 : opts.panel_height) + opts.filmstrip_position_top +'px', 'left':((gallery_width-wrapper_width)/2)+'px', 'width':wrapper_width+'px', 'height':(opts.frame_height+frame_margin_top+(opts.show_captions?frame_caption_size:frame_margin_top))+'px', 'overflow':'hidden' }); $('.caption',j_gallery).css({ 'position':'absolute', 'top':opts.frame_height+'px', 'left':'0', 'margin':'0', 'width':opts.frame_width+'px', 'padding':'0', 'color':opts.caption_text_color, 'textAlign':'center', 'fontSize':'10px', 'height':frame_caption_size+'px', 'lineHeight':frame_caption_size+'px' }); var pointer = $('
'); var topOffset = isLessIE8 ? 0 : 1; pointer.attr('id','pointer').appendTo(j_gallery).css({ 'position':'absolute', 'zIndex':'1000', 'cursor':'pointer', 'top':getPos(j_frames[0]).top-topOffset-(pointer_width/2)+'px', 'left':getPos(j_frames[0]).left-(pointer_width/2)+'px', 'height':opts.frame_height-2+'px', 'width':opts.frame_width-2+'px', 'border':(has_panels?pointer_width+'px solid '+ (opts.pointer_color ? opts.pointer_color : (opts.nav_theme=='dark'?'black':'white')):'none') }); j_pointer = $('#pointer',j_gallery); if(has_panels) { var pointerArrow = $(''); pointerArrow.attr('src',img_path+opts.nav_theme+'/pointer'+(opts.filmstrip_position=='top'?'-down':'')+'.png').appendTo($('#pointer')).css({ 'position':'absolute', 'zIndex':'1001', 'top':(opts.filmstrip_position=='bottom'?'-'+(5+pointer_width)+'px':opts.frame_height+'px'), 'left':((opts.frame_width/2)-10)+'px' }); } if(slide_method=='strip') { j_filmstrip.css('left','-'+((opts.frame_width+frame_margin)*item_count)+'px'); iterator = item_count; } if($('a',j_frames[iterator])[0]) { j_pointer.click(function(){ var a = $('a',j_frames[iterator]).eq(0); if(a.attr('target')=='_blank') {window.open(a.attr('href'));} else {location.href = a.attr('href');} }); } $('').addClass('nav-next').attr({"hidefocus":"true"}).appendTo(j_gallery).css({ 'display' : 'block', 'width' : opts.navigation_button_width, 'height' : opts.frame_height, 'position':'absolute', 'top':(opts.filmstrip_position=='top'? 0 : opts.panel_height) + opts.filmstrip_position_top + 5 +'px', 'right':'0px' }).click(showNextItem); $('').addClass('nav-prev').attr({"hidefocus":"true"}).appendTo(j_gallery).css({ 'display' : 'block', 'width' : opts.navigation_button_width, 'height' : opts.frame_height, 'position':'absolute', 'top':(opts.filmstrip_position=='top'? 0 : opts.panel_height) + opts.filmstrip_position_top + 5 +'px', 'left':'0px' }).click(showPrevItem); }; function mouseIsOverPanels(x,y) { var pos = getPos(j_gallery[0]); var top = pos.top; var left = pos.left; return x > left && x < left+opts.panel_width && y > top && y < top+opts.panel_height; }; /************************************************/ /* Main Plugin Code */ /************************************************/ return this.each(function() { j_gallery = $(this); img_path = "http://tieba.baidu.com/tb/picture/js/themes/"; j_gallery.css('visibility','hidden'); j_filmstrip = $('.filmstrip',j_gallery); j_frames = $('li',j_filmstrip); j_panels = $('.panel',j_gallery); id = j_gallery.attr('id'); has_panels = j_panels.length > 0; has_filmstrip = j_frames.length > 0; if(!has_panels) opts.panel_height = 0; item_count = has_panels?j_panels.length:j_frames.length; strip_size = has_panels?Math.floor((opts.panel_width-opts.navigation_button_width*2)/(opts.frame_width+frame_margin)):Math.min(item_count,opts.filmstrip_size); /************************************************/ /* Determine transition method for filmstrip */ /************************************************/ if(strip_size >= item_count) { slide_method = 'pointer'; strip_size = item_count; } else {slide_method = 'strip';} /************************************************/ /* Determine dimensions of various elements */ /************************************************/ gallery_width = has_panels?opts.panel_width:(strip_size*(opts.frame_width+frame_margin))-frame_margin+opts.navigation_button_width*2; gallery_height = (has_panels?opts.panel_height:0)+(has_filmstrip?opts.frame_height+frame_margin_top+(opts.show_captions?frame_caption_size:frame_margin_top):0); if(slide_method == 'pointer') {strip_width = (opts.frame_width*item_count)+(frame_margin*(item_count));} else {strip_width = (opts.frame_width*item_count*3)+(frame_margin*(item_count*3));} wrapper_width = opts.wrapper_width ? opts.wrapper_width : ((strip_size*opts.frame_width)+((strip_size-1)*frame_margin)); /************************************************/ /* Apply CSS Styles */ /************************************************/ j_gallery.css({ 'position':'relative', 'margin':'0', 'background':opts.background_color, 'border':opts.border, 'width':gallery_width+'px', 'height':gallery_height+'px' }); /************************************************/ /* Build filmstrip and/or panels */ /************************************************/ if(has_filmstrip) { buildFilmstrip(); } if(has_panels) { buildPanels(); } /************************************************/ /* Add events to various elements */ /************************************************/ /************************************************/ /* Initiate Automated Animation */ /************************************************/ //Show the first panel j_panels.eq(0).show(); //If we have more than one item, begin automated transitions if(item_count > 1) { $(document).everyTime(opts.transition_interval,"transition",function(){ showNextItem(); }); } //Make gallery visible now that work is complete j_gallery.css('visibility','visible'); }); }; $.fn.galleryView.defaults = { panel_width: 400, panel_height: 570, frame_width: 180, frame_height: 80, frame_margin : 10, filmstrip_size: 3, overlay_height: 80, overlay_font_size: '1em', transition_speed: 400, transition_interval: 6000, overlay_opacity: 0.5, overlay_color: 'black', background_color: 'black', overlay_text_color: 'white', caption_text_color: 'white', border: '1px solid black', nav_theme: 'light', easing: 'swing', filmstrip_position: 'bottom', filmstrip_position_top : 10, overlay_position: 'bottom', show_captions: false, fade_panels: true, pause_on_hover: false, navigation_button_width : 32, wrapper_width : 0, pointer_width : 2, pointer_color : '' }; })(jQuery); /** * jQuery.timers - Timer abstractions for jQuery * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com) * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/). * Date: 2009/02/08 * * @author Blair Mitchelmore * @version 1.1.2 * **/ jQuery.fn.extend({ everyTime: function(interval, label, fn, times, belay) { return this.each(function() { jQuery.timer.add(this, interval, label, fn, times, belay); }); }, oneTime: function(interval, label, fn) { return this.each(function() { jQuery.timer.add(this, interval, label, fn, 1); }); }, stopTime: function(label, fn) { return this.each(function() { jQuery.timer.remove(this, label, fn); }); } }); jQuery.event.special jQuery.extend({ timer: { global: [], guid: 1, dataKey: "jQuery.timer", regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/, powers: { // Yeah this is major overkill... 'ms': 1, 'cs': 10, 'ds': 100, 's': 1000, 'das': 10000, 'hs': 100000, 'ks': 1000000 }, timeParse: function(value) { if (value == undefined || value == null) return null; var result = this.regex.exec(jQuery.trim(value.toString())); if (result[2]) { var num = parseFloat(result[1]); var mult = this.powers[result[2]] || 1; return num * mult; } else { return value; } }, add: function(element, interval, label, fn, times, belay) { var counter = 0; if (jQuery.isFunction(label)) { if (!times) times = fn; fn = label; label = interval; } interval = jQuery.timer.timeParse(interval); if (typeof interval != 'number' || isNaN(interval) || interval <= 0) return; if (times && times.constructor != Number) { belay = !!times; times = 0; } times = times || 0; belay = belay || false; var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {}); if (!timers[label]) timers[label] = {}; fn.timerID = fn.timerID || this.guid++; var handler = function() { if (belay && this.inProgress) return; this.inProgress = true; if ((++counter > times && times !== 0) || fn.call(element, counter) === false) jQuery.timer.remove(element, label, fn); this.inProgress = false; }; handler.timerID = fn.timerID; if (!timers[label][fn.timerID]) timers[label][fn.timerID] = window.setInterval(handler,interval); this.global.push( element ); }, remove: function(element, label, fn) { var timers = jQuery.data(element, this.dataKey), ret; if ( timers ) { if (!label) { for ( label in timers ) this.remove(element, label, fn); } else if ( timers[label] ) { if ( fn ) { if ( fn.timerID ) { window.clearInterval(timers[label][fn.timerID]); delete timers[label][fn.timerID]; } } else { for ( var fn in timers[label] ) { window.clearInterval(timers[label][fn]); delete timers[label][fn]; } } for ( ret in timers[label] ) break; if ( !ret ) { ret = null; delete timers[label]; } } for ( ret in timers ) break; if ( !ret ) jQuery.removeData(element, this.dataKey); } } } }); jQuery(window).bind("unload", function() { jQuery.each(jQuery.timer.global, function(index, item) { jQuery.timer.remove(item); }); }); $(document).ready(function(){ $("#photos").galleryView({ panel_width:860, panel_height:570, frame_width:90, frame_height:60, frame_margin:8, border:"none", transition_interval:5000, overlay_height:70, overlay_text_color:"white", overlay_font_size:"12px", background_color:"white", pause_on_hover:true, filmstrip_position_top:4, wrapper_width:760, pointer_width:3, pointer_color:"#4A82F0", navigation_button_width:18}); $("#gb_blocks").delegate(".gbbb_imglink","mouseenter",function(a){ $(a.currentTarget).addClass("gbbb_imglink_hover") }).delegate(".gbbb_imglink","mouseleave",function(a){ $(a.currentTarget).removeClass("gbbb_imglink_hover")}); (function(){if($(window).width()<1220){return}var e=($.browser.msie&&($.browser.version<=6))?true:false;var f=false;var b=function(p,v){f=true;var u=null;var r=$(window);var q=r.scrollTop();var t=p-q;var s=0;function o(){t=Math.floor(t/2);s+=t;r.scrollTop(q+s);if(Math.abs(t)>2){u=setTimeout(o,50)}else{r.scrollTop(p);clearTimeout(u);f=false;v&&v()}}o()};var g=$("#gallery_nav").show();var k=null;var l=[];var i=5;var n=function(){k=g.find("a");for(var p=0,o=k.length;pl[0]){if(!m){g.addClass(h);m=true}}else{if(m){g.removeClass(h);m=false}}var o=0;for(var q=0,p=l.length;ql[q]){o=q+1}else{break}}c();k.eq(o).addClass("gallery_nav_selected")},50)};$(window).bind("scroll",a);g.delegate("a","click",function(q){var p=$(q.currentTarget);var o=p.attr("href").substring(1);b($("#"+o).offset().top,function(){a()});return false});setTimeout(a,200)})();setTimeout(function(){PageData.user_info=PageData.user;var a={user:PageData.user_info,tbs:PageData.tbs};$("#photos").delegate(".panel a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=top10")});$("#gbc_right_item_tpht").delegate("a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=tpht")});$("#gbc_right_item_rmhd").delegate("a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=rmhd")});$("#gbc_right_recommend").delegate("a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=recommend")});$("#gb_block_ylys").delegate(".gbb_body a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=ylys")});$("#gb_block_bxeg").delegate(".gbb_body a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=bxeg")});$("#gb_block_zbxc").delegate(".gbb_body a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=zbxc")});$("#gb_block_nvshen").delegate(".gbb_body a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=nvshen")});$("#gb_block_dmmt").delegate(".gbb_body a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=dmmt")});$("#gb_block_jpmt").delegate(".gbb_body a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=jpmt")});$("#gb_block_jxtc").delegate(".gbb_body a","click",function(){$.stats.sendRequest("fr=tb0_forum&st_mod=pic_square&st_type=jxtc")})})()});