En este tip mostraré un ejemplo de texto con scroll en una maquetación de dos columnas (siguiendo este mismo ejemplo se podrian colocar tres o mas columnas sin problema). Lo interesante del ejemplo es que podremos controlar el desplazamiento entre las diferentes columnas de texto con un mismo scroll.
Este sería el ejemplo:
Arrastra el slide para scrollar el texto
El primer paso será colocar en nuestra película dos cajas de texto y un componente slider (esto lo podríamos haber hecho por código, pero como no es importante para el ejemplo lo haremos "a mano". El uso del componente slider tambien es opcional, tambien podríamos haber utilizado un scroll personalizado)
Para seguir el ejemplo llamaremos a los TextFields "texto1" y "texto". Al componente slider lo llamaremos "slide".
Ahora pasemos al código. Primero de todo será obtener el texto. Este texto lo podemos sacar de un xml, base de datos o de donde sea. Para el ejemplo lo colocaré directamente en una variable:
Código :
var _texto:String = "La comunicación nos hizo inteligentes. Sentientes. Es el mecanismo evolutivo con el que perpetuamos el conocimiento y la experiencia. Con ella nacieron conceptos como los sentimientos, el arte y la especulación del futuro. Muchos de esos sentimientos sólo son posibles cuando compartimos lo que nuestro cerebro compone con otro individuo. Como el amor.<br/><br/>Mitsuki reflexionaba eso a bordo de la nave-prisión. Axe le cortó el cuello a Shiro en Presea y él decidió dejar la herida en su lugar, perdiendo el habla para siempre. Ella apoyó y entendió su decisión, pero seguía insegura en su mente.<br/><br/>Franz Miller, presidente de Xenos, les encomendó la misión de ir a la prisión “Alegría” del Congreso. Eliminar cualquier resistencia o testigos y silenciar a Cris Tanner. Así lo hicieron.<br/><br/>Tras la misión, los Cobradores, Mitsuki y Shiro, pasaron tres días en la oscuridad metálica de la prisión, asegurándose que nadie más viniera. Franz sospechó que Axe podría enviar a alguien y ellos confiaban en el juicio de su jefe y amigo. Suficiente tiempo para que Mitsuki reflexionara acerca de Shiro.<br/><br/>Ellos se comunicaban de otras formas. Compartían un enlace Synapse cerebral para intercambiar pensamientos. Habían hecho el amor incontables veces e incluso dieron el siguiente paso hace tiempo, sincronizando sus mentes en más de una ocasión. A diario, un simple gesto les daba a entender más que un millón de frases ¿Qué cambio tenía el no poder decir en palabras lo que ellos ya sabían?<br/><br/>Los sensores de movimiento los alertaron. Una nave se acoplaba al casco lateral de la prisión, cortando la cubierta y entrando a la fuerza. Una nave de perturbante similitud a la Opera que ambos vieron estallar en Presea.<br/><br/>Shiro sintió la inseguridad en Mitsuki. Flotando como estaban, Shiro giró hasta estar frente a ella, la tomo en sus brazos y la miró un largo rato a los ojos antes de prepararse para el asalto. Fue todo lo que Mitsuki necesitó. Era tiempo de trabajar.";
Ahora colocaremos el texto dentro de la caja de texto "texto1", y comprobaremos si el texto es demasiado largo para caber en la primera caja. Si es demasiado largo colocaremos este mismo texto en la segunda caja, en caso contrario ocultaremos el componente slider ya que no será necesario hacer scroll.
Código :
texto1.htmlText = _texto;
if (texto1.maxScrollV > 1) {
texto2.htmlText = texto1.htmlText;
} else {
slider.visible = false;
}Ahora tenemos que desplazar el texto de la segunda caja para que la última línea de la primera caja enlace con la primera línea de la segunda caja. Para esto tendríamos que saber el número total de líneas que caben en la caja, esto lo podriamos saber haciendo una prueba manual pero como podria interesarmos cambiar el tamaño del texto a través de código y esto haría variar el número de líneas es mejor hacer la comprobación tambien a través de código. Esta función nos devolvería el número de lineas de la caja:
Código :
function getMaxLines(caja:TextField):Number {
var texto:String = caja.htmlText;
caja.htmlText = "";
var num:Number = 0;
while (caja.maxScrollV <= 1) {
caja.htmlText += (num+"<br/>");
num++;
}
caja.htmlText = texto;
return num - 1;
}
La idea de esta función es que va colocando lineas de texto hasta que detecta que es necesario un scroll (maxScrollV mayor de 1) entonces devuelve el valor de las líneas añadidas. Sabiendo este valor cambiaremos el scroll vertical de la segunda caja de texto.
Código :
if (texto1.maxScrollV > 1) {
texto2.htmlText = texto1.htmlText;
var maxlines:Number = getMaxLines(texto1);
texto2.scrollV += maxlines;
} else {
slider.visible = false;
}Nos faltaría hacer una última comprobación, que sería el caso en que el texto no llenase toda la segunda caja. Entonces tendríamos que llenar la caja con lineas en blanco y ocultar el slider.
Código :
if (texto1.maxScrollV > 1) {
texto2.htmlText = texto1.htmlText;
var maxlines:Number = getMaxLines(texto1);
trace("ssss"+texto1.scrollV)
texto2.scrollV += maxlines;
var num:int = maxlines - texto1.maxScrollV;
if (num>0) {
for (var i = 0; i <= num; i++) {
texto2.htmlText += "<br/>";
texto2.scrollV++;
}
slider.visible = false;
}
} else {
slider.visible = false;
}Finalmente solo falta programar el slider para que desplace el texto.
Le indicaremos al componente slider que los pasos de scroll serán tantos como tantas línas ocultas tenga la segunda caja de texto.
Código :
import fl.events.SliderEvent; slider.maximum = texto2.maxScrollV-texto2.scrollV;
Añadiremos al componente un evento THUMB_DRAG para cuando arrastremos el slider y un evento CHANGE para cuando cliquemos sobre la barra. Haremos que el scroll de la primera caja sea en relación al valor del slider y que el scroll de la segunda caja vaya en relación con el de la primera.
Código :
import fl.events.SliderEvent;
slider.maximum = texto2.maxScrollV-texto2.scrollV;
slider.addEventListener(SliderEvent.THUMB_DRAG, scrollTexto);
slider.addEventListener(SliderEvent.CHANGE, scrollTexto);
function scrollTexto(event:SliderEvent):void {
texto1.scrollV = 1+slider.value;
texto2.scrollV = texto1.scrollV + maxlines;
}Y listo!
archivo.fla

