Ben*_*Ben 13 browser performance jquery
我使用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, ui)
{
$(this).css('background-color', '#ccffcc');
},
out: function(event, ui)
{
$(this).css('background-color', null);
},
drop: function(event, ui)
{
// snip: removed code here to save space.
}
}
);
}
);
</script>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
(注意:它在IE 7中似乎根本不起作用,所以也许我只是在做一些非常错误的事情...)
Che*_*try 12
如此多的掉落目标的存在似乎使性能如此缓慢.如果可能,尝试将表设置为单个放置目标,并根据放置事件中的位置数据计算目标表单元格.
不幸的是,您还将无法在dragOver和dragOut事件上将样式应用于单个单元格.
编辑:另一个建议是禁用所有tds上的droppable,并在tr的鼠标悬停时,启用特定tr中存在的tds的droppable(并在trout鼠标输出时禁用它们).听起来像一个黑客,但值得一试.