Fondo de pantalla adaptable a tamaño del navegador.

KeyWords> Stage.onResize, MovieClipLoader()

A estas alturas de Flash, hay pequeños detalles que marcan la diferencia, cuando vemos uuna web nueva que nos impacta, nuestro lado perverso nos lleva a buscar pequeños fallos o a pensar como se habrá hecho aquello que tanto nos gusta. Personalmente, una de mis manías consiste en comprobar si los contenidos se adpatan a la resolución de pantalla. Un claro ejemplo es el de una web que utiliza un fondo de pantalla que ocupa toda la ventana del navegador. Que feo queda cuando la imagen se distorsiona o queda cortada. Veamos como arreglar este problema.

Ver ejemplo »

Optimizamos el escenario, para el uso del objeto Stage.

Actionscript:
  1. Stage.scaleMode = 'noScale';
  2. Stage.align = 'TL';

La función stageResize, redimensiona el el fondo de la película cada vez que se modifica el tamaño de la ventana del navegador.

Actionscript:
  1. stageResize = function ():Void {
  2.     holder._width = Stage.width;
  3.     holder._height = Stage.height;
  4. };
  5. stageListener = new Object();
  6. stageListener.onResize = stageResize;
  7. Stage.addListener(stageListener);

Necesitamos un preloader para la precarga de nuestro fondo de pantalla.

Actionscript:
  1. this.createTextField("my_txt", 1, 0, 0, 300, 100);
  2. my_txt.autoSize = true;
  3. var my_fmt:TextFormat = new TextFormat();
  4. my_fmt.color = 0x000000;
  5. my_fmt.font = 'Arial';
  6. my_fmt.size = 10
  7. my_txt.setNewTextFormat(my_fmt);

Mostrar precarga