Por enjoydasilence el 22 de Septiembre de 2007
PD: probando....
Por enjoydasilence el 22 de Septiembre de 2007
Creo que acabas de darme una idea para el site que estoy haciendo...
Por el_mismo_IP el 22 de Septiembre de 2007
Sorry si me voy del tema quiero ir a foro pero BOFH
Por el_mismo_IP el 22 de Septiembre de 2007
Por camiloesc el 22 de Septiembre de 2007
Por rak el 22 de Septiembre de 2007
Por [url=http://www.dise el 22 de Septiembre de 2007
Por pabletein el 24 de Septiembre de 2007
Por Elecash el 25 de Septiembre de 2007
A ver si te animas y me pasas el componente columnero a AS3 XDDD
http://www.elecash.org/blog/2005/08/27/componente-columnero-v03/
Yo no creo que lo use (por eso de que en Flash Lite no hay AS3 aun), pero bueno, que seguro que la gente le saca partido tambien
Deu!!
Por halb el 02 de Octubre de 2007
Por mich el 16 de Noviembre de 2007
y busco ayuda para acesoramiento de codificacion o programacion de flash
Por Carles Bell el 26 de Noviembre de 2007
¿Alguna posibilidad de hacerlo como si fuera un ejemplo desarrollado en Flex"
Por holafio el 06 de Diciembre de 2007
muy útil y buena la ayuda.
Salud!
Por fr el 16 de Diciembre de 2007
Por jos el 02 de Abril de 2008
jos_blog :
Necesitas Flash CS3 para abrirlo, seguramente estas intentándolo abrir con el Flash 8..
Por jenifer el 16 de Septiembre de 2008
Por enWILLYado el 18 de Noviembre de 2008
Lo que ocurre es que yo esto lo he hecho para una sola columna. Supongo que como idea está bien si a alguien le interesa que el Scroll se mueva cuando scrollemos sobre el Texto y que vaya líena a línea. El texto tiene que ser scrollable.
var hay:int = texto1.scrollV;
var time:uint = getTimer();
texto1.addEventListener( Event.SCROLL, hazScroll );
function hazScroll(event:Event):void {
if ( time + 50 < getTimer() ) {
time = getTimer();
if ( texto1.scrollV < hay ) {
hay--;
} else {
hay++;
}
}
slider.value = (texto1.scrollV=hay)-1;
}
Por Rafa el 01 de Diciembre de 2008
Por lalo el 21 de Diciembre de 2008
Por Rafael Bello el 21 de Enero de 2009
Por carito el 08 de Abril de 2009
no capte lo del willyado
Por alley cat el 28 de Abril de 2009
Por victor el 08 de Diciembre de 2009
Gracias
Por mastersexxx el 20 de Diciembre de 2009
no funciona bien asi...
Por yaz el 27 de Marzo de 2011
y si solo quiero las 2 columnas sin el scroll?