////////////////////////////////////////////////////////////////////////////////// // Cloud Zoom V1.0.2 // (c) 2010 by R Cecco. // MIT License // // Please retain this copyright header in all versions of the software ////////////////////////////////////////////////////////////////////////////////// (function($){$(document).ready(function(){$('.cloud-zoom, .cloud-zoom-gallery').CloudZoom();}); function format(str){for(var i=1;iLoading...',w/3,(w/2)-(w/6))).find(':last').css('opacity',0.5);}},200); var ie6FixRemove=function(){if($ie6Fix!==null){$ie6Fix.remove();$ie6Fix=null;}}; this.removeBits=function(){if(lens){lens.remove(); lens=null;};if($tint){$tint.remove(); $tint=null;}; if(softFocus){softFocus.remove(); softFocus=null;}; ie6FixRemove(); $('.cloud-zoom-loading',jWin.parent()).remove();}; this.destroy=function(){jWin.data('zoom',null); if($mouseTrap){$mouseTrap.unbind(); $mouseTrap.remove(); $mouseTrap=null;}; if(zoomDiv){zoomDiv.remove(); zoomDiv=null;}; this.removeBits();}; this.fadedOut=function(){if(zoomDiv){zoomDiv.remove(); zoomDiv=null;}; this.removeBits();}; this.controlLoop=function(){if(lens){var x=(mx-sImg.offset().left-(cw*0.5))>>0; var y=(my-sImg.offset().top-(ch*0.5))>>0; if(x<0){x=0;}else if(x>(sImg.outerWidth()-cw)){x=(sImg.outerWidth()-cw);} if(y<0){y=0;}else if(y>(sImg.outerHeight()-ch)){y=(sImg.outerHeight()-ch);} lens.css({left:x,top:y}); lens.css('background-position',(-x)+'px '+(-y)+'px'); destU=(((x)/sImg.outerWidth())*zoomImage.width)>>0;destV=(((y)/sImg.outerHeight())*zoomImage.height)>>0; currU+=(destU-currU)/opts.smoothMove;currV+=(destV-currV)/opts.smoothMove; zoomDiv.css('background-position',(-(currU>>0)+'px ')+(-(currV>>0)+'px'));} controlTimer=setTimeout(function(){ctx.controlLoop();},30);}; this.init2=function(img,id){filesLoaded++; if(id===1){zoomImage=img;} if(filesLoaded===2){this.init();}}; this.init=function(){$('.cloud-zoom-loading',jWin.parent()).remove(); $mouseTrap=jWin.parent().append(format("
",sImg.outerWidth(),sImg.outerHeight(),0,0)).find(':last'); var touchy=("ontouchstart"in document.documentElement)?true:false; var m_move='touchmove mousemove'; var m_end='touchend mouseleave'; var m_ent='touchstart mouseenter'; var m_click='touchstart click'; $mouseTrap.bind(m_move,this,function(e){mx=(typeof(e.originalEvent.touches)!='undefined')?e.originalEvent.touches[0].pageX:e.pageX;my=(typeof(e.originalEvent.touches)!='undefined')?e.originalEvent.touches[0].pageY:e.pageY;});$mouseTrap.bind(m_end,this,function(event){clearTimeout(controlTimer); if(lens){lens.fadeOut(299);} if($tint){$tint.fadeOut(299);} if(softFocus){softFocus.fadeOut(299);} zoomDiv.fadeOut(300,function(){ctx.fadedOut(); if($mouseTrap!=null)$mouseTrap.css("z-index","auto");}); return false;}); $mouseTrap.bind(m_ent,this,function(event){$mouseTrap.css("z-index","999"); if(touchy){event.preventDefault();} mx=(typeof(event.originalEvent.touches)!='undefined')?event.originalEvent.touches[0].pageX:event.pageX; my=(typeof(event.originalEvent.touches)!='undefined')?event.originalEvent.touches[0].pageY:event.pageY; zw=event.data; if(zoomDiv){zoomDiv.stop(true,false);zoomDiv.remove();} var xPos=opts.adjustX,yPos=opts.adjustY; var siw=sImg.outerWidth(); var sih=sImg.outerHeight(); var w=opts.zoomWidth; var h=opts.zoomHeight; if(opts.zoomWidth=='auto'){w=siw;} if(opts.zoomHeight=='auto'){h=sih;} var appendTo=jWin.parent(); switch(opts.position) {case'top':yPos-=h;break; case'right':xPos+=siw;break; case'bottom':yPos+=sih;break; case'left':xPos-=w;break; case'inside':w=siw;h=sih;break; default:appendTo=$('#'+opts.position); if(!appendTo.length){appendTo=jWin;xPos+=siw;yPos+=sih;} else{w=appendTo.innerWidth(); h=appendTo.innerHeight();}} zoomDiv=appendTo.append(format('',xPos,yPos,w,h,zoomImage.src)).find(':last'); if(sImg.attr('title')&&opts.showTitle){zoomDiv.append(format('
%0
',sImg.attr('title'))).find(':last').css('opacity',opts.titleOpacity);} if($.browser.msie&&$.browser.version<7) {$ie6Fix=$('').css({position:"absolute",left:xPos,top:yPos,zIndex:0});} zoomDiv.fadeIn(500); if(lens){lens.remove(); lens=null;} cw=(sImg.outerWidth()/zoomImage.width)*zoomDiv.width();ch=(sImg.outerHeight()/zoomImage.height)*zoomDiv.height(); lens=jWin.append(format("",cw,ch)).find(':last'); $mouseTrap.css('cursor',lens.css('cursor')); var noTrans=false; if(opts.tint){lens.css('background','url("'+sImg.attr('src')+'")'); $tint=jWin.append(format('
',sImg.outerWidth(),sImg.outerHeight(),opts.tint)).find(':last'); $tint.css('opacity',opts.tintOpacity); noTrans=true; $tint.fadeIn(500);} if(opts.softFocus){lens.css('background','url("'+sImg.attr('src')+'")'); softFocus=jWin.append(format('
',sImg.outerWidth()-2,sImg.outerHeight()-2,opts.tint)).find(':last'); softFocus.css('background','url("'+sImg.attr('src')+'")'); softFocus.css('opacity',0.5); noTrans=true; softFocus.fadeIn(500);} if(!noTrans){lens.css('opacity',opts.lensOpacity);} if(opts.position!=='inside'){lens.fadeIn(500);}zw.controlLoop(); return;});}; img1=new Image(); $(img1).load(function(){ctx.init2(this,0);}); img1.src=sImg.attr('src'); img2=new Image();$(img2).load(function(){ctx.init2(this,1);}); img2.src=jWin.attr('href');} $.fn.CloudZoom=function(options){try{document.execCommand("BackgroundImageCache",false,true);} catch(e){}this.each(function(){var relOpts,opts;eval('var a = {'+$(this).attr('rel')+'}'); relOpts=a; if($(this).is('.cloud-zoom')){$(this).css({'position':'relative','display':'block'}); $('img',$(this)).css({'display':'block'}); if($(this).parent().attr('id')!='wrap'){$(this).wrap('
');} opts=$.extend({},$.fn.CloudZoom.defaults,options); opts=$.extend({},opts,relOpts); $(this).data('zoom',new CloudZoom($(this),opts));} else if($(this).is('.cloud-zoom-gallery')){opts=$.extend({},relOpts,options); $(this).data('relOpts',opts); var m_click='touchstart click'; $(this).bind(m_click,$(this),function(event){var data=event.data.data('relOpts'); $('#'+data.useZoom).data('zoom').destroy(); $('#'+data.useZoom).attr('href',event.data.attr('href')); $('#'+data.useZoom+' img').attr('src',event.data.data('relOpts').smallImage); $('#'+event.data.data('relOpts').useZoom).CloudZoom(); return false;});}}); return this;}; $.fn.CloudZoom.defaults={zoomWidth:106,zoomHeight:106,position:'right',tint:false,tintOpacity:0.5,lensOpacity:0.5,softFocus:false,smoothMove:3,showTitle:true,titleOpacity:0.5,adjustX:0,adjustY:0};})(jQuery);