2009-05-06 15 views
10

Tengo algunos contenidos deslizándose aquí.¿Cómo puedo obtener una animación más suave para deslizar contenido con JavaScript/jQuery?

http://www.smallsharptools.com/downloads/jQuery/Slider/slider.html

La estructura HTML es simple. Hay una caja exterior con una altura y ancho fijos con el desbordamiento establecido en oculto. Luego hay un contenedor interno con el ancho establecido en todo el ancho del contenido dentro de él, que es una serie de elementos div marcados con la clase Item.

Para deslizar el contenedor interno hacia la izquierda y hacia la derecha, estoy cambiando el margen izquierdo. Para ir a la izquierda, reduzco el valor que se vuelve negativo y para volver a la derecha lo devuelvo a cero. Pero estoy viendo una animación irregular, incluso en Chrome, que espero que tenga un mejor rendimiento.

Mi pregunta es, ¿sería más fácil si utilizo una técnica diferente para moverla de un lado a otro? ¿El posicionamiento absoluto sería más suave o hay algo más que debería considerar? ¿Hay algún secreto que haga una animación suave que aún no sé?

Respuesta

6

El margen causaría que otros elementos se recalcularan porque el margen de un elemento afecta la posición de otros elementos a su alrededor.

El posicionamiento absoluto (en su propio zIndex) seguiría causando el repintado de otros elementos, pero sería menos costoso en términos de cálculo de los objetos a su alrededor.

Esta charla da una buena idea de cómo funcionan los componentes internos del navegador/DOM

http://www.youtube.com/watch?v=a2_6bGNZ7bA&feature=channel_page

+0

Creé una versión alternativa que hace la animación usando posicionamiento absoluto, pero aún veo la misma animación irregular. http://www.smallsharptools.com/downloads/jQuery/Slider2/slider.html ¿Hay algo más que pueda hacer? – Brennan

+0

Puedo pensar en muchos trucos que pueden ayudar o no, pero si fuera tú, probablemente vería cómo lo están haciendo http://cssglobe.com/post/4004/easy-slider-15-the -easiest-jquery-plugin-for-sliding Hay tantos controles deslizantes por ahí. –

4

que he tenido buenos resultados usando el jQuery "flexibilización" plug-in, documentation here.

Esto le permite aplicar varios movimientos suavizados, como un seno, rebote, elástico, acelerar y así sucesivamente, a un elemento html.

Está utilizando las mismas técnicas que menciona debajo del capó, pero se ocupa del desordenado posicionamiento absoluto/relativo para usted. También es un navegador cruzado y se ha optimizado en nuevas versiones.

Sin embargo, una de las mejores ventajas de usar easing es que puede ayudar a que incluso las animaciones de framerate bajo se vean más impresionantes.

+0

Ya estoy usando ese complemento de aceleración y no reemplaza la función animada, simplemente lo ayuda. Simplemente ayuda dando diferentes puntos de referencia en la animación. En todo caso, hace que se calculen más matemáticas y hace que la animación sea más lenta. – Brennan

+3

OK, perdón por perder su tiempo, ¿debería eliminar mi respuesta? – Ash

+0

Personalmente tuve problemas con esto, así que reescribí mi script de posiciones absolutas a relativas y aún no lo hice. Terminé haciendo todo rápido (<400ms). Después de leer esto, le di una oportunidad, y ahora mi animación se puede subir a cualquier velocidad y todavía se ve bien con cualquiera de esos easings. Entonces, @Brennan, de hecho, suaviza tus animaciones, haciendo que sea menos desigual. He usado esto en el pasado, pero esto es para un complemento y no quería incluir un alivio especial, pero solo puedo incluir 1 :) –

Cuestiones relacionadas