Comunidad de diseño web y desarrollo en internet online

Visor de fotos en diapositivas ampliadas y centradas

Citar            
MensajeEscrito el 11 Jun 2013 10:15 am
Hola a todos
Estoy haciendo una galería de imágenes y quiero que al pinchar en una miniatura, aparezca la imagen de esta ampliada, verticalmente en el lugar donde está la miniatura y horizontalmente en el centro de la pagina.
Con el código que he puesto aparece en el lugar fijo que tengo establecido y no es eso lo que quiero, porque si son muchas las diapositivas, en algunos casos la foto grande aparece en un sitio distinto a la diapositiva y ya no se ve, tienes que hacer scroll hasta ella.
Pues os paso el codigo a ver si me podeis echar una mano

<script type="text/javascript">

var x, y

var docAncho = 0
var docAlto = 0

//repeticion calculo posicion capa
var idMovimiento = 0

function muestra_foto( imagenes, ancho, alto ) {
var miFoto

//compruebo si se puede ejecutar el script en el navegador del usuario
if (!document.all && !document.getElementById)
return

//oculta capa foto (por si foto anterior que no se haya ocultado)
ocultar("foto")

//codigo HTML para la imagen
codigo_img = "<a href=\"javascript:ocultar( 'foto' )\" title=\"Pulse para cerrar\"><img id=\"imagen\" src=\"" + imagenes + "\" width=\"336" + "\" height=\"450" + "\" onLoad=\"ver_foto()\" /></a>"
//cambia contenido capa
miFoto = obtiene_objeto( 'foto' )
miFoto.innerHTML = codigo_img
}

//obtiene objeto por nombre
function obtiene_objeto( idobj ) {
//obtiene objeto capa
if (document.getElementById) {
return document.getElementById( idobj )
} else if (document.all) {
return document.all[ idobj ]
} else {
return null
}
}

//muestra capa
function mostrar( que ) {
var miCapa = obtiene_objeto( que )
if ( miCapa )
miCapa.style.visibility = "visible"
}

//oculta capa
function ocultar( que ) {

var miCapa = obtiene_objeto( que )
if ( miCapa )
miCapa.style.visibility = "hidden"

}

function mover( que, posx, posy ) {

var miCapa = obtiene_objeto( que )

if ( miCapa ) {

//para navegadores compatibles DOM
if ( document.getElementById ) {
miCapa.style.top = posy + 'px'
miCapa.style.left = posx + 'px'
}
//para el IE 4.x
else if ( document.all ) {
miCapa.style.pixelTop = posy + 'px'
miCapa.style.pixelLeft = posx + 'px'
}
}
}

//muestra foto y la centra
function ver_foto() {

var miImagen = obtiene_objeto('imagen')

//posicion imagen
doc_ancho_alto()
var centro_x = (docAncho - miImagen.width)/2
var centro_y = (docAlto - miImagen.height)+320

mover('foto', centro_x, centro_y)
mostrar('foto')
}

//original de http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
//determina el ancho / alto del documento
function doc_ancho_alto() {

if( typeof( window.innerWidth ) == 'number' ) {
//Non-IE
docAncho = window.innerWidth
docAlto = window.innerHeight
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
//IE 6+ in 'standards compliant mode'
docAncho = document.documentElement.clientWidth
docAlto = document.documentElement.clientHeight
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
//IE 4 compatible
docAncho = document.body.clientWidth
docAlto = document.body.clientHeight
}
}
</script>

CODIGO HTML

<a href="javascript:muestra_foto('fotoAmpliada.jpg')" >
<img src="miniatura.jpg" border="0" alt=""/></a>

Por josemar2000

15 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 Jun 2013 12:23 pm
Este código es prehistórico!.

document.all? eso es de IE4.

