javascript - 制作一个新的div可拖动,尝试了一切

标签 javascript jquery html drag-and-drop draggable

您好 stackoverflow 社区。

我正在编写一些代码,使 div 可拖动、可调整大小。我让它与最初创建的 div 一起使用,但新添加的 div 无法拖动。

这是我的所有代码:

<html>
   <head>
      <script>
     var id = 4;
     function drag(ev)
     {
        ev.dataTransfer.setData("Text",ev.target.id);
     }

     function drop(ev)
     {
        ev.preventDefault();
        ev.target.appendChild(document.getElementById(ev.dataTransfer.getData("Text")));
    }
function change(div)
    {
    var divw=parseInt(div.style.width);
    var divh=parseInt(div.style.height);
    var imgw=divw-10;
    var imgh=divh-10;
    div.children[0].style.width=imgw;
    div.children[0].style.height=imgh;
    div.style.border="dotted 3px grey";
    }
function addimg()
    {
    var main = document.getElementById('main');
    var div  = document.createElement('div');
    div.onmouseout = function() {this.style.border=0};
    div.ondragstart = function() {drag(event)};
    div.onmousemove = function() {change(this)};
    div.setAttribute('draggable', true);
    div.id = 'div'+id;
        id+=1;
        div.style.styleFloat = 'left';
        div.style.cssFloat = 'left';
        div.style.resize = 'both';
        div.style.overflow = 'hidden';
        div.style.height = '110px';
        div.style.width = '110px';
        div.innerHTML = '<img draggable="false" style="width: 100px; height: 100px" src="https://www.google.com/images/srpr/logo11w.png" />';
        main.appendChild(div);
     }
      </script>
   </head>   
   <body>
      <center>
     <div ID="main" ondragover="event.preventDefault()" ondrop="drop(event)" style="width:900px; height:900px; border: dashed 1px lightgrey;" overflow="auto">
        <div onmouseout="this.style.border=0" draggable="true" ondragstart="drag(event)" onmousemove="change(this)" id="div1" style="float:left; resize:both; overflow:hidden; height: 110px; width:110px">
           <textarea onblur="this.nextElementSibling.innerHTML=this.innerHTML" style="resize:none; width: 100px; height: 100px"></textarea>
           <p style="background-color: blue"></p>
        </div>
        <div style="clear:both"></div>
        <div onmouseout="this.style.border=0" draggable="true" ondragstart="drag(event)" onmousemove="change(this)" id="div2" style="float:left; resize:both; overflow:hidden; height: 110px; width:110px">
          <img draggable="false" style="width: 100px; height: 100px" src="https://www.google.com/images/srpr/logo11w.png" />
        </div>   
        <div onmouseout="this.style.border=0" draggable="true" ondragstart="drag(event)" onmousemove="change(this)" id="div3" style="float:left; resize:both; overflow:hidden; height: 110px; width:110px">
          <img draggable="false" style="width: 100px; height: 100px" src="https://www.google.com/images/srpr/logo11w.png" />
        </div>   
     </div>
      </center>
      <button onclick="addimg()">add an image</button>
   </body>
</html>

问题是新的 div 不可拖动。

附注如果你使用jquery,请解释得非常详细,我没有这方面的经验。

最佳答案

我不确定这种情况下的可拖动功能是什么。它只是将这个新添加的图像拖动到左上角的这个元素吗?之后该图像消失了?

如果是这种情况,解决方案非常简单。在函数 addimage 中,您的行错误。您的行是:

div.ondragstart = function() {drag(event)};

应该是

div.ondragstart = function(event) {drag(event)};

在这一行中,您调用函数而不将 event 设置为参数,并在函数中使用它。 希望对您有所帮助。

关于javascript - 制作一个新的div可拖动,尝试了一切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148949/

相关文章:

javascript - 使用 ng-repeat 制作水平列表?不知道我在这里错过了什么

javascript - 使用 Angular 转发器提醒多个输入的输入值

javascript - Jquery 滚动脚本 - 菜单位于部分顶部而不是内部

javascript - jQuery 'each' 简写

html - 表格数据显示不适用于手机和平板设备

html - 如何将占位符文本颜色更改为白色

Javascript 遍历数组的数组

javascript - 有没有办法使用 Web 身份验证 API (WebAuthn) 获取 U2F 设备的稳定唯一标识符?

javascript - 使用 IE 11 和 AngularJS 的 2 种方式数据绑定(bind)问题

jQuery.ajax() - IE9 中返回未定义的数据