【Jquery版】仿Acdsee看图插件

<!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" />
<title>无标题文档</title>
<link rel="stylesheet" type="text/css" href="yui_cssreset.css"/>
<style type="text/css">
.bgBox{position:absolute;z-index:990;background:#000;opacity:0.9;width:100%;height:160%;left:0px;top:0px;filter:alpha(opacity=90);cursor:pointer;}
.upBox{position:fixed;z-index:999;border:2px #999 solid;cursor:move;}
.upBox img{cursor:move}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
;(function($){
        $.fn.extend({
                acdSee:function(options){
                        var defaults={},
                                x,y,_x,_y,oX,oY,
                                initC=[],//初始化居中
                                sT=0,//滚动条高度
                                i=0,//放大缩小因子
                                broswer;
                                
                                sW=document.documentElement.clientWidth,
                                sH=document.documentElement.clientHeight;
                                
                                sT===0?initC[2]=0:initC[2]=sT+sH;
                                /(Firefox)/.test(navigator.userAgent)?broswer="DOMMouseScroll":broswer="mousewheel";
                                //滚动事件,获取卷曲高度
                                $(window).scroll(function(){sT=$(this).scrollTop();})
                                
                                //点击出现弹出层
                                $(this).click(function(){
                                        var oSrc=$(this).attr('src'),
                                                oW=$(this).width(),
                                                oH=$(this).height();
                                        
                                                initC[0]=Math.ceil((sW-oW)/2);
                                                initC[1]=Math.ceil(((sH-oH)/2));
                                                
                                        $("body").append("<div class='bgBox'></div><div class='upBox'><img src='"+oSrc+"'width='"+oW+"' height='"+oH+"' id='upImg' /></div>");
                                        $("body,html").css("overflow","hidden");
                                        $(".upBox").css({"left":initC[0],"top":initC[1]});
                                        $(".bgBox").css({"left":0,"top":initC[2]});
                                        
                                });
                                //阻止图片默认事件
                                $(document).delegate("#upImg","mousedown",function(e){        stopDefault(e)});
                                //拖拽图层
                                $(document).delegate(".upBox","mousedown",function(e){        
                                        if(/(0|1)/.test(e.button)){
                                                oX=parseInt(this.style.left);
                                                oY=parseInt(this.style.top);
                                                x=e.pageX-oX;
                                                y=e.pageY-oY;
                                                
                                                $(".upBox").mousemove(function(e){
                                                        _x=e.pageX-x;
                                                        _y=e.pageY-y;
                                                        $(".upBox").css({"left":_x,"top":_y}) .mouseup(function(e){$(".upBox,.images").unbind("mousemove");});
                                                        $(document).mouseleave(function(e){$(".upBox,.images").unbind("mousemove");})
                                                });
                                                //阻止图片默认事件
                                                $(".upBox img").mousedown(function(e){stopDefault(e)});        
                                        }else{return false;}
                                
                                });
                                
                                //退出
                                $(document).delegate(".bgBox","click",function(){
                                        $(this).next().empty().remove();
                                        $(this).remove();
                                        $("body,html").css("overflow",'auto')
                                });
                                
                                //图片放大缩小计算
                                $(document).bind(broswer,function(e){        
                                        if($('.bgBox').length){
                                                var oImg=$(".upBox").find('img'),
                                                        mW=oImg.width(),
                                                        mH=oImg.height(),
                                                        dW=Number(oImg.attr('width')),
                                                        dH=Number(oImg.attr('height'));
                                                        
                                                if(e.originalEvent.detail !=0){
                                                        e.originalEvent.detail>0?Zoom(mW,mH,dW,dH,oImg):Narrow(mW,mH,dW,dH,oImg);
                                                }else{
                                                        event.wheelDelta<0?Zoom(mW,mH,dW,dH,oImg):Narrow(mW,mH,dW,dH,oImg);
                                                }
                                        }
                                });
                                //放大函数
                                function Zoom(mWidth,mHeight,dW,dH,obj){
                                        var eW,eH,
                                                parentP=obj.parent(".upBox"),
                                                pX=parseInt(parentP.css("left")),
                                                pY=parseInt(parentP.css("top"));
                                                
                                        if(i<1){
                                                i=Number((i+=.1).toFixed(1));
                                                eW=Math.ceil(dW+dW*i);
                                                eH=Math.ceil(dH+dH*i);
                                                pX-=(eW-mWidth)/2;
                                                pY-=(eH-mHeight)/2;
                                                obj.width(eW).height(eH);
                                                parentP.css({"left":pX,"top":pY});
                                                console.log(pX,pY)
                                        }
                                }
                                //缩小函数
                                function Narrow(mWidth,mHeight,dW,dH,obj){
                                        var eW,eH,
                                                parentP=obj.parent(".upBox"),
                                                pX=parseInt(parentP.css("left")),
                                                pY=parseInt(parentP.css("top"));
                                        if(i>0){
                                                i=Number((i-=.1).toFixed(1));
                                                eW=Math.ceil(dW+dW*i);
                                                eH=Math.ceil(dH+dH*i);
                                                pX-=(eW-mWidth)/2;
                                                pY-=(eH-mHeight)/2;
                                                obj.width(eW).height(eH);
                                                parentP.css({"left":pX,"top":pY});
                                        }
                                }
                                
                                //传入操作对象e而不是window.event,同时支持w3c的preventDefalut()方法所以是其它浏览器
                                function stopDefault( e ) { 
                                        if ( e && e.preventDefault ) { 
                                                e.preventDefault(); 
                                        }else {
                                                window.event.returnValue = false;  //ie
                                                return false; 
                                        } 
                                };
                }
        })
}(jQuery))
</script>

<script type="text/javascript">
$(function(){
        $("img").acdSee();
})
</script>
</head>

<body>
<img src="http://www.w3cfuns.com/data/attachment/album/201211/12/102713idcpenm4ttcml3en.jpg" width="640" height="476" alt="" />
</body>
</html>

兼容:IE9+,Chrome , Firefox ;
功能:拖拽弹出层图片,放大缩小,点击背景层退出;
特点:无论拖拽到哪个位置,都以图片中心为原点放大;
问题:在IE8以下,拖拽有BUG,百思不得其解,各位看官如有解决之法,还望不吝赐教!

 

转载请注明出处:Janking's Blog

posted @ 2013-04-26 11:25  琅琊丶  阅读(988)  评论(0编辑  收藏  举报