zoukankan      html  css  js  c++  java
  • 【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;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

  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/w3develop/p/3044444.html
Copyright © 2011-2022 走看看