<script type="text/javascript" src="jsq.js"></script>
<script type="text/javascript" src="moveDiv.js"></script>
<style type="text/css">
    #layBase 
    { 
        position:absolute; 
        left : 50px ;
        top : 100px ;
        background-color : gray ;
float:left;
        z-index : 1 ;
    }
#layHandle 
    { 
        position:absolute; 
        top : 200px ;
        left : 500px ;
        width : 200px ;
        height : 200px ;
        border : 1px solid red ;
        /*filter:alpha(opacity=100);*/
        z-index : 2;
    }
    #layCropper 
    { 
        position:absolute; 
        top : 200px ;
        left : 100px ;
        width : 100px ;
        height : 100px ;
        border : 1px solid white;
        background-color:#000;
        filter:alpha(opacity=10);
        z-index : 3 ;
    }
</style>
<body onload="init()">
    <div id="Container" style="float:left;">
        <div id="layBase">
            <img src="img1.jpg"/>
        </div>
        <div id="layHandle">
            <input type="text" id="x" /><br/>
            <input type="text" id="y" /><br/>
            <input type="text" id="mx" /><br/>
            <input type="text" id="my" />
        </div>
        <div id="layCropper" onmousemove="handle(event,this)">
            
        </div>
    </div>
</body>
moveDiv.js:代码如下
function handle(event,obj)
{
var currentDiv = document.getElementById("layCropper");
var mousePos = mouseRelativePosition(event,obj); var mx = mousePos.x;
var my = mousePos.y;
var xx = mouseAbsolutePostion(event).x;
var yy = mouseAbsolutePostion(event).y;
//alert(typeof mx);
//alert(typeof xx);
//获得时间目标元素
document.getElementById("x").value = mx;
document.getElementById("y").value = my;
document.getElementById("mx").value = xx;
document.getElementById("my").value = yy;
}
//得到鼠标的绝对位置坐标(body)
function mouseAbsolutePostion(evt)
{
evt = event ? event : window.event;
return {x:evt.clientX,y:evt.clientY};
}
//获得鼠标的相对位置坐标(div)
function mouseRelativePosition(evt,curObj)
{
evt = event ? event : window.event;
var p = curObj;
var left = p.offsetLeft + p.offsetParent.offsetLeft;
var top = p.offsetTop + p.offsetParent.offsetTop;
if(evt.pageX || evt.pageY)
{
return {x:evt.pageX,y:evt.pageY};
}
return {
x:evt.clientX + document.body.scrollLeft - document.body.clientLeft - left,
y:evt.clientY + document.body.scrollTop - document.body.clientTop - top
};
}
为什么这里的不能进行mx+xx,my+yy    ???????
高手能不帮忙给个层的多动例子,尽量简单,注释详细的,谢谢!!!

