Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/07/2009, 17:30
Stoneplus
 
Fecha de Ingreso: junio-2007
Mensajes: 30
Antigüedad: 17 años, 7 meses
Puntos: 0
Doctype y Javascript

Hola a todos,

espero me puedan ayudar con mi problema. ya que llevo buen rato intentando solucionarlo y nada .

Tengo un código javascript que sirve para crear un layer flotante y que éste te siga cuando te mueves por la web, me dejo entender? osea que cuando usas la barra de Scroll para bajar, el layer baja contigo. Sucede que el código NO funciona cuando pongo uso el doctype :

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "hxxp://www_w3_org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
El código SI funciona cuando no declaro ningún doctype.


El código del problema:
Código PHP:

function closeDiv() {
        
document.getElementById("floatLayer").style.left "-1000px";
        return 
false;
    }

    
    var 
topMargin 150;
    var 
slideTime 2500;
    var 
ns6 = (!document.all && document.getElementById);
    var 
ie4 = (document.all);
    var 
ns4 = (document.layers);

    function 
layerObject(id,left) {
        if (
ns6) {
            
this.obj document.getElementById(id).style;
            
this.obj.left left;
            return 
this.obj;
            }
        else if(
ie4) {
            
this.obj document.all[id].style;
            
this.obj.left left;
            return 
this.obj;
            }
        else if(
ns4) {
            
this.obj document.layers[id];
            
this.obj.left left;
            return 
this.obj;
            }
        }

    function 
layerSetup() {
        
floatLyr = new layerObject("floatLayer"pageWidth .1);
        
window.setInterval("main()"10)
        }

    function 
floatObject() {
        if (
ns4 || ns6) {
            
findHt window.innerHeight;
        } else if(
ie4) {
            
findHt document.body.clientHeight;
           }
        } 

    function 
main() {
        if (
ns4) {
            
this.currentY document.layers["floatLayer"].top;
            
this.scrollTop window.pageYOffset;
            
mainTrigger();
            }
        else if(
ns6) {
            
this.currentY parseInt(document.getElementById("floatLayer").style.top);
            
this.scrollTop scrollY;
            
mainTrigger();
        } else if(
ie4) {
            
this.currentY floatLayer.style.pixelTop;
            
this.scrollTop document.body.scrollTop;
            
mainTrigger();
           }
        }

    function 
mainTrigger() {
        var 
newTargetY this.scrollTop this.topMargin;
        if ( 
this.currentY != newTargetY ) {
            if ( 
newTargetY != this.targetY ) {
                
this.targetY newTargetY;
                
floatStart();
            }
            
animator();
            }
        }

    function 
floatStart() {
        var 
now = new Date();
        
this.this.targetY this.currentY;
        
this.Math.PI / ( this.slideTime );
        
this.now.getTime();
        if (
Math.abs(this.A) > this.findHt) {
            
this.this.this.targetY this.findHt this.targetY this.findHt;
            
this.this.this.findHt : -this.findHt;
            }
        else {
            
this.this.currentY;
           }
        }

    function 
animator() {
        var 
now = new Date();
        var 
newY this.Math.sinthis.* ( now.getTime() - this.) ) + this.D;
        
newY Math.round(newY);
        if (( 
this.&& newY this.currentY ) || ( this.&& newY this.currentY )) {
        if ( 
ie4 )document.all.floatLayer.style.pixelTop newY;
        if ( 
ns4 )document.layers["floatLayer"].top newY;
        if ( 
ns6 )document.getElementById("floatLayer").style.top newY+"px";
           }
        }

    function 
start() {
        if(
ns6||ns4) {
            
pageWidth innerWidth;
            
pageHeight innerHeight;
            
layerSetup();
            
floatObject();
            }
        else if(
ie4) {
            
pageWidth document.body.clientWidth;
            
pageHeight document.body.clientHeight;
            
layerSetup();
            
floatObject();
           }
        }
        

window.onload=start 

El HTML:

Código HTML:
<div id="floatLayer" style="LEFT: 135px; WIDTH: 10px; height:auto;POSITION: absolute; TOP: 464px; HEIGHT: 270px; BACKGROUND-COLOR: #000000;">
	<a onclick="return closeDiv()">cerrar</a>
</div> 
NOTA: Todo esto ocurre en Internet Explorer (6, 7 y 8), porque en Firefox y Chrome el código funciona perfectamente use o no Doctype.

NOTA 2: Cuando digo NO FUNCIONA quiero decir que el layer no te sigue, se queda estático.

Última edición por Stoneplus; 21/07/2009 a las 17:37