自定义放大镜插件 兼容ie6

样式

@charset "utf-8";
/* CSS Document */
* {padding: 0;margin: 0;}
body {margin: 0px;padding: 0px;min-width:1200px;}

/*相关样式*/
.MagicZoomBox { background:#fff;}
.MagicZoomBox span { background:url(../images/darkbg.png) repeat}//鼠标移动的背景图片
.MagicZoomSum span { border:1px solid #ddd;}
.MagicZoomSum span.sel { border:1px solid #f60;}

.showpage { width:400px; position:relative;}
.showpage a { display:block; width:15px; border:1px solid #ddd; height:60px; line-height:60px; background:#eee; text-align:center; font-size:18px; top:4px; position:absolute; left:0; text-decoration:none; color:#999;}
.showpage .next { left:auto; right:-40px;}
.showpage a:hover { background:#ccc; color:#777;}
body.product-detail .product-detail-content{
    padding: 20px;
}
.showSum{

}
.tsShopContainer{
    width: 420px;
    height: 420px;
    border: solid 1px #E3E3E3;
    text-align: center;
    vertical-align: middle;
    padding: 10px;
    float: left;
}
.showBox{
    width: 400px;
    height: 400px;

}
.showBox.loadings{
    overflow: hidden;
}
.showBox.loadings img{
    max-width: 400px;
    max-height: 400px;

}
.showBox a{
    margin:0 auto;
}





.MagicZoomSum span.sel{
    border-color: #f56515;
}
.MagicZoomSum span{
    border: 1px solid #E3E3E3;
}
/*如果direction  属性是 Y 将showpage 的class 设置为 pageList MagicZoomSum*/
.MagicZoomSum.panelY {
    float: left;
    left: 0;
    margin-right:10px;
    top:20px;
    width:72px
}
.pageList{
    width: 70px;
    text-align: center;
    position: absolute;
}
.pageList a{
    height: 20px;
    display: inline-block;
    width: 70px;
    left: 0;
    position: absolute;
    background-color: #f7f7f7;
    line-height: 22px;
}
.pageList i{
    font-size: 22px;
}
.pageList .next{
    top:414px;
    right: 0;
}
.pageList .last{
    top:-7px;
}
.MagicZoomSum.panelX {
    float: left;
    left: 20px;
    margin-bottom:10px;
}
html 文档包含api 和使用方法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN">
<title>商品放大镜</title>
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="copyright" content="" />

<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/MagicZoomJquery.js"></script>

<link href="css/common.css" rel="stylesheet" type="text/css" />

<script type="text/javascript">
  $(document).ready(function(){
     var showproduct = {
        "boxid":"showBox",
        "sumid":"showSum",
        magicNumber:2,//缩放的比例默不穿默认是2
        "boxw": 400,//放大显示容器的宽度
        "boxh": 400,//放大显示容器的宽度
        "sumw": 70,//列表每个宽度,该版本中请把宽高填写成一样
        "sumh": 70,//列表每个高度,该版本中请把宽高填写成一样
        "sumi": 7,//列表间隔
        "sums": 5,//列表显示个数
        "sumsel": "sel",
        "step":1,
        direction:"X", //如果设置的是X是 去掉showpage 中的pageList
        "sumborder":1,//列表边框,没有边框填写0,边框在css中修改
        "lastid":"showlast",
        "nextid":"shownext"
        };//参数定义   
    $.MagicZoom.MagicZoomInit(showproduct,function(){
          $("#showBox").removeClass("loadings")

    });
  });
</script>
</head>

<body>
<div style="width:600px; margin:0 auto;">
<p>欢迎使用常用商品详情页商品放大镜效果,兼容IE6及以上版本</p>
<p style="padding-bottom:50px;">图片标签上请务必注意width和height的值,这是必要的值,图片随意形状,随意大小,但必须填写该两个值,图片个数大于1就行,数量不固定</p>
<!--页面必要代码,img标签上请务必带上图片真实尺寸px-->
   <p class="showpage ">
   <a href="javascript:void(0);" class="last" id="showlast"> < </a>
   <a href="javascript:void(0);" class="next" id="shownext"> > </a>
</p>
   <div id="showSum" class="showSum"></div><!--展示图片里边-->
   <div class="tsShopContainer">
<div id="showBox" class="showBox loadings" >
   <img src="images/photos/img01.png" />
   <img src="images/photos/img02.png"  />
   <img src="images/photos/img03.png"  />
   <img src="images/photos/img04.png" />
   <img src="images/photos/img05.png"  />
   <img src="images/photos/img06.png"  />
   <img src="images/photos/img07.png"  />
   <img src="images/photos/img08.png" />
   <img src="images/photos/img09.png"  />
</div><!--展示图片盒子-->

</div>

</div>
</body>
</html>
 核心javascript 代码 源码

/*

 */
jQuery.MagicZoom = {
   isLoad:true,
tsScrollResize:function(maxWidth,maxHeight,id){
   var maxWidth =maxWidth;
   var maxHeight = maxHeight;
   var myimgList = $("#"+id).find("img");
   var self=this;
   $.each(myimgList,function(index){
      myimg=this;
      var imgNew = new Image();
      imgNew.src = myimg.src;
      //将myimg存起来,相当于一个参数,不然异步的时候执行太快,一直是最后一张图
      imgNew.preImg = myimg;
      //这个是为了防遨游等浏览器,图片宽、高加为0执行
      if (imgNew.width == 0 || imgNew.height == 0) {
         imgNew.onload = function () {
            self.tsScrollResizeHd(imgNew, maxWidth, maxHeight, this.preImg);
         };
      }
      else {
         if(index==myimgList.length-1){
            self.isLoad=false;
         }
         self.tsScrollResizeHd(imgNew, maxWidth, maxHeight, myimg);
      }
   });
},
tsScrollResizeHd:function(imgNew, maxWidth, maxHeight, myimg) {
   var hRatio;
   var wRatio;
   var Ratio = 1;
   var w = imgNew.width;
   var h = imgNew.height;
   wRatio = maxWidth / w;
   hRatio = maxHeight / h;
   if (maxWidth == 0 && maxHeight == 0) {
      Ratio = 1;
   } else if (maxWidth == 0) {
      if (hRatio < 1) Ratio = hRatio;
   } else if (maxHeight == 0) {
      if (wRatio < 1) Ratio = wRatio;
   } else if (wRatio < 1 || hRatio < 1) {
      Ratio = (wRatio <= hRatio ? wRatio : hRatio);
   }
   if (Ratio < 1) {

      w = w * Ratio;
      h = h * Ratio;
   }

   if (h % 2 != 0) {2
      h = h - 1;
   }

   myimg.height = h;
   myimg.width = w;
   $(myimg).css({"width":w+"px",height:h+"px"});

},
MagicZoomInit:function(_obj,callback){
   var self=this;
   var _box = $("#"+_obj.boxid);
   var _sum = $("#"+_obj.sumid);
   var _magicNumber=_obj.magicNumber||2
   var  time=setInterval(function(){
      if(self.isLoad){
         self.tsScrollResize(_obj.boxw,_obj.boxh,_obj.boxid);
      }else{
         clearInterval(time);
         _box.addClass("MagicZoomBox");
         _sum.addClass("MagicZoomSum");
         _obj.step=_obj.step||1;
         var _last,_next;
         var _imgarr = _box.find("img");
         var _length = _imgarr.length;
         var _index = 0;
         var _arr = new Array();
         _sum.html("");
         _sum.append("<p style='position:absolute;left:0;top:0;'></p>");
         var _sumbox = _sum.find("p");

         for(var i=0;i<_length;i++){
            _arr[i] = new Array();
            _arr[i][0] = _imgarr.eq(i).attr("src");
            _arr[i][1] = _imgarr.eq(i).attr("width");
            _arr[i][2] = _imgarr.eq(i).attr("height");
            var _scale = _arr[i][1]/_arr[i][2];
            if(_scale == 1){
               _arr[i][3] = _obj.boxw;//width
               _arr[i][4] = _obj.boxh;//height
               _arr[i][5] = 0;//top
               _arr[i][6] = 0;//left
               _arr[i][7] = _obj.boxw/_magicNumber;
               _arr[i][8] = _obj.boxw*_magicNumber;//width
               _arr[i][9] = _obj.boxh*_magicNumber;//height
               _sumbox.append("<span><img src='"+_imgarr.eq(i).attr("src")+"' width='"+_obj.sumw+"' height='"+_obj.sumh+"' /></span>");
            }
            if(_scale > 1){
               _arr[i][3] = _obj.boxw;//width
               _arr[i][4] = _obj.boxw/_scale;
               _arr[i][5] = (_obj.boxh-_arr[i][4])/_magicNumber;
               _arr[i][6] = 0;//left
               _arr[i][7] = _arr[i][4]/_magicNumber;
               _arr[i][8] = _obj.boxh*_magicNumber*_scale;//width
               _arr[i][9] = _obj.boxh*_magicNumber;//height
               var _place = _obj.sumh - (_obj.sumw/_scale);
               _place = _place/_magicNumber;
               _sumbox.append("<span><img src='"+_imgarr.eq(i).attr("src")+"' width='"+_obj.sumw+"' style='top:"+_place+"px;' /></span>");
            }
            if(_scale < 1){
               _arr[i][3] = _obj.boxh*_scale;//width
               _arr[i][4] = _obj.boxh;//height
               _arr[i][5] = 0;//top
               _arr[i][6] = (_obj.boxw-_arr[i][3])/_magicNumber;
               _arr[i][7] = _arr[i][3]/_magicNumber;
               _arr[i][8] = _obj.boxw*_magicNumber;//width
               _arr[i][9] = _obj.boxw*_magicNumber/_scale;
               var _place = _obj.sumw - (_obj.sumh*_scale);
               _place = _place/_magicNumber;
               _sumbox.append("<span><img src='"+_imgarr.eq(i).attr("src")+"' height='"+_obj.sumh+"' style='left:"+_place+"px;' /></span>");
            }
         }
         _imgarr.remove();

         _sum.append("<div style='clear:both;width:100%;'></div>");
         var _sumarr = _sum.find("span");
         var _sumimg = _sum.find("img");
         _sumarr.eq(_index).addClass(_obj.sumsel);
         var _border = _obj.sumborder*2 + _obj.sumh;
      /* var _border =_obj.sumh;*/
         var _sumwidth = (_border+_obj.sumi)*_obj.sums;
         var _sumboxwidth = (_border+_obj.sumi)*_length;
         if(_obj.direction=="X") {
            _sum.css({
               "overflow": "hidden",
               "height": _border + "px",
               "width": _sumwidth + "px",
               "position": "relative"
            }).addClass("panelX");
            _sumbox.css({
               "width":_sumboxwidth+"px"
            });
            _sumarr.css({
               "float":"left",
               "margin-left":_obj.sumi+"px",
               "width":_obj.sumw+"px",
               "height":_obj.sumh+"px",
               "overflow":"hidden",
               "position":"relative"
            });
         } if(_obj.direction=="Y"){
            /*if(_length>_obj.sums){ //待定
             _sumwidth=(_sumwidth-_obj.sumi*2) //消除上下滚动间隔的误差
             }*/
            _sum.css({
               "overflow": "hidden",
               "height": _sumwidth+ "px",
               "width":_border+ "px",
               "position": "relative"
            }).addClass("panelY");;
            _sumbox.css({
               "height":_sumboxwidth+"px",
            });
            _sumarr.css({
               "float":"left",
               "margin-bottom":_obj.sumi+"px",
               "width":_obj.sumw+"px",
               "height":_obj.sumh+"px",
               "overflow":"hidden",
               "position":"relative"
            });
         }


         _sumimg.css({
            "max-width":"100%",
            "max-height":"100%",
            "position":"relative"
         });

         _box.append("<div style='position:relative;'><b style='display:block;'><img style='display:block;' src='' /></b><span style='position:absolute;left:0;top:0;display:none;z-index:5;'></span></div><p style='position:absolute;overflow:hidden;top:0;display:none;'><img style='max-width:none;max-height:none;position:relative;left:0;top:0;' src='' /></p>");
         var _glass = _box.find("span");
         var _boximg = _box.find("b img");
         var _imgout = _box.find("div");
         var _showbox = _box.find("p");
         var _showimg = _box.find("p img");

         _box.css({
            "width":_obj.boxw+"px",
            "height":_obj.boxh+"px",
            "position":"relative"
         });
         var _showboxleft = _obj.boxw + 10;
         _showbox.css({
            "width":_obj.boxw+"px",
            "height":_obj.boxh+"px",
            "left":_showboxleft+"px"
         });
         var imgPlaces = function(){

            _showimg.attr("src",_arr[_index][0]);
            _boximg.attr("src",_arr[_index][0]);
            _boximg.css({
               "width":_arr[_index][3]+"px",
               "height":_arr[_index][4]+"px"
            });
            _imgout.css({
               "width":_arr[_index][3]+"px",
               "height":_arr[_index][4]+"px",
               "top":_arr[_index][5]+"px",
               "left":_arr[_index][6]+"px",
               "position":"relative"
            });
            _glass.css({
               "width":_arr[_index][7]+"px",
               "height":_arr[_index][7]+"px"
            });
            _showimg.css({
               "width":_arr[_index][8]+"px",
               "height":_arr[_index][9]+"px"
            });

         };

         imgPlaces();

         _imgout.mousemove(function(e){
            var _gl_w = _glass.width()/2;
            var _maxX = _imgout.width()-_gl_w;
            var _maxY = _imgout.height()-_gl_w;
            var _moveX = 0,_moveY = 0;
            var _nowX = e.pageX - _imgout.offset().left;
            var _nowY = e.pageY - _imgout.offset().top;
            var _moveX = _nowX-_gl_w,_moveY = _nowY-_gl_w;

            if(_nowX <= _gl_w){ _moveX = 0; }
            if(_nowX >= _maxX){ _moveX = _maxX-_gl_w; }
            if(_nowY <= _gl_w){ _moveY = 0;}
            if(_nowY >= _maxY){ _moveY = _maxY-_gl_w;}
            _glass.css({"left":_moveX+"px","top":_moveY+"px"});

            var _imgX = -_moveX*_showbox.width()/_glass.width();
            var _imgY = -_moveY*_showbox.width()/_glass.width();
            _showimg.css({"left":_imgX+"px","top":_imgY+"px"});

         });//mouse END

         _imgout.mouseenter(function(){
            _glass.css("display","block");
            _showbox.css("display","block");
         });
         _imgout.mouseleave(function(){
            _glass.css("display","none");
            _showbox.css("display","none");
         });

         //列表部分
         var _nextbtn = $("#"+_obj.nextid);
         var _lastbtn = $("#"+_obj.lastid);
         var _moveindex = 0;//索引移动
         var _sumListMove = function(){
            var _leftmove = -_moveindex*(_border+_obj.sumi);
            if(_sumbox.is(":animated")){_sumbox.stop(true,true);}
            if(_obj.direction=="Y"){
               _sumbox.animate({top:_leftmove+"px"},300);
            }else{
               _sumbox.animate({left:_leftmove+"px"},300);

            }

            _sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);
            imgPlaces();
         };//fun END

         if(_length <= _obj.sums){
            var _place = (_obj.sums-_length)*_border/_magicNumber;
            if(_obj.direction=="Y"){
               _sumbox.animate({top:0+"px"},300);
               _sum.css({top:0});
            }else{
               _sumbox.animate({left:0+"px"},300);
               _sum.css({left:0});
            }
            /* 居中设置办法*/
            /*if(_obj.direction=="Y"){
               _sumbox.animate({top:_place+"px"},300);

            }else{
               _sumbox.animate({left:_place+"px"},300);

            }*/
            _nextbtn.hide();
            _lastbtn.hide();
            _nextbtn.click(function(){
               _index+=_obj.step;
               if(_index >= _length){ _index=_length-1;}
               _sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);
               imgPlaces();
            });
            _lastbtn.click(function(){
               _index-=_obj.step;
               if(_index <= 0){ _index=0;}
               _sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);
               imgPlaces();
            });
         }else{
            var _maxNum = _length-_obj.sums;
            _nextbtn.click(function(){
               _moveindex+=_obj.step;;
               if(_moveindex >= _maxNum){ _moveindex=_maxNum; }
               if(_index <= _moveindex){ _index=_moveindex;}
               _sumListMove();
            });
            _lastbtn.click(function(){
               _moveindex-=_obj.step;
               if(_moveindex <= 0){ _moveindex=0;}
               if(_index >= _moveindex+_obj.sums){ _index=_moveindex+_obj.sums-1;}
               _sumListMove();
            });
         }//if END

         _sumarr.hover(function(){
            _index = $(this).index();
            _sumarr.eq(_index).addClass(_obj.sumsel).siblings().removeClass(_obj.sumsel);
            imgPlaces();
         });
         if(callback){
            callback();
         }
      }
   },300)



}//MagicZoomInit END
}//MagicZoom END
如有问题 和新的需求 请联系 1015003209@qq.com

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* * JQZoom Evolution 1.0.1 - Javascript Image magnifier * * Copyright (c) Engineer Renzi Marco(www.mind-projects.it) * * $Date: 12-12-2008 * * ChangeLog: * * $License : GPL,so any change to the code you should copy and paste this section,and would be nice to report this to me(renzi.mrc@gmail.com). */ (function($) { $.fn.jqzoom = function(options) { var settings = { zoomType: 'standard', //standard/reverse/innerzoom zoomWidth: 400, //zoomed width default width zoomHeight: 400, //zoomed div default width xOffset: 10, //zoomed div default offset yOffset: 0, position: "right" ,//zoomed div default position,offset position is to the right of the image lens:true, //zooming lens over the image,by default is 1; lensReset : false, imageOpacity: 0.2, title : true, alwaysOn: false, showEffect: 'show', hideEffect: 'hide', fadeinSpeed: 'fast', fadeoutSpeed: 'slow', preloadImages :true, showPreload: true, preloadText : 'Loading zoom', preloadPosition : 'center' //bycss }; //extending options options = options || {}; $.extend(settings, options); return this.each(function() { var a = $(this); var aTitle = a.attr('title'); //variabile per memorizzare il titolo href $(a).removeAttr('title'); $(a).css('outline-style','none'); var img = $("img", this); var imageTitle = img.attr('title'); img.removeAttr('title'); //variabile per memorizzare il titolo immagine var smallimage = new Smallimage( img ); var smallimagedata = {}; //imageborder var btop = 0; var bleft = 0; var loader = null; //variabile per memorizzare oggetto loader loader = new Loader(); var ZoomTitle = (trim(aTitle).length > 0) ? aTitle : (trim(imageTitle).length > 0) ? imageTitle : null; //setting zoomtitle var ZoomTitleObj = new zoomTitle(); var largeimage = new Largeimage( a[0].href ); var lens = new Lens(); var lensdata = {}; //lensborder var largeimageloaded = false; var scale = {}; //rapporto tra immagine grande e piccola scale.x/scale.y var stage = null; // quadrato che mostra l'immagine ingrandita var running = false; // running = true quando si verifica l'evento che mostra lo zoom(adesso mouseover). var mousepos = {}; var firstime = 0; var preloadshow = false; var isMouseDown = false; var dragstatus = false //loading smallimagedata smallimage.loadimage(); //ritorna false al click dell href $(this).click(function(){return false;}); //se settato alwaysOn attivo lo Zoom e lo mostro. //attivo al mouseover $(this).hover(function(e) { mousepos.x = e.pageX; mousepos.y = e.pageY; activate(); },function() { deactivate(); }); //ALWAYS ON if(settings.alwaysOn) { setTimeout(function(){activate();},150); } function activate() { if ( !running ) { //finding border smallimage.findborder(); running = true; //rimuovo il titolo al mouseover imageTitle = img.attr('title'); img.removeAttr('title'); aTitle = a.attr('title'); $(a).removeAttr('title'); //se non c?creo l'oggetto largeimage if (!largeimage || $.browser.safari) { largeimage = new Largeimage( a[0].href ); } //se l'immagine grande non ?stata caricata la carico if(!largeimageloaded || $.browser.safari) { largeimage.loadimage(); }else { //after preload if(settings.zoomType != 'innerzoom') { stage = new Stage(); stage.activate(); } lens = new Lens; lens.activate(); } //hack per MAC /* if($.browser.safari) { if(settings.zoomType != 'innerzoom') //se innerzoom non mostro la finestra dello zoom { stage = new Stage(); stage.activate(); } if($('div.jqZoomPup').length <= 0) { lens = new Lens(); } //if(settings.zoomType == 'innerzoom'){lens = new Lens()}; lens.activate(); (settings.alwaysOn) ? lens.center() : lens.setposition(null); } */ a[0].blur(); //alert($('div.jqZoomPup').length); return false; } } function deactivate() { if(settings.zoomType == 'reverse' && !settings.alwaysOn) { img.css({'opacity' : 1}); } if(!settings.alwaysOn) { //resetting parameters running = false; largeimageloaded = false; $(lens.node).unbind('mousemove'); lens.remove(); if($('div.jqZoomWindow').length >0) { stage.remove(); } if($('div.jqZoomTitle').length > 0) { ZoomTitleObj.remove(); } //resetting title img.attr('title',imageTitle); a.attr('title',aTitle); $().unbind(); a.unbind('mousemove'); //resetto il parametro che mi dice che ?la prima volta che mostor lo zoom firstime = 0; //remove ieiframe if(jQuery('.zoom_ieframe').length > 0) { jQuery('.zoom_ieframe').remove(); } }else { if(settings.lensReset) { switch(settings.zoomType) { case 'innerzoom': largeimage.setcenter(); break; default: lens.center(); break; } } } //non so se serve da provare if(settings.alwaysOn) { activate(); } }; //smallimage function Smallimage( image ) { this.node = image[0]; this.loadimage = function() { this.node.src = image[0].src; }; this.findborder = function() { var bordertop = ''; bordertop = $(img).css('border-top-width'); btop = ''; var borderleft = ''; borderleft = $(img).css('border-left-width'); bleft = ''; /*if($.browser.msie) { var temp = bordertop.split(' '); bordertop = temp[1]; var temp = borderleft.split(' '); borderleft = temp[1]; }*/ if(bordertop) { for(i=0;i<3;i++) { var x = []; x = bordertop.substr(i,1); if(isNaN(x) == false) { btop = btop +''+ bordertop.substr(i,1); }else { break; } } } if(borderleft) { for(i=0;i<3;i++) { if(!isNaN(borderleft.substr(i,1))) { bleft = bleft + borderleft.substr(i,1) }else { break; } } } btop = (btop.length > 0) ? eval(btop) : 0; bleft = (bleft.length > 0) ? eval(bleft) : 0; } this.node.onload = function() { //setto il cursor e la posizione dell'href a.css({'cursor':'crosshair','display':'block'}); if(a.css('position')!= 'absolute' && a.parent().css('position')) { a.css({'cursor':'crosshair','position':'relative','display':'block'}); } if(a.parent().css('position') != 'absolute') { a.parent().css('position','relative'); //a.css('position','relative'); } else{ //a.css('position','relative'); } if($.browser.safari || $.browser.opera) { $(img).css({position:'absolute',top:'0px',left:'0px'}); } /*if(a.css('position')!= 'absolute' && a.parent().css('position')) { a.css({'cursor':'crosshair','position':'relative','display':'block'}); } if(a.parent().css('position') != 'absolute') { alert('in'); a.parent().css('position','relative'); //a.css('position','relative'); } else{ //a.css('position','relative'); }*/ /* if(a.parent().css('position') != 'relative' && a.css('position') != 'absolute') { a.css({'cursor':'crosshair','position':'relative','display':'block'}); }*/ //al docuemnt ready viene caricato l'src quindi viene azionato l'onload e carico tutti i dati smallimagedata.w = $( this ).width(); smallimagedata.h = $( this ).height(); //non viene fatta assegnazione alla variabile globale smallimagedata.h = $( this ).height(); smallimagedata.pos = $( this ).offset(); smallimagedata.pos.l = $( this ).offset().left; smallimagedata.pos.t = $( this ).offset().top; smallimagedata.pos.r = smallimagedata.w + smallimagedata.pos.l; smallimagedata.pos.b = smallimagedata.h + smallimagedata.pos.t; //per sicurezza setto l'altezza e la width dell'href a.height(smallimagedata.h); a.width(smallimagedata.w); //PRELOAD IMAGES if(settings.preloadImages) { largeimage.loadimage(); } }; return this; }; //Lens function Lens() { //creating element and adding class this.node = document.createElement("div"); $(this.node).addClass('jqZoomPup'); this.node.onerror = function() { $( lens.node ).remove(); lens = new Lens(); lens.activate() ; }; //funzione privata per il caricamento dello zoom this.loadlens = function() { switch(settings.zoomType) { case 'reverse': this.image = new Image(); this.image.src = smallimage.node.src; // fires off async this.node.appendChild( this.image ); $( this.node ).css({'opacity' : 1}); break; case 'innerzoom': this.image = new Image(); this.image.src = largeimage.node.src; // fires off async this.node.appendChild( this.image ); $( this.node ).css({'opacity' : 1}); break default: break; } switch(settings.zoomType) { case 'innerzoom': lensdata.w = smallimagedata.w; lensdata.h = smallimagedata.h; break; default: lensdata.w = (settings.zoomWidth)/scale.x; lensdata.h = (settings.zoomHeight)/scale.y; break; } $( this.node ).css({ width: lensdata.w + 'px', height: lensdata.h + 'px', position: 'absolute', /*cursor: 'crosshair',*/ display: 'none', //border: '1px solid blue' borderWidth: 1+'px' }); a.append(this.node); } return this; }; Lens.prototype.activate = function() { //carico la lente this.loadlens(); switch(settings.zoomType) { case 'reverse': img.css({'opacity' : settings.imageOpacity}); (settings.alwaysOn) ? lens.center() : lens.setposition(null); //lens.center(); //bindo ad a il mousemove della lente a.bind( 'mousemove', function(e) { mousepos.x = e.pageX; mousepos.y = e.pageY; lens.setposition( e ); }); break; case 'innerzoom': // lens = new Lens(); // lens.activate(); $( this.node ).css({top : 0 ,left: 0}); if(settings.title) { ZoomTitleObj.loadtitle(); } largeimage.setcenter(); a.bind( 'mousemove', function(e) { mousepos.x = e.pageX; mousepos.y = e.pageY; largeimage.setinner( e ); /*if(settings.zoomType == 'innerzoom' && running) { $(a).mousemove(function(){ if($('div.jqZoomPup').length <= 0) { lens = new Lens(); lens.activate(); } }); }*/ /*if($('div.jqZoomPup').length <= 0) { lens = new Lens(); lens.activate(); }*/ }); break; default: /*$(document).mousemove(function(e){ if(isMouseDown && dragstatus != false){ lens.setposition( e ); } }); lens.center() dragstatus = 'on' $(document).mouseup(function(e){ if(isMouseDown && dragstatus != false){ isMouseDown = false; dragstatus = false; } }); $(this.node).mousedown(function(e){ $('div.jqZoomPup').css("cursor", "move"); $(this.node).css("position", "absolute"); // set z-index $(this.node).css("z-index", parseInt( new Date().getTime()/1000 )); if($.browser.safari) { $(a).css("cursor", "move"); } isMouseDown = true; dragstatus = 'on'; lens.setposition( e ); }); */ (settings.alwaysOn) ? lens.center() : lens.setposition(null); //bindo ad a il mousemove della lente $(a).bind( 'mousemove', function(e) { mousepos.x = e.pageX; mousepos.y = e.pageY; lens.setposition( e ); }); break; } return this; }; Lens.prototype.setposition = function( e) { if(e) { mousepos.x = e.pageX; mousepos.y = e.pageY; } if(firstime == 0) { var lensleft = (smallimagedata.w)/2 - (lensdata.w)/2 ; var lenstop = (smallimagedata.h)/2 - (lensdata.h)/2 ; //ADDED $('div.jqZoomPup').show() if(settings.lens) { this.node.style.visibility = 'visible'; } else { this.node.style.visibility = 'hidden'; $('div.jqZoomPup').hide(); } //ADDED firstime = 1; }else { var lensleft = mousepos.x - smallimagedata.pos.l - (lensdata.w)/2 ; var lenstop = mousepos.y - smallimagedata.pos.t -(lensdata.h)/2 ; } //a sinistra if(overleft()) { lensleft = 0 + bleft; }else //a destra if(overright()) { if($.browser.msie) { lensleft = smallimagedata.w - lensdata.w + bleft + 1 ; }else { lensleft = smallimagedata.w - lensdata.w + bleft - 1 ; } } //in alto if(overtop()) { lenstop = 0 + btop ; }else //sotto if(overbottom()) { if($.browser.msie) { lenstop = smallimagedata.h - lensdata.h + btop + 1 ; }else { lenstop = smallimagedata.h - lensdata.h - 1 + btop ; } } lensleft = parseInt(lensleft); lenstop = parseInt(lenstop); //setto lo zoom ed un eventuale immagine al centro $('div.jqZoomPup',a).css({top: lenstop,left: lensleft }); if(settings.zoomType == 'reverse') { $('div.jqZoomPup img',a).css({'position': 'absolute','top': -( lenstop - btop +1) ,'left': -(lensleft - bleft +1) }); } this.node.style.left = lensleft + 'px'; this.node.style.top = lenstop + 'px'; //setto l'immagine grande largeimage.setposition(); function overleft() { return mousepos.x - (lensdata.w +2*1)/2 - bleft < smallimagedata.pos.l; } function overright() { return mousepos.x + (lensdata.w + 2* 1)/2 > smallimagedata.pos.r + bleft ; } function overtop() { return mousepos.y - (lensdata.h + 2* 1)/2 - btop < smallimagedata.pos.t; } function overbottom() { return mousepos.y + (lensdata.h + 2* 1)/2 > smallimagedata.pos.b + btop; } return this; }; //mostra la lente al centro dell'immagine Lens.prototype.center = function() { $('div.jqZoomPup',a).css('display','none'); var lensleft = (smallimagedata.w)/2 - (lensdata.w)/2 ; var lenstop = (smallimagedata.h)/2 - (lensdata.h)/2; this.node.style.left = lensleft + 'px'; this.node.style.top = lenstop + 'px'; $('div.jqZoomPup',a).css({top: lenstop,left: lensleft }); if(settings.zoomType == 'reverse') { /*if($.browser.safari){ alert('safari'); alert(2*bleft); $('div.jqZoomPup img',a).css({'position': 'absolute','top': -( lenstop - btop +1) ,'left': -(lensleft - 2*bleft) }); }else {*/ $('div.jqZoomPup img',a).css({'position': 'absolute','top': -(lenstop - btop + 1) ,'left': -( lensleft - bleft +1) }); //} } largeimage.setposition(); if($.browser.msie) { $('div.jqZoomPup',a).show(); }else { setTimeout(function(){$('div.jqZoomPup').fadeIn('fast');},10); } }; //ritorna l'offset Lens.prototype.getoffset = function() { var o = {}; o.left = parseInt(this.node.style.left) ; o.top = parseInt(this.node.style.top) ; return o; }; //rimuove la lente Lens.prototype.remove = function() { if(settings.zoomType == 'innerzoom') { $('div.jqZoomPup',a).fadeOut('fast',function(){/*$('div.jqZoomPup img').remove();*/$(this).remove();}); }else { //$('div.jqZoomPup img').remove(); $('div.jqZoomPup',a).remove(); } }; Lens.prototype.findborder = function() { var bordertop = ''; bordertop = $('div.jqZoomPup').css('borderTop'); //alert(bordertop); lensbtop = ''; var borderleft = ''; borderleft = $('div.jqZoomPup').css('borderLeft'); lensbleft = ''; if($.browser.msie) { var temp = bordertop.split(' '); bordertop = temp[1]; var temp = borderleft.split(' '); borderleft = temp[1]; } if(bordertop) { for(i=0;i<3;i++) { var x = []; x = bordertop.substr(i,1); if(isNaN(x) == false) { lensbtop = lensbtop +''+ bordertop.substr(i,1); }else { break; } } } if(borderleft) { for(i=0;i<3;i++) { if(!isNaN(borderleft.substr(i,1))) { lensbleft = lensbleft + borderleft.substr(i,1) }else { break; } } } lensbtop = (lensbtop.length > 0) ? eval(lensbtop) : 0; lensbleft = (lensbleft.length > 0) ? eval(lensbleft) : 0; } //LARGEIMAGE function Largeimage( url ) { this.url = url; this.node = new Image(); /*if(settings.preloadImages) { preload.push(new Image()); preload.slice(-1).src = url ; }*/ this.loadimage = function() { if(!this.node) this.node = new Image(); this.node.style.position = 'absolute'; this.node.style.display = 'none'; this.node.style.left = '-5000px'; this.node.style.top = '10px'; loader = new Loader(); if(settings.showPreload && !preloadshow) { loader.show(); preloadshow = true; } document.body.appendChild( this.node ); this.node.src = this.url; // fires off async } this.node.onload = function() { this.style.display = 'block'; var w = Math.round($(this).width()); var h = Math.round($(this).height()); this.style.display = 'none'; //setting scale scale.x = (w / smallimagedata.w); scale.y = (h / smallimagedata.h); if($('div.preload').length > 0) { $('div.preload').remove(); } largeimageloaded = true; if(settings.zoomType != 'innerzoom' && running){ stage = new Stage(); stage.activate(); } if(running) { //alert('in'); lens = new Lens(); lens.activate() ; } //la attivo if($('div.preload').length > 0) { $('div.preload').remove(); } } return this; } Largeimage.prototype.setposition = function() { this.node.style.left = Math.ceil( - scale.x * parseInt(lens.getoffset().left) + bleft) + 'px'; this.node.style.top = Math.ceil( - scale.y * parseInt(lens.getoffset().top) +btop) + 'px'; }; //setto la posizione dell'immagine grande nel caso di innerzoom Largeimage.prototype.setinner = function(e) { this.node.style.left = Math.ceil( - scale.x * Math.abs(e.pageX - smallimagedata.pos.l)) + 'px'; this.node.style.top = Math.ceil( - scale.y * Math.abs(e.pageY - smallimagedata.pos.t)) + 'px'; $('div.jqZoomPup img',a).css({'position': 'absolute','top': this.node.style.top,'left': this.node.style.left }); }; Largeimage.prototype.setcenter = function() { this.node.style.left = Math.ceil(- scale.x * Math.abs((smallimagedata.w)/2)) + 'px'; this.node.style.top = Math.ceil( - scale.y * Math.abs((smallimagedata.h)/2)) + 'px'; $('div.jqZoomPup img',a).css({'position': 'absolute','top': this.node.style.top,'left': this.node.style.left }); }; //STAGE function Stage() { var leftpos = smallimagedata.pos.l; var toppos = smallimagedata.pos.t; //creating element and class this.node = document.createElement("div"); $(this.node).addClass('jqZoomWindow'); $( this.node ) .css({ position: 'absolute', width: Math.round(settings.zoomWidth) + 'px', height: Math.round(settings.zoomHeight) + 'px', display: 'none', zIndex: 10000, overflow: 'hidden' }); //fa il positionamento switch(settings.position) { case "right": leftpos = (smallimagedata.pos.r + Math.abs(settings.xOffset) + settings.zoomWidth < screen.width) ? (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset)) : (smallimagedata.pos.l - settings.zoomWidth - Math.abs(settings.xOffset)); topwindow = smallimagedata.pos.t + settings.yOffset + settings.zoomHeight; toppos = (topwindow < screen.height && topwindow > 0) ? smallimagedata.pos.t + settings.yOffset : smallimagedata.pos.t; break; case "left": leftpos = (smallimagedata.pos.l - Math.abs(settings.xOffset) - settings.zoomWidth > 0) ? (smallimagedata.pos.l - Math.abs(settings.xOffset) - settings.zoomWidth) : (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset)); topwindow = smallimagedata.pos.t + settings.yOffset + settings.zoomHeight; toppos = (topwindow < screen.height && topwindow > 0) ? smallimagedata.pos.t + settings.yOffset : smallimagedata.pos.t; break; case "top": toppos = (smallimagedata.pos.t - Math.abs(settings.yOffset) - settings.zoomHeight > 0) ? (smallimagedata.pos.t - Math.abs(settings.yOffset) - settings.zoomHeight) : (smallimagedata.pos.t + smallimagedata.h + Math.abs(settings.yOffset)); leftwindow = smallimagedata.pos.l + settings.xOffset + settings.zoomWidth; leftpos = (leftwindow < screen.width && leftwindow > 0) ? smallimagedata.pos.l + settings.xOffset : smallimagedata.pos.l; break; case "bottom": toppos = (smallimagedata.pos.b + Math.abs(settings.yOffset) + settings.zoomHeight < $('body').height()) ? (smallimagedata.pos.b + Math.abs(settings.yOffset)) : (smallimagedata.pos.t - settings.zoomHeight - Math.abs(settings.yOffset)); leftwindow = smallimagedata.pos.l + settings.xOffset + settings.zoomWidth; leftpos = (leftwindow < screen.width && leftwindow > 0) ? smallimagedata.pos.l + settings.xOffset : smallimagedata.pos.l; break; default: leftpos = (smallimagedata.pos.l + smallimagedata.w + settings.xOffset + settings.zoomWidth < screen.width) ? (smallimagedata.pos.l + smallimagedata.w + Math.abs(settings.xOffset)) : (smallimagedata.pos.l - settings.zoomWidth - Math.abs(settings.xOffset)); toppos = (smallimagedata.pos.b + Math.abs(settings.yOffset) + settings.zoomHeight < screen.height) ? (smallimagedata.pos.b + Math.abs(settings.yOffset)) : (smallimagedata.pos.t - settings.zoomHeight - Math.abs(settings.yOffset)); break; } this.node.style.left = leftpos + 'px'; this.node.style.top = toppos + 'px'; return this; } Stage.prototype.activate = function() { if ( !this.node.firstChild ) this.node.appendChild( largeimage.node ); if(settings.title) { ZoomTitleObj.loadtitle(); } document.body.appendChild( this.node ); switch(settings.showEffect) { case 'show': $(this.node).show(); break; case 'fadein': $(this.node).fadeIn(settings.fadeinSpeed); break; default: $(this.node).show(); break; } $(this.node).show(); if ($.browser.msie && $.browser.version < 7) { this.ieframe = $('<iframe class="zoom_ieframe" frameborder="0" src="#"></iframe>') .css({ position: "absolute", left:this.node.style.left,top:this.node.style.top,zIndex: 99,width:settings.zoomWidth,height:settings.zoomHeight }) .insertBefore(this.node); }; largeimage.node.style.display = 'block'; } Stage.prototype.remove = function() { switch(settings.hideEffect) { case 'hide': $('.jqZoomWindow').remove(); break; case 'fadeout': $('.jqZoomWindow').fadeOut(settings.fadeoutSpeed); break; default: $('.jqZoomWindow').remove(); break; } } function zoomTitle() { this.node = jQuery('<div />') .addClass('jqZoomTitle') .html('' + ZoomTitle +''); this.loadtitle = function() { if(settings.zoomType == 'innerzoom') { $(this.node) .css({position: 'absolute', top: smallimagedata.pos.b +3, left: (smallimagedata.pos.l+1), width:smallimagedata.w }) .appendTo('body'); }else { $(this.node).appendTo(stage.node); } }; } zoomTitle.prototype.remove = function() { $('.jqZoomTitle').remove(); } function Loader() { this.node = document.createElement("div"); $(this.node).addClass('preload'); $(this.node).html(settings.preloadText);//appendo il testo $(this.node ) .appendTo("body") .css('visibility','hidden'); this.show = function() { switch(settings.preloadPosition) { case 'center': loadertop = smallimagedata.pos.t + (smallimagedata.h - $(this.node ).height())/2; loaderleft = smallimagedata.pos.l + (smallimagedata.w - $(this.node ).width())/2; break; default: var loaderoffset = this.getoffset(); loadertop = !isNaN(loaderoffset.top) ? smallimagedata.pos.t + loaderoffset.top : smallimagedata.pos.t + 0; loaderleft = !isNaN(loaderoffset.left) ? smallimagedata.pos.l + loaderoffset.left : smallimagedata.pos.l + 0; break; } //setting position $(this.node).css({ top: loadertop , left: loaderleft , position: 'absolute', visibility:'visible' }); } return this; } Loader.prototype.getoffset = function() { var o = null; o = $('div.preload').offset(); return o; } }); } })(jQuery); function trim(stringa) { while (stringa.substring(0,1) == ' '){ stringa = stringa.substring(1, stringa.length); } while (stringa.substring(stringa.length-1, stringa.length) == ' '){ stringa = stringa.substring(0,stringa.length-1); } return stringa; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值