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

Ahora viene lo bueno jeje.


Una solución que me ha valido para los dos navegadores es cambiar la posición de relativa a absoluta sin modificar sus coordenadas actuales (transparentemente a los ojos del usuario final). El script en cuestión es éste:

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>


<
p>
    <
button type="button" onclick="elem2absolute()">a absoluta</button>
    <
button type="button" onclick="elem2relative()">a relativa</button>
</
p>

<
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];
}

function 
elem2absolute(elem) {
    var 
coordenadas findPos(elem);
    
elem.style.left coordenadas[0] +"px";
    
elem.style.top coordenadas[1] +"px";
    
elem.style.position "absolute";
}

var 
aumentandoreduciendo;                // los procesos
function aumentar(elemhastaCuanto) {
    
// Si estan iniciados los procesos los paramos
    
clearInterval(aumentando); 
    
clearInterval(reduciendo);
    
// Proceso aumentativo
    
var elem0 elem;        // closure
    
aumentando setInterval( function() {
        var 
anchuraActual parseIntelem0.style.width );
        var 
alturaActual parseIntelem0.style.height );
        if( 
anchuraActual<hastaCuanto && alturaActual<hastaCuanto ) {        // Si podemos aumentar todavía, aumentamos
            //dimensiones
            
elem0.style.width = (anchuraActual+1) +"px";
            
elem0.style.height = (alturaActual+1) +"px";
            
//margen
            
elem0.style.marginLeft = (parseInt(elem0.style.marginLeft)-1) +"px";
            
elem0.style.marginTop = (parseInt(elem0.style.marginTop)-1) +"px";
        }
        else                                                               
// Si no, paramos
            
clearInterval(aumentando);
    }, 
10);
}
function 
reducir(elemhastaCuanto) {
    
// Si estan iniciados los procesos los paramos
    
clearInterval(aumentando); 
    
clearInterval(reduciendo);
    
// Proceso reductivo
    
var elem0 elem;        // closure
    
reduciendo setInterval( function() {
        var 
anchuraActual parseIntelem0.style.width );
        var 
alturaActual parseIntelem0.style.height );
        if( 
anchuraActual>hastaCuanto && alturaActual>hastaCuanto ) {
            
//dimensiones
            
elem0.style.width = (anchuraActual-1) +"px";
            
elem0.style.height = (alturaActual-1) +"px";
            
//margen
            
elem0.style.marginLeft = (parseInt(elem0.style.marginLeft)+1) +"px";
            
elem0.style.marginTop = (parseInt(elem0.style.marginTop)+1) +"px";
        }
        else
            
clearInterval(reduciendo);
    }, 
10);
}


window.onload = function() {
    
//localizamos el elemento
    
var imagen = $("carita");
    
//lo ponemos en absoluto, y no debería cambiar su posición
    
elem2absolute(imagen);
    
//adjuntamos los eventos
    
imagen.onmouseover = function() {
        
aumentar(this150);
    }
    
imagen.onmouseout = function() {
        
reducir(this64);
    }
}

// -->
</script>

</body>
</html> 

El FF tiene el mismo efecto, y en IE funciona igual, con el pequeño "truco".


¿Es ésto lo que estás buscando?



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.