Actionscript:
  1. var my_listener:Object = new Object();
  2. my_listener.onLoadProgress =
  3. function(target_mc:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void  {
  4.     my_txt.text = 'Cargando ...  ' + Math.round(bytesLoaded / bytesTotal * 100) + ' %';
  5. };

Actionscript:
  1. my_listener.onLoadInit = function(target_mc:MovieClip) {
  2.     my_txt.removeTextField();
  3.     mcLoader.removeListener(my_listener);
  4.     stageResize();
  5. };

Carga de la imagen.

Actionscript:
  1. var holder:MovieClip =
  2. this.createEmptyMovieClip('holder_mc', this.getNextHighestDepth());
  3. var mcLoader:MovieClipLoader = new MovieClipLoader();
  4. mcLoader.addListener(my_listener);
  5. mcLoader.loadClip('images/bg01.jpg', holder);

Publicar

El último toque consiste en configurar los parámetros de publicación, abrir el panel Configuración de publicación y asegurate de cambiar los siguientes valores:

  • Dimensions: percent
  • Escale: no scale

Descarga Fondopantalla.zip

Fondopantalla.zip se ha descargado 2,587 veces.

3 Votes | Average: 2.33 out of 53 Votes | Average: 2.33 out of 53 Votes | Average: 2.33 out of 53 Votes | Average: 2.33 out of 53 Votes | Average: 2.33 out of 5 (3 votos, promedio: 2.33 sobre 5)
Loading ... Loading ...

17 Responses to “Fondo de pantalla adaptable a tamaño del navegador.”


  1. 1 pixel Feb 15th, 2007 at 11:37 pm

    un saludo, lo que me pasa es que al redimensionar la ventana el fondo de la web se distorciona, asi como los textos de la web. no hay forma de que solamente el fondo de la web sea el que se escale sin que el contenido se vea afectado mantenienodse con las mismas dimensiones? gracias por todo.

  2. 2 toni Feb 16th, 2007 at 7:15 am

    Hola pixel, lo que puedes hacer, es cargar la imagen de fondo en un clip de película vacío en una capa inferior, veamos:

    1. anular el siguiente código:

    Código:

    Actionscript:
    1. var holder:MovieClip =
    2. this.createEmptyMovieClip('holder_mc', this.getNextHighestDepth());

    2. Crear un clip de película vacio (menú-> insertar > nuevo simbolo > clip de película),

    3. Inserta una capa nueva que siempre estará debajo del resto de capas

    4. Abre la biblioteca y arrastra el clip de película vacio al escenario.

    5 Selecciona el clip de película vacio (un circulo pequeño) y se abre el inspector de propiedades.

    6. En el inspector de propiedades, donde dice , escribe 'holder' sin comillas.

    Con esto debería funcionar sin modificar nada. (el resto de código en fotograma1)

    saludos

  3. 3 grmn Feb 16th, 2007 at 1:15 pm

    Hola! muy bueno, pero tengo un problema ya que la posición del fondo el el primer caso es 0,0 y cuando lo pongo dentro de MC me queda donde lo posiciones, como sería para que me Área de trabajo quede en el medio??, sin tener que posicionar en un lugar el MC.

    Gracias por el ejemplo.

    Saludos.
    grmn

  4. 4 toni Feb 17th, 2007 at 6:43 am

    Puedes hacerlo modificando un poco la funcion stageResize:

    Actionscript:
    1. stageResize = function ():Void {
    2.     holder._width = Stage.width;
    3.     holder._height = Stage.height;
    4.  
    5. // -- posicionar holder (clip que contiene el fondo)
    6.  
    7. holder._x = (Stage.width/2) - (holder._width/2)
    8. holder._y = (Stage.height/2) - (holder._heigth/2)
    9.  
    10. };

    saludos

  5. 5 grmn Feb 18th, 2007 at 8:05 pm

    Toni, muchas gracias por la ayuda!
    Te cuento que sigue igual, el area de trabajo queda siempre a la izq arriba, y no en el centro, ya que cuando lo colocas en un html hay que dejarlo 100% no queda centrado.
    Espero que me hayas entendido!

    Saludos

  6. 6 grmn Feb 18th, 2007 at 8:08 pm

    Ah! me olvide, tiene un error ortográfico en:

    holder._y = (Stage.height/2) - (holder._heigth/2)

    El segundo "height" esta mal escrito.

    Saludos

  7. 7 grmn Feb 18th, 2007 at 8:58 pm

    Toni, ya lo arregle! disculpa la cantidad de comentarios!
    Lo que hice fue colocar todos los elementos de mi pelicula, menos el "holder" y el AS del mismo, en un MC con nombre "pelicula" y le aplique el mismo cambio que al fondo y quedo!

    pelicula._x = (Stage.width/2) - (pelicula._width/2)
    pelicula._y = (Stage.height/2) - (pelicula._heigth/2)

    Gracias!!
    Saludos.-

  8. 8 juan Feb 18th, 2007 at 11:48 pm

    hola, ¿como puedo cargar un SWF 'encima' del fondo y que quede siempre en el centro de la pantalla, cualquiera que sea la resolucion del usuario?
    el fondo se carga en 'holder'. supongo que tengo que crear otro movieclip vacio para meter ahi mi SWF, pero si lo hago me lo posiciona donde puse el movieclip y no se reposiciona al cambiar el tamaño de la ventana.

    gracias

  9. 9 Daver Feb 22nd, 2007 at 6:36 pm

    Juan, no es necesario que esté vacio, create uno con un cuadrado mismo llamalo pelicula, y copia este código en la función stageResize del primer frame de la peli.

    pelicula._x = (Stage.width/2)
    pelicula._y = (Stage.height/2)

  10. 10 toni Feb 22nd, 2007 at 8:49 pm

    grmn,

    mirate la respuesta que doy con fecha 16 de febrero, está explicado paso a paso.

    Daver, te has dejado algo creo,

    Para que quede centrado el clip es:

    Actionscript:
    1. pelicula._x = (Stage.width/2) - (pelicula._width/2)
    2. pelicula._y = (Stage.height/2) - (pelicula._height/2)

    saludos

  11. 11 Daver Feb 23rd, 2007 at 8:28 am

    Toni, lo probé con ese código y se me iba el clip a la izquierda arriba, probé a quitarle lo de restarle "-(pelicula._width/2)" y me funcionó.

  12. 12 toni Feb 23rd, 2007 at 2:25 pm

    Disculpa,

    es que yo tengo la costumbre d alinear los clips de película en x:0 y:0 y por eso le tengo que restar la mitad del tamaño, supongo que tu clip, tiene el punto de registro al centro.

    saludos.

  13. 13 Daver Feb 23rd, 2007 at 2:31 pm

    No te tienes porque disculpar, era eso yo los ajusto al centro siempre ;)

  14. 14 osk Jul 2nd, 2007 at 9:26 pm

    Hola Toni.

    Estoy haciendo algo muy parecido a esto, pero en vez de tener una imagen fija de fondo, cargaría un swf que es un slideshow de fotos ("slideshow.swf").

    El caso es que aunque en local y probando desde flash me va todo perfecto, al subirlo y abrir la página, el movieclip que carga "slideshow.swf" no se redimensiona al tamaño del navegador.

    Para que se "entere" tengo que redimensionar manualmente el navegador... he probado a llamar a la función "stageResize" en los eventos onLoadInit, onLoadProgress y onLoadComplete. También he creado una función independiente a "stageResize" que redimensione el movieclip, pero no consigo que funcione bien.

    Estoy pensando en redimensionar la página al cargarse con javascript, pero preferiría no usar éste sistema... ¿se te ocurre alguna solución?.

    Muchas gracias por tu ayuda y por ésta web que es todo un referente :) .

  15. 15 felipe millan Sep 7th, 2007 at 2:50 am

    Hola toni, te escribo porque tengo un par de dudas y necesito tu ayuda y conocimientos.

    En mi sitio tengo dos ejemplos y si pudieras verlos y decirme como poder hacerlo.

    Ejemplo 1: Estoy probando un blog en flash al cual le e dado transparencias para hacerlo un poco mas interesante, el tema es que me gustaria poder buscar la forma de desplegarlo dentro de mi sitio, como un elemento externo y que tambien tenga el fondo adaptable como el que enseñaste en ese post.

    url: http://felipe.orangemedialabs.com/flashblog/

    Ejemplo 2: realize el ejemplo que muestras, para lograr que una imagen se adapte al tamaño del browser, pero no logro dejarlo sin margenes como el ejemplo tuyo, a mi me quedan margenes blancos. si pudieras decirme como solucionar esto porfavor.

    Muchas Gracias por todo

    Increible el sitio

  16. 16 Fede Sep 10th, 2007 at 4:24 pm

    Felipe, para que no te queden margenes blancos debes editar el html donde se carga la pelicula y agregar este codigo entre las atiquetes
    y :

    Espero te sirva, saludos

  17. 17 Nisa Nov 16th, 2007 at 9:53 am

    Solo una preguntita, este artículo se refiere a ActionScrip 2 o 3?

Leave a Reply




Subscribe

Subscribe to my RSS Feeds