Ho usato JQuery per rendere trascinabili gli elementi di una tabella. (Non ho mai usato JQuery prima di questo). Funziona bene, ma è molto lento. Ad esempio, dal momento in cui clicco e tengo premuto su un oggetto, al momento in cui il cursore cambia, circa 2 secondi. Questo è su Firefox 3.0.6. Una volta che l'elemento viene trascinato, c'è un ritardo più breve, ma ancora evidente (circa mezzo secondo, lo stimerei) tra quando rilasciamo il pulsante del mouse e quando il rilascio si manifesta in modo visibile.Come posso rendere più rapido il mio codice javery trascinabile/trascinabile?
Ho il sospetto che il motivo sia così lento perché il tavolo è abbastanza grande (6 colonne e circa 100 file), ma non mi sembra che sia oscenamente grande, e mi chiedo se c'è qualcosa di stupido farlo è renderlo così lento. Ad esempio, mi chiedo se il codice JQuery venga applicato inutilmente a ogni elemento della tabella ogni volta che si trascina qualcosa. Non so perché sarebbe successo, però.
In caso aiuta, ecco il mio codice (nota che ho preso la chiamata del cursore, come avevo paura che potrebbe essere rallentando il tutto).
<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>
La tabella HTML è come questo (come generata da 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>
(Nota: non sembra funzionare affatto in IE 7, quindi forse sto solo facendo qualcosa di molto sbagliato qui ...)
Questo è un suggerimento interessante. Potrei doverlo considerare come ultima risorsa, anche se sarà un peccato perdere la capacità di dare uno stile alle celle, dato che è un feedback abbastanza vitale per consentire a un utente di dire su quale cella stanno cadendo. – Ben
Dai un'occhiata alla mia modifica. Potrebbe valere la pena provare. –
Idea interessante. Domani andrò a provarlo. Grazie! – Ben