2012-05-10 108 views
0

嗨我有一些JavaScript在这里我想实现拖放功能。所以,如果我点击一个div元素并将其拖动,我将拖动克隆,以便原始div停留在那里。拖放和克隆div元素

下面是我的脚本

var _startX = 0;    
var _startY = 0; 
var _offsetX = 0;   
var _offsetY = 0; 
var _dragElement;   
var _oldZIndex = 0;   
var _debug = $('.drag');  
var target1,target; 

function ExtractNumber(value) 
{ 
    var n = parseInt(value); 
    return n == null || isNaN(n) ? 0 : n; 
} 

// this is simply a shortcut for the eyes and fingers 
function $(id) 
{ 
    return document.getElementById(id); 
} 

InitDragDrop(); 

function InitDragDrop() 
{ 
    document.onmousedown = OnMouseDown; 
    document.onmouseup = OnMouseUp; 
} 

function OnMouseDown(e) 
{ 
    if (e == null) 
     e = window.event; 

    target = e.target != null ? e.target : e.srcElement; 

    if (target.className == 'drag') 
    { 
     _startX = e.clientX; 
     _startY = e.clientY; 

     target1 = target.cloneNode(true); 

     // grab the clicked element's position 
     _offsetX = ExtractNumber(target1.style.left); 
     _offsetY = ExtractNumber(target1.style.top); 

     // bring the clicked element to the front while it is being dragged 
     _oldZIndex = target1.style.zIndex; 
     target1.style.zIndex = 10000; 

     // we need to access the element in OnMouseMove 
     _dragElement = target1; 

     // tell our code to start moving the element with the mouse 
     document.onmousemove = OnMouseMove; 
    } 
} 

function OnMouseMove(e) 
{ 
    if (e == null) 
     var e = window.event; 

    // this is the actual "drag code" 
    _dragElement.style.left = (_offsetX + e.clientX - _startX) + 'px'; 
    _dragElement.style.top = (_offsetY + e.clientY - _startY) + 'px'; 
} 

function OnMouseUp(e) 
{ 
    if (_dragElement != null) 
    { 
     _dragElement.style.zIndex = _oldZIndex; 
     document.onmousemove = null; 
     _dragElement.ondragstart = null;  
     _dragElement = null; 
    } 
} 

如果我不克隆的目标,拖动工程。如果我克隆它,拖动不起作用。任何想法为什么发生这种情况

+0

*“如果我克隆它,拖动不起作用” *“不工作”通常不是一个充分的说明。 :-) *什么*不起作用?你期望发生什么?会发生什么呢?你看到了什么? –

回答

1

您永远不会将克隆添加到DOM。 cloneNode后,你需要将它添加到容器,例如:

target1 = target.cloneNode(true); 
target.parentNode.appendChild(target1);