Ver Mensaje Individual
  #11 (permalink)  
Antiguo 19/12/2007, 14:10
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 10 meses
Puntos: 45
Re: Redimensionar Imagen (en DIV), sentido Left y Top

Hola de nuevo Deiv.

Lo siento por el error, los cambios de última hora: Los botones sobran, no los queremos para nada. El elem dentro de elem2absolute() es el elemento que queremos que cambie de absolute a relative y de relative a absolute. El código simplemente funciona haciendo mouseover y mouseout en la imagen.


Sí, el código ha engordado un poco... es lo básico para que la imagen cambie a absoluta y se asignen los dos eventos para aumentar y reducir. En realidad se puede recortar un poquito...:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<
head>
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<
meta name="Author" content="derkeNuke" />
<
title>Página nueva</title>
<
style type="text/css">
td {
    
width95px
    
font-size0.5em;
    
padding0;
    
margin0;
}
</
style>
</
head>

<
body>


<
div style="float: left; width: 50%;">
    <
p>Lorem ipsum dolor sit ametconsectetuer adipiscing elitIn pharetrajusto hendrerit tincidunt adipiscingtortor nulla ultricies velitsit amet sodales turpis nunc quis nullaMorbi lacinia consectetuer risusVivamus commodoarcu vel interdum ultricesturpis nisi mollis tellusvitae vulputate lacus pede id nequeAliquam aliquet leo quis nibhSed tempusest in laoreet ornareligula lectus auctor arcuvitae sodales ipsum elit ut nisiVestibulum aliquet dolor vel nuncMaecenas gravida fermentum dolorAliquam laoreet metus in lacusMaecenas quis augue sed orci vulputate rutrumSed maurisEtiam nisi nullaviverra sedcommodo atsollicitudin sedtellusInteger sem quampharetra egetdictum asodales nondolorVivamus orciNunc vestibulum scelerisque semSed convallis iaculis loremVivamus odioQuisque a pede sed sem adipiscing mattisDonec nonummy ante venenatis diamUt ultricies rutrum ligulaNam nulla odiopretium necmolestie uttempor utsem.</p>
</
div

</
div>
<
TABLE border="1" style="border-collapse: collapse; float: left; ">
<
TR>
    <
TD><p>Mauris vestibulum tempus felisNulla ipsum loremauctor necpretium quisauctor egettortor.</p></TD>
    <
TD><p>iaculis feugiatInteger metus enimlaoreet idfeugiat atblandit sit ametmassa.</p></TD>
</
TR>
<
TR>
    <
TD><img id="carita" src="http://www.forosdelweb.com/images/icons/icon10.gif" style="position: relative; width: 64px; height: 64px; margin-left: 0; margin-top: 0;" /></TD>
    <
TD><p>Cras at nibh nec purus lobortis tinciduntIn pretiumVestibulum blandit sagittis leoAenean ut nisiPellentesque non nislPhasellus vel massaNam ut risus..</p></TD>
</
TR>
<
TR>
    <
TD><p>Condimentum idconsequat bibendumtortorDonec eros felisaliquam eumattis noncursus veljusto.</p></TD>
    <
TD><p>egestas velit at nisiInteger laoreet fermentum eratAliquam mollis orci porttitor felis fringilla condimentum.</p></TD>
</
TR>
</
TABLE>

<
script type="text/javascript">
<!--


// document.getElementById abreviado
function $(x) { return document.getElementById(x); }


// créditos findPos: http://www.quirksmode.org/js/findpos.html
function findPos(obj) {
    var 
curleft curtop 0;
    if (
obj.offsetParent) {
        
curleft obj.offsetLeft;
        
curtop obj.offsetTop;
        while (
obj obj.offsetParent) {
            
curleft += obj.offsetLeft
            curtop 
+= obj.offsetTop
        
}
    }
    return [
curleft,curtop];
}

var 
cambiando;                // los procesos
function cambiarTamanyo(elempasohastaCuanto) {
    
// Si estan iniciados los procesos los paramos
    
clearInterval(cambiando); 
    
// Proceso aumentativo
    //var elem0 = elem;        // closure
    //var paso0 = paso;
    
cambiando setInterval( function() {
        var 
anchuraActual parseIntelem.style.width );
        var 
alturaActual parseIntelem.style.height );
        if( (
paso>&& anchuraActual<hastaCuanto && alturaActual<hastaCuanto) ||         // Si podemos aumentar todavía, aumentamos
            
(paso<&& anchuraActual>hastaCuanto && alturaActual>hastaCuanto)
        ) {
            
//dimensiones
            
elem.style.width = (anchuraActual+paso) +"px";
            
elem.style.height = (alturaActual+paso) +"px";
            
//margen
            
elem.style.marginLeft = (parseInt(elem.style.marginLeft)-paso) +"px";
            
elem.style.marginTop = (parseInt(elem.style.marginTop)-paso) +"px";
        }
        else                                                               
// Si no, paramos
            
clearInterval(cambiando);
    }, 
10);
}

window.onload = function() {
    
//localizamos el elemento
    
var imagen = $("carita");
    
//lo ponemos en absoluto, y no debería cambiar su posición
    
var coordenadas findPos(imagen);
    
imagen.style.left coordenadas[0] +"px";
    
imagen.style.top coordenadas[1] +"px";
    
imagen.style.position "absolute";
    
//adjuntamos los eventos
    
imagen.onmouseover = function() {
        
cambiarTamanyo(this1150);
    }
    
imagen.onmouseout = function() {
        
cambiarTamanyo(this, -164);
    }
}

// -->
</script>

</body>
</html> 

Ahora esta más "simplificado", pero no tan legible. Tenemos una función principal cambiarTamanyo(), que sustituye a aumentar() y reducir(), luego tenemos la función findPos() que no podemos eliminar, pero la copié , y la $() para acortar al escribir... a parte de eso seteamos el evento window.onload, y ya no tenemos nada más en el script.


Supongo que ha quedado mejor ¿no?

Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.