首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery UI .draggable()

jQuery UI .draggable()
EN

Stack Overflow用户
提问于 2017-04-18 08:32:30
回答 1查看 79关注 0票数 0

日安!

如果你们中有人遇到我的问题就问个问题。问题是,我希望动态创建的div元素是可拖放的。是的,可以通过$('.frameHolder').draggable()来实现。但问题是,当div达到1000时,它会导致浏览器变得非常慢(比如800 is -由performance.now()测量)。

下面是片段:

代码语言:javascript
复制
var frames = [];

for (var i = 1; i <= 100; i++) {
  frames.push('<div id="frame' + i + '" class="frame"><div id="frameHolder' + i + '" class="frameHolder"></div></div>');
}

$('.frameHolder').draggable({
  containment: $('#layerFrameContainer .layerFrame),
  axis: 'x',
  cursor: 'pointer',
  helper: 'clone',
  grid: [10, 10]
});

谢谢你们!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-18 21:08:43

另一种使大量元素可拖动的方法,而无需预先加载更多的时间,是按需执行。与其使所有元素都可拖动,不如让那些需要拖动的元素按需要拖放。从我的评论,我测试了许多方法,以减少负载时间,并降低到500 ms。

考虑以下几点:https://jsfiddle.net/Twisty/mpns7w3n/11/

代码语言:javascript
复制
<div id="layerFrameContainer">
  <div class="layerFrame">
  </div>
</div>

JavaScript

代码语言:javascript
复制
$(function() {
  var frames = [];

  function dragInit(t) {
    if (t.hasClass("ui-draggable")) {
      return;
    }
    console.log("Making frame[" + t.parent().index() + "] > frameHolder draggable");
    t.draggable({
      containment: $('#layerFrameContainer .layerFrame'),
      axis: 'x',
      cursor: 'pointer',
      helper: 'clone',
      grid: [10, 10]
    });
  }

  var t0 = performance.now();
  for (var i = 1; i <= 1000; i++) {
    var frame = $("<div>", {
      id: "frame-" + i
    });
    var frameHolder = $("<div>", {
      id: "frameHolder-" + i,
      class: "frameHolder"
    }).appendTo(frame);
    frames.push(frame);
    $(".layerFrame").append(frame);
  }
  var t1 = performance.now();
  console.log("Call to loop took " + (t1 - t0) + " milliseconds.");
  $(".layerFrame").on("mouseover", ".frameHolder", function(e) {
    dragInit($(this));
  });
  var t2 = performance.now();
  console.log("Call to assign draggable took " + (t2 - t1) + " milliseconds.");
});

初始加载时间在200 ms以下。

当用户将鼠标移动到页面上时,用户必须先使用mouseover才能使用click元素。我们可以使用它来触发该目标的.draggable()。然后,当用户单击元素时,它是可拖动的。

即使用户不单击,元素现在也是可拖动的。由于用户在弹出元素之前不能单击该元素,因此没有任何元素是不可拖的。更快的加载和相同的用户体验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43467353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档