borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Reemplazar selección con JavaScript Nuevo
  2. ¿Esta IP pertenece a esta red? Modificado
  3. Mozilla Firefox Modificado

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Fecha y hora
  3. Campo autonumérico
  4. Rotar logs en Windows
  5. Reiniciar Apache con cuidado (graceful restart)
Compartir esta página

Ver imagen

Éste es uno de mis recortes favoritos. Abre una ventana emergente para mostrar una imagen y ajusta el tamaño de la ventaña al de la imagen. Sus puntos fuertes:

/*
 * Abre una ventana emergente para mostrar una imagen
 * y ajusta el tamaño de la ventana a la imagen
 *
 * Parámetros:
 *
 * string archivo - URL de la imagen
 * string titulo  - [opcional] Título de la foto
 *
 * Ejemplo de uso:
 *     <a href="foto.jpg" onclick="return verImagen('foto.jpg', 'Atardecer en Cancún')">Ver imagen</a>
 *
 */

function verImagen(archivo, /*opcional*/ titulo){ // v2005-09-18
    // Parámetros personalizables:
    var sitio='Mi sitio web';
    var css='body{background-color: white; margin: 0;}';
    var centrar_ventana=true;

    var ancho_inicial=125;
    var alto_inicial=125;


    this.txt2html=function(txt){
        if(txt){
            var s=txt;

            s=s.replace(/&/g, '&amp;');
            s=s.replace(/"/g, '&quot;');
            s=s.replace(/'/g, '&#039;');
            s=s.replace(/</g, '&lt;');
            s=s.replace(/>/g, '&gt;');

            return s;
        }
    }

    sitio=this.txt2html(sitio)
    titulo=this.txt2html(titulo);

    salida='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n';
    salida+='<html><head><title>' + ((titulo)?titulo+' - ':'') + sitio + '</title>\n';
    salida+='<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">\n';
    salida+='<style type="text/css"><!--\n'+css+'\n--></style>\n';
    salida+='<script type="text/javascript"><!--\n';
    salida+='var img=new Image();\n';
    salida+='img.onload=function(){\n';
    salida+='   self.resizeBy(img.width-' + ancho_inicial + ', img.height-' + alto_inicial + ');\n';

    // Gecko muestra barras de desplazamiento aleatoriamente (aunque no haga falta).
    // Solución: redimensionamos para forzar redibujado
    if(!document.all){
        salida+='   self.resizeBy(20, 20);\n';
        salida+='   self.resizeBy(-20, -20);\n';
    }

    if(centrar_ventana){
        // JavaScript no nos indica el tamaño de la ventana, conque lo aproximamos
        salida+='   self.moveTo((screen.availWidth-img.width-10)/2,(screen.availHeight-img.height-30)/2);\n';
    }

    salida+='   this.onload=null;\n'; // En IE cada cuadro de un GIF animado dispara el evento
    salida+='}\n';
    salida+='img.onerror=function(){\n';
    salida+='   alert("Se ha producido un error al descargar la imagen:\\n"+ unescape(this.src));\n';
    salida+='   self.close();\n';
    salida+='}\n';
    salida+='img.src="' + archivo.replace(/\"/, '&quot;') + '";\n';
    salida+='//--></script>\n</head><body><a href="javascript:self.close()"><img style="border-width: 0px; vertical-align: bottom;" src="';
    salida+=archivo.replace(/"/, '&quot;');
    salida+='" alt="' + ((titulo)? titulo :'') + '" title="Clic para cerrar"></a>';
    salida+='</body></html>\n';

    var v=window.open('', '', 'width=' + ancho_inicial + ',height=' + alto_inicial + ',resizable=1,scrollbars=0');
    v.document.write(salida);
    v.document.close();

    return false;
}

Notas

Bugs

Esta página ha sido impresa el miércoles 8 de febrero de 2012 (01:49:18 +0100) desde http://borrame.com/recortes/javascript/ver-imagen.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2011 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com