Layers y frames

Hola soy Silvia de Barcelona (España).
Antes que nada muchas gracias por ofrecerme tu ayuda.
Intentaré explicarme lo mejor posible y abreviar (que no es fácil).
Ahorrándote detalles, he hecho una web que tiene un frame superior con unos botones en los que al hacer "rollover" se despliegan los submenus que contiene la web. Al hacer "click" en ellos, aparece el doc. Html en concreto en el frame central y en un tercer frame lateral el índice más extenso de contenidos (unos 250 html de contenidos en total).
En un principio hice que ese menú desplegable fuera una "layer" que se hiciera visible al hacer rollover, pero al aparecer verticalmente hacia abajo, me invadía el espacio del frame inferior, por lo cual no podía verla. Entonces (en plan chapuzas) decidí incluir las layers de los submenus en cada uno de los documentos que aparecen en el frame central, de manera que desde el frame suerior las hacia visibles o no. Mi último e insalvable problema hasta ahora, es que cuando el documento central es demasiado largo, tiene un scrolling automático y por consiguiente cuando el usuario baja hacia el final del documento y hace rollover en el menú superior, la layer se hace visible pero no la ve porque está al principio del doc.
Pensé dos soluciones: una, poner en cada documento un "anchor" para que al hacer aparecer la layer a la vez fuera al principio del documento (más chapuzas pero funcionaba), el problema es que no sé el nombre del documento que estará en ese momento y no he logrado decirle que haga visible una capa en otro frame con el doc "no sé cual". La solución dos sería hacer que las layers con los submenus se mantuvieran siempre al principio del frame, pero tampoco sé como hacerlo.
Espero ansiosa tu respuesta, porque de verdad que antes de consultar lo he intentado todo y ahora mismo estoy desesperada y mi cliente también.
Muchas gracias por anticipado y un saludo.
Silvia
Respuesta
1
No tengo ahora mucho tiempo para desarrollar la respuesta a lo que pides. En cualquier caso, y en referencia a lo que dices del "anchor" y de que no sabes el nombre del documento activo en ese momento, sí que puedes referirte a un documento aunque no sepas nu nombre. Desde cualquier frame puedes referencias al padre (propiedad "parent"), y desde éste a cualquiera de los hijos (colección "frames"). Por ejemplo, para referirme desde el frame A a un objeto del frame B, lo haré del siguiente modo:
self.parent.frames("B").document.objeto

3 respuestas más de otros expertos

