我如何使我的jquery draggable / droppable代码更快?

前端之家收集整理的这篇文章主要介绍了我如何使我的jquery draggable / droppable代码更快?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用 JQuery来使表中的元素拖动. (我之前从未使用过JQuery).它工作正常,但是很慢.例如,从我点击并按住一个项目的那一刻起,光标变化的时间大约是2秒.这是在Firefox 3.0.6.一旦项目被拖动,当我放开鼠标按钮和显示出来的时候,有一个更短的但仍然明显的延迟(约半秒钟,我估计).

我怀疑它是如此之慢的原因是因为表格相当大(6列和大约100行),但在我看来,它看起来不是很大,我想知道是否有一些愚蠢的事情是使它这么慢例如,我不知道每次拖动某些东西时,JQuery代码是否被无意义地应用于表中的每个元素.我不知道为什么会发生这种情况.

如果它有帮助,这里是我的代码(注意,我已经取出了游标调用,因为我担心它可能会减慢事情).

<script type='text/javascript'>
  $(document).ready
  (
    function()
    {
      $('.draggable_div').draggable
      (
        {
          start: function(event,ui)
          {
            $(this).css('background-color','#ddddff');
          }
        }
      );
      $('.draggable_td').droppable
      (
        {
          over: function(event,'#ccffcc');
          },out: function(event,null);
          },drop: function(event,ui)
          {
             // snip: removed code here to save space. 
          }
        }
      );
    }
  );
</script>

HTML表格如下(由PHP生成):

<table id='main_table' border=0>
<tr>
  <th width=14.2857142857%>0</th>
  <th width=14.2857142857%>1</th>
  <th width=14.2857142857%>2</th>
  <th width=14.2857142857%>3</th>
  <th width=14.2857142857%>4</th>
  <th width=14.2857142857%>5</th>
  <th width=14.2857142857%>6</th>
</tr>
<tr>
  <td class=draggable_td id='td:0:0:'>
  <div class=draggable_div id='div:0:0:1962'>
    content
  </div>
  </td>
  <td class=draggable_td id='td:0:1:1962'>
  <div class=draggable_div id='div:0:1:14482'>
    content
  </div>
  </td>
  <!-- snip: all the other cells removed for brevity -->
</tr>
<!-- snip: all the other rows removed for brevity -->
</table>

(注意:它似乎在IE 7中似乎没有工作,所以也许我只是在这里做一些非常错误的事情)

解决方法

这么多下降目标的存在似乎使得性能如此缓慢.如果可能,尝试将表设置为单个放置目标,并根据放置事件中的位置数据计算目标表单元格.

不幸的是,您也将失去在dragOver和dragOut事件上将样式应用于单个单元格的能力.

编辑:另一个建议是禁用所有tds上的droppable,并鼠标悬停tr,启用特定tr中存在的tds的droppables(并且在鼠标退出时禁用它们).听起来像一个黑客,但值得一试.

猜你在找的jQuery相关文章