在JQuery中创建可拖动的新Div

jmo0nnb3  于 2023-10-17  发布在  jQuery
关注(0)|答案(5)|浏览(144)

我试图使jquery添加新的div,然后使其可拖动,但我一直在尝试和谷歌上寻找,我找不到任何东西,这里是我的代码如下

$(document).ready(function() {

 $("#draggable").draggable({ 
   containment: 'parent',
   handle: 'drag_border',
   drag: function(e, ui) {
          var top = ui.position.top;
          var left = ui.position.left;
          $("#top").html(top);
          $("#left").html(left);
           }
       }); 
   });

       function New_Text() {   
            $("<div id=\"draggable\" style=\"width: 200px; height: 50px; border:dashed thin; background-color: #fff\">Drag me</div>").appendTo("div#drag_border"); 
              }

谢谢你

camsedfj

camsedfj1#

如果你使用的是jQuery UI,那么创建你的元素并使其可拖动:

$("<div />").draggable();
oiopk7p5

oiopk7p52#

这里的问题是,您是在尝试使DIV可拖动之后才创建它的。
jQuery事件只对JavaScript运行时存在的元素起作用-有一些方法可以使用livedelegate函数来解决这个问题-但看起来你的插件不允许这样做。
因此,如果代码需要保持不变,将创建DIV的位移动到可拖动函数的上方,它就会工作。

cgyqldqp

cgyqldqp3#

我没有试过,但这应该是可行的:

function New_Text() {   
  $("<div id=\"draggable\" style=\"width: 200px; height: 50px; border:dashed thin; background-color: #fff\">Drag me</div>").appendTo("div#drag_border"); 
        setTimeout(function() {
           ...
          });

         }, 10);
   }

你想创建一个div,让浏览器将它添加到DOM树中,然后调用draggable函数。

fv2wmkja

fv2wmkja4#

由于有些人在这里提到了draggable()函数,这是一个jQuery UI函数,这里有一个简短的how-to:
在你的.html页面中添加以下一行(对jQuery UI的引用),在头部或主体的底部:

<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js"></script>

现在,要使#draggable可拖动,您可以在脚本中编写(您的脚本或对它的引用必须在对jQuery UI的引用之后):

$('#draggable').draggable()
js81xvg6

js81xvg65#

如果你没有jquery UI,那么下面的解决方案会有所帮助。jquery-ui是造成问题,因为我的项目jquery版本,所以我必须实现一个自定义方法来处理。这是我为使jquery numpad可拖动而做的一个解决方案。

$('.selector').drags();

$.fn.drags = function (opt) {
opt = $.extend({ handle: "" }, opt);

if (opt.handle === "") {
    var $el = this;
} else {
    var $el = this.find(opt.handle);
}

return $el.css('cursor', opt.cursor).on("mousedown", function (e) {
    if ($(e.target).hasClass(".inner-elements-prevent-draggable")) {
        return; // Don't activate drag for elements with the (sometimes  inner element also becomes draggable if you handling a bootstrap package for modal or something else to prevent that you can specify here)
    }
    if (opt.handle === "") {
        var $drag = $(this).addClass('draggable');
    } else {
        var $drag = $(this).addClass('active-handle').parent().addClass('draggable');
    }
    var z_idx = $drag.css('z-index'),
        drg_h = $drag.outerHeight(),
        drg_w = $drag.outerWidth(),
        pos_y = $drag.offset().top + drg_h - e.pageY,
        pos_x = $drag.offset().left + drg_w - e.pageX;
    $drag.css('z-index', 2000).parents().on("mousemove", function (e) {
        $('.draggable').offset({
            top: e.pageY + pos_y - drg_h,
            left: e.pageX + pos_x - drg_w
        }).on("mouseup", function () {
            $(this).removeClass('draggable').css('z-index', z_idx); // you can also set custom z index when drag events happen
        });
    });
    e.preventDefault(); // disable selection
}).on("mouseup", function () {
    if (opt.handle === "") {
        $(this).removeClass('draggable');
    } else {
        $(this).removeClass('active-handle').parent().removeClass('draggable');
    }
});

}

相关问题