Respuesta
1
También estoy en Barcelona :-).
A ver, tu problema surge de un fallo en el diseño del site. Debido a esto cualquier cosa que hagas no sera más que una chapuza. ¿Qué programa usas para la realización de páginas?. Es que con Dreamweaver lo que planteas tiene una fácil solución y no necesita de frames -que es el principal fallo que has cometido-
Los frames son malos. Eso deberías de grabartelo en la cabeza. No son malos a priori... pero mira, en cuanto quieres hacer algo complicado o que se sale de lo normal empiezan a salirte conejos del sombrero.
¿Soluciones?
Joder... solo se me ocurre que pases el proyecto a Dreamweaver y que con el correcto uso de Templates consigas reproducir el site de nuevo -seria cuestión de una tarde de trabajo-.
Los templates te permiten tener una plantilla para tu página y cualquier cambio que hagas en la plantilla se replicara por todas las páginas que hereden de ella. Así que podrías tener una plantilla con la parte "dinamica" y ese menu y sus cambios se heredarían por todo el site sin problemas. Porque si no me equivoco el frame superior con el menu lo pusiste precisamente porque se repetía en todo el site, ¿no?
Hola, soy Silvia de Barcelona otra vez.
Muchísimas gracias por responderme tan rápido. Como te dije estoy desesperadilla.
Tienes toda la razón en que seguramente plantee mal el site desde el inicio.
Uso Dreamweaver 4.01. De hecho la web se compone de un frame superior con: cabecera, cuatro botones de acceso a cuatro páginas distintas y tres botones más que son los que desplegan los submenús.
Por otro lado, en la parte inferior, tengo un frame a la izquierda, en el cual pueden aparecer cuatro páginas distintas: una para el inicio de la web y las otras tres los submenús y requetesubmenús más extendidos de los que se desplegan (¿entiendes algo?).
Además al lado de este último frame (en el centro) tengo otro frame donde aparece el grueso de la tropa, los aprox. 250 docs. La idea es que cuando haces clic en alguno de los submenús desplegables, te aparece a la vez en el frame de la izq. el indice más detallado y en el centro la página en cuestión que buscas.
Así que los únicos frames que son susceptibles de cambio son los dos inferiores. La idea era que la cabecera no se refrescara cada vez que voy a uno de esos 250 docs., así como si acceso a éstas desde el índice de la izq. no se refrescara éste cada vez.
¿Es esto lo que habías entendido?
Porque por lo que entiendo me dices, sería mejor crear toda la página completa cada vez (a través de plantillas), pero ¿no haría eso que cada vez se refrescara toda la parte que en realidad en ese momento es común?
Gracias por anticipado y perdona que sea tan "durilla".
Un saludo
Silvia
Perdona por no responder antes... pero me fui a comer :-)...
A ver. En cuanto a tu pregunta:
¿No haría eso que cada vez se refrescara toda la parte que en realidad en ese momento es común?
Si y no. No se refrescaran los gráficos puesto que son guardados en la cache del navegador. El html si. PEro creo que es un precio a pagar bajo si quieres hacer lo de los menús con layers y que no te quede tope cutre. Yo siempre prefiero sites "limpios" a sites con frames. Es que mantenerlos es mucho más fácil.
¿En cuánto a que hacer?... pues yo tiraría por la calle de en medio y utilizaría las herramientas que te ofrece dreamweaver.
Aunque siempre puedes hacer que los layers de menu que has incluido en cada página aparezcan en la parte superior de la pantalla en la posición que le corresponda -lo del anchor es una chapuza-. Se que se puede hacer. O sea, que cuando te pongas sobre el menu1, en la página dentro del frame el layer aparezca en su posición sin necesidad de tirar para arriba en la página. Es posible hacerlo. Pero mis conocimientos de DHTML no son tan grandes. Mirate en las extensiones de dreamweaver no sea que exista alguna extensión que diga algo así como "fixed layer" o así.
Respuesta
1
Ante todo perdona por el retraso de esta respuesta, pero es que no he tenido tiempo.
Creo haber entendido bien tus problemas con la web, se me aparecen unas cuantas ideas para solucionar tu problema sin embargo te intentaré plantear otra que te sirva en general y a su vez te ahorrarás unas cuantas páginas.
Parto de la idea que ya tienes las páginas del frame Central ya hechas.
Lo que te aconsejo (y como norma) es de evitar siempre el uso de frames en un documento, y más aún si combinas 3, en la larga siempre te dan problemas.
Por ello te aconsejaría de que tu página la reestructuraras en 2 frames: el lateral con los 250 links y uno central que abarque toda la altura de la página.
Luego deberías crear una página donde se muestren los menús rollover (en forma de layers absolutos) y añadirle una funcionalidad de lectura de archivos HTML (para los que van en el frame central).
Significa que tendrías (en el frame central):
var contenidoHTMLdelosMenus="";
var contenidoHTMLdelasPaginas="";
function CrearMenusRollover() {
// Preparas el contenido de los menús rollover y los guardas en una variable.
// Al final deberás conseguir que todo tu código HTML y JScript del rollover se haya guardado en una sola variable que yo llamo contenidoHTMLdelosMenus.
}
Por otro lado tienes que crear una función que cargue los contenidos HTML del frame central inicial.
Para ello creas otra función que cargue y guarde, al igual que antes, todo el código HTML y JScript en la 2ª variable contenidoHTMLdelasPaginas.
Una vez tienes esto, puedes a través de JScript y de CSS colocar los elementos como quieras:
Por ejemplo le asignas al document. write de contenidoHTMLdelosMenus las posiciones estáticas y a su vez el posicionamento absoluto. Para el layer donde se cargan las páginas centrales haces lo mismo pero con un Z-Index siempre inferior a la de los menús, lo que te permitirá que siempre este por debajo de los menús.
Este proceso no es necesario que lo hagas en todas las páginas, le debes asignar en cada link de los Menús que en vez de cargar un documento HTML cargue la función de carga de documentos. Es muy sencillo.
Este es el método que te aconsejaría de seguir sin embargo tienes otro que algo chapuzas también es, y que corresponde a crear un IFRAME. Calculas bien los tamaños que te ocuparán los rollover superiores y colocas el IFRAME por debajo, con esto conseguirás que no se mueva toda la página pero que sola se mueva el documento HTML que cargas en el IFRAME. Asegurate de calcular muy bien el tamaño vertical del IFRAME ya que si lo haces más grande que la página, esta y el IFRAME se podrán mover y volverás a tener los problemas de los menús.
Si necesitas más ayuda no dudes en consultarme de nuevo,
buena suerte y hasta pronto.
Respuesta
1
Lo mejor va a ser que en lugar de frame superior uses una tabla o un div y que los layers queden fijos y el fondo sea el que se mueve, es la única forma de desplegar hacia abajo como lo hace microsoft, no se pueden usar frames, no te compliques, y usa tablas o un div superior fijo
Nos vemos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas