He usado JQuery para hacer que los elementos de una tabla se puedan arrastrar. (Nunca he usado JQuery antes de esto). Funciona bien, pero es muy lento. Por ejemplo, desde el momento en que hago clic y sostengo un elemento, hasta el momento en que el cursor cambia es de aproximadamente 2 segundos. Esto está en Firefox 3.0.6. Una vez que se arrastra el artículo, hay un retraso más corto, pero todavía notable (aproximadamente medio segundo, lo estimaría) entre cuando suelte el botón del mouse y cuando la caída se produce visiblemente.¿Cómo puedo hacer que mi código jquery sea más fácil de arrastrar/soltar?
Sospecho que la razón por la que es tan lento es porque la mesa es bastante grande (6 columnas y unas 100 filas), pero no me parece que sea obscenamente grande, y me pregunto si hay algo tonto ' Hacer eso es hacerlo tan lento. Por ejemplo, me pregunto si el código de JQuery se aplica sin sentido a cada elemento de la tabla cada vez que se arrastra algo. No sé por qué sucedería eso, sin embargo.
En caso de que sea útil, aquí está mi código (tenga en cuenta que he sacado la llamada del cursor, ya que temía que pudiera ralentizar las cosas).
<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 tabla HTML es así (como se genera mediante 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: no parece funcionar en absoluto en IE 7, así que tal vez sólo estoy haciendo algo muy malo aquí ...)
Esa es una sugerencia interesante. Puede que tenga que ir con eso como último recurso, aunque sería una pena perder la capacidad de dar estilo a las células, ya que es una retroalimentación bastante vital para permitir que el usuario diga a qué celda se está yendo. – Ben
Mira mi edición. Quizás valga la pena. –
Interesante idea. Voy a dar una oportunidad mañana. ¡Gracias! – Ben