解决方案 »

  1.   

    上面的问题我已经解决。效果我已经基本实现,我进行拖动层的时候,层移动的速度跟不上鼠标移动速度
    代码如下:
    <script type="text/javascript" src="jsq.js"></script>
    <script type="text/javascript" src="cutAndSaveImg.js"></script>
    <style type="text/css">
        #layBase 
        { 
            position:absolute; 
            left : 50px ;
            top : 1100px ;
            background-color : gray ;
    float:left;
            z-index : 2 ;
        }
    #layHandle 
        { 
            position:absolute; 
            top : 1200px ;
            left : 500px ;
            /*
             clip的作用是“检索或设置对象的可视区域。可视区域外的部分是透明的
             依据 距上边距-总宽(包括距左边距)-总高(包括距距上遍距)-距左边距 的顺序提供自对象左上角为(0,0)坐标计算的四个偏移数值来剪切
            clip:rect(0 100 100 0); 
            */
            overflow : hidden;/* 对超出区域的内容显示方式 */
            width:100px;
            height:100px;
            border : 1px solid red ;
            z-index : 1;
        }
        #layCropper 
        { 
            position:absolute; 
            top : 1250px ;
            left : 150px ;
            width : 100px ;
            height : 100px ;
            border : 1px solid red ;
            background-color:#000000;
            filter:alpha(opacity=20);
            z-index : 3 ;
        }
    </style>
    <body onload="initPostion()">
        <div id="Container" style="float:left;">
            <div id="layBase">
                <img src="img1.bmp"/>
            </div>
            <div id="layHandle">
             <div id="divPosition">
                <img src="img1.bmp" style="width:900px;height:1200px;"/>
              </div>
            </div>
            <div id="layCropper" onmouseover="handle(this)" oncontextmenu="return false">
                
            </div>
        </div>
    </body>
    cutAndSaveImg.js:////图片真实的大小
    var realImgWidth; 
    var realImgHeight;
    //图片放大后的大小
    var bigImgWidth;
    var bigImgHeight;
    var o = null;      //拖动的层
    var drag = false;  //是否拖动
    var relativePostionX,relativePostionY; //鼠标的相对位置(相对于拖动的层)
    //初始化
    function initPostion()
    {
    //图片真实的大小
    realImgWidth = $("img:first").attr("width");
    realImgHeight = $("img:first").attr("height");
    //图片放大后的大小
    bigImgWidth = $("img:last").attr("width");
    bigImgHeight = $("img:last").attr("height");
    //得到切割层的大小
    var inciseDivWidth = parseInt($("#layCropper").css("width"));
    var inciseDivHeight = parseInt($("#layCropper").css("height"));
    //设置预览层的大小
    $("#layHandle").css("width",inciseDivWidth*(bigImgWidth/realImgWidth)+"px");
    $("#layHandle").css("height",inciseDivHeight*(bigImgHeight/realImgHeight)+"px");
    showView();
    }
    //预览图片
    function showView()
    {
    //获得截图层的相对位置(相对于被截图)
    var lf = $("#layCropper").offset().left - $("#layBase").offset().left;
    var tp = $("#layCropper").offset().top - $("#layBase").offset().top;
    //根据图片实际大小和放大的大小比例,得到预览层的显示区域
    var bigLf = (document.body.clientLeft-bigImgWidth*(lf/realImgWidth)) + "px";
    var bigTp = (document.body.clientTop-bigImgHeight*(tp/realImgHeight)) + "px";
    //设置预览层的显示区域
    $("#divPosition").css("position","relative");
    $("#divPosition").css("left",bigLf);
    $("#divPosition").css("top",bigTp);
    }
    //为使浏览器兼容event事件
    function aa()
    {
      if(!document.all){   
            HTMLElement.prototype.__defineGetter__("runtimeStyle", function(){   
                return this.style;   
            });    
            window.constructor.prototype.__defineGetter__("event", function(){   
                return __window_event_constructor();    
            });   
            Event.prototype.__defineGetter__("srcElement", function(){   
                return this.target;   
           });   
           function __window_event_constructor(){    
               if(document.all){    
                   return window.event;    
               }    
               var _caller = __window_event_constructor.caller;    
               while(_caller!=null){    
                   var _argument = _caller.arguments[0];    
                   if(_argument){    
                       var _temp = _argument.constructor;    
                       if(_temp.toString().indexOf("Event")!=-1){    
                           return _argument;    
                       }    
                   }    
                   _caller = _caller.caller;    
               }    
               return null;    
           }   
       }  }
    function handle(obj)
    {
    o = obj;
    aa();
    //鼠标按下事件
    document.onmousedown = down;
    //鼠标移动事件
    document.onmousemove = move;
    //鼠标释放事件
    document.onmouseup = up;
    //鼠标移出层边界
    document.onmouseout = up;
    }
    function down()
    {
    drag = true;
    if(event.pageX || event.pageY)
    {
    relativePostionX = event.pageX - o.offsetLeft;
    relativePostionY = event.pageY - o.offsetTop;
    }else
    {
    //evt.clientX获取鼠标在浏览器中位置(可见区域)
    relativePostionX = event.clientX + document.body.scrollLeft - o.offsetLeft - document.body.clientLeft;
    relativePostionY = event.clientY + document.body.scrollTop - o.offsetTop - document.body.clientTop;
    }
    }
    function move()
    {
    if (!drag) 
    {
    return;
    }
    //对象位置变化
    if(event.pageX || event.pageY)
    {
    $("#layCropper").css("left",event.pageX - relativePostionX);
    $("#layCropper").css("top",event.pageY - relativePostionY);
    }else
    {
    $("#layCropper").css("left",event.clientX + document.body.scrollLeft - relativePostionX);
    $("#layCropper").css("top",event.clientY + document.body.scrollTop - relativePostionY);
    }
    //预览图片
    showView();
    }希望高手指点一下我这个JS菜鸟,thanks
    function up()
    {
    drag = false;
    }