1367 1081 1696 1084 1993 1319 1813 1015 1054 1751 1971 1348 1227 1465 1434 1915 1268 1892 1440 1002 1837 1523 1447 1653 1940 1510 1260 1813 1131 1972 1584 1366 1882 1818 1233 1754 1142 1719 1815 1091 1775 1665 1458 1522 1756 1154 1379 1193 1779 1582 1831 1082 1612 1563 1173 1180 1254 1983 1323 1302 1998 1419 1978 1637 1623 1770 1555 1427 1654 1593 1644 1775 1620 1611 1261 1022 1370 1636 1054 1104 1492 1131 1726 1214 1548 1206 1581 1090 1738 1144 1614 1258 1609 1331 1167 1340 1309 1707 1029 //** Simple Controls Gallery- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com //** Dec 7th, 08'- Script created (Requires jquery 1.2.x) //** February 6th, 09'- Updated to v 1.3: //1) Adds Description Panel to optionally show a textual description for each slide //2) In Auto Play mode, you can now set the number of cycles before gallery stops. //3) Inside oninit() and onslide(), keyword "this" now references the current gallery instance var simpleGallery_navpanel={ panel: {height:'60px', opacity:0.5, paddingTop:'5px', fontStyle:'bold 11px Tahoma'}, //customize nav panel container images: [ 'left.gif', 'play.gif', 'right.gif', 'pause.gif'], //nav panel images (in that order) imageSpacing: {offsetTop:[-4, 0, -4], spacing:10}, //top offset of left, play, and right images, PLUS spacing between the 3 images slideduration: 500 //duration of slide up animation to reveal panel } function simpleGallery(settingarg){ this.setting=settingarg settingarg=null var setting=this.setting setting.panelheight=(parseInt(setting.navpanelheight)>5)? parseInt(setting.navpanelheight) : parseInt(simpleGallery_navpanel.panel.height) setting.fadeduration=parseInt(setting.fadeduration) setting.curimage=(setting.persist)? simpleGallery.routines.getCookie("gallery-"+setting.wrapperid) : 0 setting.curimage=setting.curimage || 0 //account for curimage being null if cookie is empty setting.ispaused=!setting.autoplay[0] //ispaused reflects current state of gallery, autoplay[0] indicates whether gallery is set to auto play setting.currentstep=0 //keep track of # of slides slideshow has gone through setting.totalsteps=setting.imagearray.length*setting.autoplay[2] //Total steps limit: # of images x # of user specified cycles setting.fglayer=0, setting.bglayer=1 //index of active and background layer (switches after each change of slide) setting.oninit=setting.oninit || function(){} setting.onslide=setting.onslide || function(){} var preloadimages=[], longestdesc=null //preload images setting.longestdesc="" //get longest description of all slides. If no desciptions defined, variable contains "" for (var i=0; isetting.longestdesc.length) setting.longestdesc=setting.imagearray[i][3] } var slideshow=this jQuery(document).ready(function($){ var setting=slideshow.setting setting.$wrapperdiv=$('#'+setting.wrapperid).css({position:'relative', visibility:'visible', background:'black', overflow:'hidden', width:setting.dimensions[0], height:setting.dimensions[1]}).empty() //main gallery DIV if (setting.$wrapperdiv.length==0){ //if no wrapper DIV found alert("Error: DIV with ID \""+setting.wrapperid+"\" not found on page.") return } setting.$gallerylayers=$('
') //two stacked DIVs to display the actual slide .css({position:'absolute', left:0, top:0}) .appendTo(setting.$wrapperdiv) setting.gallerylayers=setting.$gallerylayers.get() //cache stacked DIVs as DOM objects setting.navbuttons=simpleGallery.routines.addnavpanel(setting) //get 4 nav buttons DIVs as DOM objects if (setting.longestdesc!="") //if at least one slide contains a description (feature is enabled) setting.descdiv=simpleGallery.routines.adddescpanel(setting) $(setting.navbuttons).filter('img.navimages').css({opacity:0.8}) .bind('mouseover mouseout', function(e){ $(this).css({opacity:(e.type=="mouseover")? 1 : 0.8}) }) .bind('click', function(e){ var keyword=e.target.title.toLowerCase() slideshow.navigate(keyword) //assign behavior to nav images }) setting.$wrapperdiv.bind('mouseenter', function(){slideshow.showhidenavpanel('show')}) setting.$wrapperdiv.bind('mouseleave', function(){slideshow.showhidenavpanel('hide')}) slideshow.showslide(setting.curimage) //show initial slide setting.oninit.call(slideshow) //trigger oninit() event $(window).bind('unload', function(){ //clean up and persist $(slideshow.setting.navbuttons).unbind() if (slideshow.setting.persist) //remember last shown image's index simpleGallery.routines.setCookie("gallery-"+setting.wrapperid, setting.curimage) jQuery.each(slideshow.setting, function(k){ if (slideshow.setting[k] instanceof Array){ for (var i=0; i0? setting.curimage-1 : totalimages-1) : Math.min(keyword, totalimages-1) setting.gallerylayers[setting.bglayer].innerHTML=simpleGallery.routines.getSlideHTML(setting.imagearray[imgindex]) setting.$gallerylayers.eq(setting.bglayer).css({zIndex:1000, opacity:0}) //background layer becomes foreground .stop().css({opacity:0}).animate({opacity:1}, setting.fadeduration, function(){ //Callback function after fade animation is complete: clearTimeout(setting.playtimer) setting.gallerylayers[setting.bglayer].innerHTML=null //empty bglayer (previously fglayer before setting.fglayer=setting.bglayer was set below) try{ setting.onslide.call(slideshow, setting.gallerylayers[setting.fglayer], setting.curimage) }catch(e){ alert("Simple Controls Gallery: An error has occured somwhere in your code attached to the \"onslide\" event: "+e) } setting.currentstep+=1 if (setting.autoplay[0]){ if (setting.currentstep<=setting.totalsteps) setting.playtimer=setTimeout(function(){slideshow.showslide('next')}, setting.autoplay[1]) else slideshow.navigate("play/pause") } }) //end callback function setting.gallerylayers[setting.fglayer].style.zIndex=999 //foreground layer becomes background setting.fglayer=setting.bglayer setting.bglayer=(setting.bglayer==0)? 1 : 0 setting.curimage=imgindex setting.navbuttons[3].innerHTML=(setting.curimage+1) + '/' + setting.imagearray.length if (setting.imagearray[imgindex][3]){ //if this slide contains a description setting.$descpanel.css({visibility:'visible'}) setting.descdiv.innerHTML=setting.imagearray[imgindex][3] } else if (setting.longestdesc!=""){ //if at least one slide contains a description (feature is enabled) setting.descdiv.innerHTML=null setting.$descpanel.css({visibility:'hidden'}) } }, showhidenavpanel:function(state){ var setting=this.setting var endpoint=(state=="show")? setting.dimensions[1]-setting.panelheight : this.setting.dimensions[1] setting.$navpanel.stop().animate({top:endpoint}, simpleGallery_navpanel.slideduration) if (setting.longestdesc!="") //if at least one slide contains a description (feature is enabled) this.showhidedescpanel(state) }, showhidedescpanel:function(state){ var setting=this.setting var endpoint=(state=="show")? 0 : -setting.descpanelheight setting.$descpanel.stop().animate({top:endpoint}, simpleGallery_navpanel.slideduration) } } simpleGallery.routines={ getSlideHTML:function(imgelement){ var layerHTML=(imgelement[1])? '\n' : '' //hyperlink slide? layerHTML+='' layerHTML+=(imgelement[1])? '' : '' return layerHTML //return HTML for this layer }, addnavpanel:function(setting){ var interfaceHTML='' for (var i=0; i<3; i++){ var imgstyle='position:relative; border:0; cursor:hand; cursor:pointer; top:'+simpleGallery_navpanel.imageSpacing.offsetTop[i]+'px; margin-right:'+(i!=2? simpleGallery_navpanel.imageSpacing.spacing+'px' : 0) var title=(i==0? 'Prev' : (i==1)? (setting.ispaused? 'Play' : 'Pause') : 'Next') var imagesrc=(i==1)? simpleGallery_navpanel.images[(setting.ispaused)? 1 : 3] : simpleGallery_navpanel.images[i] interfaceHTML+=' ' } interfaceHTML+='
' + (setting.curimage+1) + '/' + setting.imagearray.length + '
' setting.$navpanel=$('') .css({position:'absolute', width:'100%', height:setting.panelheight, left:0, top:setting.dimensions[1], font:simpleGallery_navpanel.panel.fontStyle, zIndex:'1001'}) .appendTo(setting.$wrapperdiv) $('') //create inner nav panel DIVs .css({position:'absolute', left:0, top:0, width:'100%', height:'100%'}) .eq(0).css({background:'black', opacity:simpleGallery_navpanel.panel.opacity}).end() //"navpanelbg" div .eq(1).css({paddingTop:simpleGallery_navpanel.panel.paddingTop, textAlign:'center', color:'white'}).html(interfaceHTML).end() //"navpanelfg" div .appendTo(setting.$navpanel) return setting.$navpanel.find('img.navimages, div.gallerystatus').get() //return 4 nav related images and DIVs as DOM objects }, adddescpanel:function(setting){ setting.$descpanel=$('
') .css({position:'absolute', width:'100%', left:0, top:-1000, zIndex:'1001'}) .find('div').css({position:'absolute', left:0, top:0, width:'100%'}) .eq(0).css({background:'black', opacity:simpleGallery_navpanel.panel.opacity}).end() //"gallerydescbg" div .eq(1).css({color:'white'}).end() //"gallerydescfg" div .eq(2).html(setting.longestdesc).end().end() .appendTo(setting.$wrapperdiv) var $gallerydesctext=setting.$descpanel.find('div.gallerydesctext') setting.descpanelheight=$gallerydesctext.outerHeight() setting.$descpanel.css({top:-setting.descpanelheight, height:setting.descpanelheight}).find('div').css({height:'100%'}) return setting.$descpanel.find('div.gallerydesctext').get(0) //return gallery description DIV as a DOM object }, getCookie:function(Name){ var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair if (document.cookie.match(re)) //if cookie found return document.cookie.match(re)[0].split("=")[1] //return its value return null }, setCookie:function(name, value){ document.cookie = name+"=" + value + ";path=/" } }