2010-11-19 9 views
9

Tengo una aplicación web en medio de wireframing, pero me he encontrado con un problema que requiere una solución técnica antes de poder solidificar este modelo; que ser:. (a. div con un máximo de ancho)Cómo verificar cuando un div se redimensiona, usando Javascript o Jquery

  • Fig # 1 usuario crea nueva 'text-campo' elemento usuario entonces comienza a escribir en dicha elemento hasta que ...

  • Fig. # 2 el elemento alcanza su max-anchura, el texto se reduce a una nueva imagen de fondo una 'nueva' línea y (en la forma de otro div) se crea (con la opacidad y la posición animado para el efecto) para acomodar el elemento más grande ze.

UX model concept

Este es un esbozo de la funcionalidad prevista (dada en este momento, no estoy seguro de cómo tener un campo de texto que se comporta como un div con ancho máximo aún) pero Tengo curiosidad acerca de cómo crear el controlador de eventos para el 2do paso; Pensé en verificar cada evento 'keydown', pero parece ineficiente ...

¿Alguien tiene algún consejo o idea para abordar algo como esto? ¡Gracias!

+0

+1 para los diagramas Purty –

Respuesta

1

En MSIE, un onresize debería dispararse.

+0

Supuestamente 'onresize' funcionaría para div's en Internet Explorer, pero no puedo permitirme este enfoque ... (sin precedentes) solo funciona en IE. – jlmakes

+1

¿Desea ignorar la opción que le ofrece un navegador con exactamente lo que necesita (onresize on elements)? ¡Extraño! Puede intentar trabajar con los eventos clave sugeridos (¿se activaron si se cortan o pegan datos?). Establecer un intervalo para verificar las dimensiones? ¡Los intervalos nunca son una buena práctica si puedes evitarlos! Hay otras soluciones mucho mejores. El que publiqué para MSIE. El otro es DOMSubtreeModified, compatible con gecko y webkit. No es tan inteligente como el IE-onresize, pero funciona bien. Mira el violín: http://jsfiddle.net/doktormolle/fJmGZ/ –

+0

¡Sin falta de respeto, por supuesto! Esta aplicación debe funcionar perfectamente en todos los navegadores, por lo que una solución solo de IE es francamente irrelevante; su respuesta de seguimiento (y ejemplo) se ven geniales! Retomaría el -1 si pudiera ... Lo estoy examinando más de cerca ahora, y leyendo en DOMSubtreeModified. – jlmakes

3

El evento 'keydown' o 'keyup' es lo primero que se le viene a la mente. Si decide hacerlo de esta manera, tendrá que comprobar el tamaño de los elementos html cada vez y compararlo con el anterior (guardar en una variable).

La manera más fácil parece ser unir un controlador al elemento html y dejarlo disparar cuando cambia el tamaño. No sé si existe tal evento, pero si ese es el camino a seguir.

(1 de tu pregunta muy descriptiva)

+0

+1 para su +1 ... – davidsleeps

+0

Todavía no estoy seguro de cómo conseguir un área de texto/campo de entrada redimensionable, pero el enfoque 'keydown/up' ... qué pasa si presionan y retienen una carta, ¿no rompería eso mi modelo? – jlmakes

+2

En KeyDown configure un intervalo JS para seguir comprobando la longitud de entrada y cambiar el tamaño de forma correspondiente. Luego, en KeyUp, elimine el intervalo y realice una última comprobación en la entrada. Esto resolverá su problema de presionar y mantener. – Brady

2

Usted podría tratar de usar la funcionalidad de transición CSS3:
http://slides.html5rocks.com/#slide42
De esta manera los elementos que desea pueden ser animados por el propio navegador.

Descargo de responsabilidad: Obviamente, esto no funciona con efectos más complicados.

+0

Eso es bastante claro: ¿cómo es esto muy diferente a usar Jquery para animarlo? Aún no sé qué tan cómodo me estoy convirtiendo en HTML5 ... por lo que entiendo, es un tipo de documento completamente diferente con un conjunto diferente de problemas de compatibilidad. – jlmakes

+0

@JulianDroid - No te confundas con HTML5 y CSS3 son dos cosas separadas. Sin embargo, ten en cuenta que si comienzas a usar CSS3 ahora, todos los navegadores IE no verán el nuevo y sofisticado CSS3. – Brady

+0

No es muy diferente, aparte del hecho de que puede establecer una duración de animación para cada evento posible. Es decir. no tiene que estar pendiente de cuándo los personajes llegan al final de la línea, simplemente dígale "cuando trates de cambiar el tamaño, hazlo con una animación". – x10

1

No estoy seguro de cómo atacar el problema de ancho donde un campo de entrada mide automáticamente hasta el ancho máximo y luego se ajusta. Podría usar una fuente monoespacia dentro del campo de texto para poder usar javascript para monitorear y controlar el crecimiento de la caja horizontalmente hasta el ancho máximo.

Para acercarse a la altura del crecimiento automático, sería mejor usar un área de texto con una fila para comenzar, de modo que parezca un cuadro de entrada y luego cuando el texto se ajuste automáticamente a la siguiente fila, lo que hará. Puede verificar la altura del área de texto y verificar la altura real del área de texto, restarlas y obtendrá la altura que necesita para hacer crecer el área de texto para evitar que aparezcan las barras de desplazamiento verticales.

Lo anterior hará que las barras de desplazamiento se activen y desactiven brevemente mientras que su javascript lo hace mágico. Puede usar overflow:auto; para ocultar las barras de desplazamiento, pero entonces no sé si scrollHeight aún leerá correctamente. Necesitarás experimentar

También tome nota de mi comentario anterior sobre la configuración de un intervalo en la tecla y la comprobación de la longitud de entrada para detener la repetición de la tecla de texto.

+0

¿Qué desencadena el control de "scrollHeight?" Estoy viendo que el área de texto escalable es posiblemente más difícil que verificar el tamaño del contenedor ... jaja. Debo comenzar una segunda pregunta. ¿No podría simplemente establecer la altura de la línea dentro del área de texto, y luego (quizás al alcanzar cierto límite de caracteres) cambiar la altura manualmente para duplicar la altura de la línea? Esta aplicación web no permitirá más de 2 líneas ... – jlmakes

+0

Necesitaría encontrar la letra más ancha, y averiguar cuál sería el ancho del contenedor con ese 'límite de caracteres por línea' sería ...y luego encuentre una manera de consultar cuántas letras se ingresan actualmente en una misma 'clave', para que pueda establecer el ancho del área de texto como "# de letras" x "ancho de la letra más ancha". – jlmakes

+0

Cada pulsación de tecla comprueba la cantidad de caracteres introducidos para hacer que la caja crezca horizontalmente y luego, cuando alcanza el ancho máximo, deja de buscarla. En cada pulsación de tecla, compruebe la altura de desplazamiento, si la altura de desplazamiento es mayor que la altura real del área de texto, entonces el texto se ha ajustado a una nueva línea, de modo que amplíe las filas de texto de texto ... – Brady

Cuestiones relacionadas