Ahora bien, no entiendo completamente lo que quieres hacer, dices que quieres centrar la imagen "verticalmente en el lugar en la que está la miniatura", no entiendo esa parte. Y horizontalmente "en el centro de la página", pero no sería mejor en el centro de la ventana? (no es lo mismo el centro de la página que el centro de la ventana).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Jun 2013 05:26 pm
Hola, ya se que el código es un poco prehistórico pero yo también lo soy, por una serie de circunstancias la programación la he tenido un poco abandonada en los últimos años, pero volviendo a lo que nos atañe, a lo que me refiero es que necesito que la imagen ampliada me salga en el centro de la ventana donde se encuentra la miniatura, porque son varias y quiero que al pulsar en las primeras o en las ultimas la imagen grande me quede en el centro de la ventana donde está la miniatura correspondiente y por tanto siempre a la vista, porque he probado ha centrarlo en la ventana pero me lo centraba en la ventana que tu ves al cargar la pagina, pero la miniatura está mucho más abajo, entonces al pulsar en esta, la imagen se me abría al principio de la página, entonces tenía que hacer scroll y subir para arriba.
P.D. Si a ti se te ocurre un código más moderno y que haga lo mismo estoy abierto a cualquier sugerencia
Saludos y gracias por contestar

Por josemar2000

15 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 Jun 2013 06:40 pm
Pues necesito algo del código HTML que va con todo esto.
El centrado en la ventana (no en la página) lo puedes hacer aplicando position: fixed; (en CSS) al contenedor de la imagen (supongo que será un <div>). Para hacer esto primero tienes que saber el tamaño de la ventana y por otro lado el tamaño intrinseco de la imagen, o al menos el tamaño del contenedor si la imagen es más grande que la ventana en alguna de sus dimensiones.

Hay varios métodos para obtener ambos datos. Para el caso de la ventana el más compatible es:

Código Javascript :

var w = window.innerWidth;
var h = window.innerHeight;

Para el caso del contenedor:

Código Javascript :

var cw = document.getElementById('contenedor').clientWidth;
var ch = document.getElementById('contenedor').clientHeight;

Teniendo estos datos es nada más que aplicar el top y el left correcto simplemente restando la mitad de las dimensiones del contenedor a la mitad de las dimensiones de la ventana:

Código Javascript :

var contenedor = document.getElementById('contenedor');
contenedor.style.top = parseInt((h/2)-(ch/2))+'px';
contenedor.style.left = parseInt((w/2)-(cw/2))+'px';

Como dije, el elemento con id="contenedor" debe tener position: fixed;

Sin embargo hay un problema con IE8, no tiene la propiedad innerWidth ni innerHeight, pero hay una forma de obtener el mismo dato:

Código Javascript :

if (typeof window.innerWidth != 'undefined') { 
   var w = window.innerWidth; 
} else {
   var w = document.documentElement.clientWidth;
}
if (typeof window.innerHeight != 'undefined') { 
   var h = window.innerHeight; 
} else {
   var h = document.documentElement.clientHeight;
}


Hice un ejemplo para que veas todo esto andando:

http://fivemedia.com.ar/dexter/test219.php

Revisa el código fuente, está todo ahí.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 12 Jun 2013 08:11 pm
SOLUCIONADO - FUNCIONA PERFECTAMENTE, esto es lo que yo quería, me has hecho un hombre, muchas gracias.

Lo de Fixed, me preocupa algo, porque da problemas con el IE con la version 7.0 y anteriores, pero mientras con las modernas vaya bien no me preocupa demasiado.
Y con el Firefox cuando pinchas en la miniatura se abre el fondo del contenedor, que es un div y un segundo después se llena con la foto grande pero sólo pasa con este navegador con los demás funciona perfectamente, así que si se te ocurre algo bien, sino, pues yo lo doy por solucionado.
Y lo dicho muchas gracias

Por josemar2000

15 de clabLevel



 

msie8
Citar            
MensajeEscrito el 13 Jun 2013 12:10 pm
Salvo que estés haciendo esto para una intranet donde solo usan IE7 o algún sitio para China, IE7 no debe preocuparte.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 17 Jun 2013 08:11 am
Hola, y como habría que hacer para que la imagen grande en vez de aparecer centrada en la ventana apareciera encima de su miniatura, o sea, de la miniatura sobre la que has hecho clic

Por josemar2000

15 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Jun 2013 12:31 pm
Pues debes obtener la posición relativa del elemento que contiene la miniatura. Con JS puedes obtener información acerca del DOM, léete un buen manual y consulta páginas sobre el tema, seguro que encuentras cómo hacerlo.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 24 Jun 2013 12:46 pm
Tomo nota de tu consejo y gracias por tu ayuda en la resolución de mi anterior consulta

Saludos

Por josemar2000

15 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.