不考虑flash
在页面上拖拽,比如类似于下棋移动棋子一样。放开的时候定位在可以放置的位置上。请教思路 js应该做的到 谢谢

解决方案 »

  1.   

    就是控制鼠标事件,mousedown,mouseup,mouseover
    在鼠标按下事件中设置“开始移动了”,在鼠标抬起事件中设置“不进行移动”。
    在鼠标移动事件中判断是否“开始移动了”,是的话就取鼠标XY位置来动态设置图片的位置实现拖拽图片效果。
    另外,在鼠标抬起事件中判断是否可以放下,如果可以放下,就把图片的位置设为目标的位置即可,反之则还原图片原来的位置。
      

  2.   

    事件是图片对象的。而且图片对象的CSS应该设为绝对定位,这样才能移动。
      

  3.   

    是不是说将图片放入一个div中,而这个div要设为绝对定位?
    关于坐标的话,可否以父层的div左上角来作为坐标计算的原点?
      

  4.   

    图片对象的CSS应该设为绝对定位,图片的CSS应该设为绝对定位
      

  5.   


    如果你想这样实现的话 那就需要 鼠标的  down和up事件要放在div上  而不是图片上了父层div      position:relative;图片所在div    position:absolute;
      

  6.   

    <body>
    <div id="div" style='height:100px;width:100px;border:1px solid #000;position:absolute'></div>
    <script type="text/javascript">
    function bind()
    {
        if (!Function.prototype.bind) 
        {
            Function.prototype.bind = function(obj) 
            {
                var owner = this,
                args = Array.prototype.slice.call(arguments),
                callobj = Array.prototype.shift.call(args);
                return function(e) 
                {
                    e = e || top.window.event || window.event;
                    owner.apply(callobj, args.concat([e]));
                };
            };
        }
    }
    var drag = function()
    {
        var startX , startY , objX , objY , moveX , moveY;
        var parent = this;
        bind()
        var down = function(e)
        {
            e = e || window.event;
            startX = e.clientX;
            startY = e.clientY;
            objX = parent.offsetLeft;
            objY = parent.offsetTop;
            moveX = startX - objX;
            moveY = startY - objY;
            if(!document.addEventListener) this.setCapture();
        
            document.onmousemove = move;
            document.onmouseup = up.bind(this)
            
            if(e.stopPropagation) e.stopPropagation() 
                else e.cancelBubble = true
            if(e.preventDefault) e.preventDefault() 
                else e.returnValue = false         
        }
        
        var move = function(e)
        {
             e = e || window.event;
             startX = e.clientX;
             startY = e.clientY;
             parent.style.left = startX - moveX + "px";
             parent.style.top = startY - moveY + "px"; 
             
            if(e.stopPropagation) e.stopPropagation() 
                else e.cancelBubble = true
            if(e.preventDefault) e.preventDefault() 
                else e.returnValue = false          
        }
        
        var up = function(e)
        {
            document.onmousemove = null;
            if(!document.addEventListener) this.releaseCapture();
            
            if(e.stopPropagation) e.stopPropagation() 
                else e.cancelBubble = true
            if(e.preventDefault) e.preventDefault() 
                else e.returnValue = false
        }
        
        this.onmousedown = down;
    }this.drag.call(document.getElementById("div"))
    </script>
    </body>
      

  7.   

    gogogo
    #23 效果
      

  8.   

    尤溪    ,very  good  呀
      

  9.   

    参数一为要拖拽的元素,二为事件function(elementToDrag,event){
    var startX=event.clientX,startY=event.clientY;var origX=elementToDrag.offsetLeft,origY=elementToDrag.offsetTop;var deltaX=startX-origX,deltaY=startY-origY;
    if(document.addEventListener){
    document.addEventListener("mousemove",moveHandler,true);
    document.addEventListener("mouseup",upHandler,true);
    }
    else if(document.attachEvent){
    elementToDrag.attachEvent("onmousemove",moveHandler);
    elementToDrag.attachEvent("onmouseup",upHandler);
    //事件捕获失败的时候调用upHandler方法
    elementToDrag.attachEvent("onlosecapture",upHandler);
    }
    else{
    document.onmousemove=moveHandler;
    document.onmouseup=upHandler;
    }if(event.stopPropagation) event.stopPropagation();
    else event.cacelBubble=true;if(event.preventDefault) event.preventDefault();
    else event.returnValue=false;
    function moveHandler(e){
    if(!e) e=window.event;
    elementToDrag.style.left=(e.clientX-deltaX)+"px";
    elementToDrag.style.top=(e.clientY-deltaY)+"px";if(e.stopPropagation) e.stopPropagation();
    else e.cancelBubble =true;
    }function upHandler(e){
    if(!e) e=window.event;
    if(document.removeEventListener){document.removeEventListener("mouseup",upHandler,true);
    document.removeEventListener("mousemove"moveHandler,true);
    }
    else if(document.detachEvent){
    elementToDrag.detachEvent("onlosecapture",upHandler);
    elementToDrag.detachEvent("onmouseup",upHandler);
    elementToDrag.detachEvent("onmousemove",moveHandler);
    elementToDrag.releaseCapture;
    }
    else{
    document.onmouseup=olduphandler;
    document.onmousemove=oldmovehandler;
    }
    if(e.stopPropagation) e.stopPropagation();
    else e.cancelBubble=true;}}
      

  10.   

    9楼写的那个不完整...这个实验通过...function drag(elementToDrag,event){
    var startX=event.clientX,startY=event.clientY;var origX=elementToDrag.offsetLeft,origY=elementToDrag.offsetTop;var deltaX=startX-origX,deltaY=startY-origY;
    if(document.addEventListener){
    document.addEventListener("mousemove",moveHandler,true);
    document.addEventListener("mouseup",upHandler,true);
    }
    else if(document.attachEvent){
    elementToDrag.setCapture();
    elementToDrag.attachEvent("onmousemove",moveHandler);
    elementToDrag.attachEvent("onmouseup",upHandler);
    //事件捕获失败的时候调用upHandler方法
    elementToDrag.attachEvent("onlosecapture",upHandler);
    }
    else{
    var oldmovehandler =document.onmousemove;
    var olduphandler=document.onmouseup;
    document.onmousemove=moveHandler;
    document.onmouseup=upHandler;
    }if(event.stopPropagation) event.stopPropagation();
    else event.cacelBubble=true;if(event.preventDefault) event.preventDefault();
    else event.returnValue=false;
    function moveHandler(e){
    if(!e) e=window.event;
    elementToDrag.style.left=(e.clientX-deltaX)+"px";
    elementToDrag.style.top=(e.clientY-deltaY)+"px";if(e.stopPropagation) e.stopPropagation();
    else e.cancelBubble =true;
    }function upHandler(e){
    if(!e) e=window.event;
    if(document.removeEventListener){document.removeEventListener("mouseup",upHandler,true);
    document.removeEventListener("mousemove",moveHandler,true);
    }
    else if(document.detachEvent){
    elementToDrag.detachEvent("onlosecapture",upHandler);
    elementToDrag.detachEvent("onmouseup",upHandler);
    elementToDrag.detachEvent("onmousemove",moveHandler);
    elementToDrag.releaseCapture();
    }
    else{
    document.onmouseup=olduphandler;
    document.onmousemove=oldmovehandler;
    }
    if(e.stopPropagation) e.stopPropagation();
    else e.cancelBubble=true;}}
      

  11.   


    <!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=gb2312" />
    <title>Drag</title>
    <style>
    * { font-size:12px; font-family:Verdana,宋体; }
    html { margin:0px; padding:0px; overflow:auto; }
    body { margin:0px; padding:15px; background-color:buttonface; }
    #w { position:absolute; width:480px; height:270px; overflow:hidden; border:2px groove #281; cursor:default; -moz-user-select:none; }
    #t { line-height:20px; height:20px; width:480px; overflow:hidden; background-color:#27C; color:white; font-weight:bold; border-bottom:1px outset blue; text-align:center; }
    #winBody { height:248px; width:480px; overflow-x:hidden; overflow-y:auto; border-top:1px inset blue; padding:10px; text-indent:10px; background-color:white; }
    </style>
    </head>
    <body>
    <div id="w">
        <div id="t">Demo Win - Drag me</div>
        <div id="winBody">Hello world</div>
    </div>
    </body>
    <script>
    (function(o,s,x,y,d){
        s = o.style;
        d = document;
        o.onselectstart = function(){ return false; }; //阻止选择
        o.onmousedown = function(e){
            e = e||event;
            x = e.clientX-o.offsetLeft;
            y = e.clientY-o.offsetTop;
            d.onmousemove = function(e){
                e = e||event;
                s.left = e.clientX - x + "px";
                s.top = e.clientY - y + "px";
            }
            d.onmouseup = function(){ d.onmouseup = d.onmousemove = ""; }
        }
    })(document.getElementById("w"))
    </script>
    </html>