2011-01-13 7 views
0

Ich bin neu in Jquery und Javascript, und auf der Website insgesamt entwickeln, und ich habe ein Problem mit der Offset-Funktion. Ich habe den folgenden Code funktioniert gut auf Chrom und FF aber nicht funktioniert auf IE:Problem mit der Ausgabe von Jquery Funktion .offset in IE

$(document).keydown(function(k){ 
    var keycode=k.which; 
    var posk=$('html').offset(); 
    var centeryk=screen.availHeight*0.4; 
    var centerxk=screen.availWidth*0.4; 
    $("span").text(k.which+","+posk.top+","+posk.left); 
    if (keycode==37){ 
     k.preventDefault(); 
     $("html,body").stop().animate({scrollLeft:-1*posk.left-centerxk}) 
    }; 
    if (keycode==38){ 
     k.preventDefault(); 
     $("html,body").stop().animate({scrollTop:-1*posk.top-centeryk}) 
    }; 
    if (keycode==39){ 
     k.preventDefault(); 
     $("html,body").stop().animate({scrollLeft:-1*posk.left+centerxk}) 
    }; 
    if (keycode==40){ 
     k.preventDefault(); 
     $("html,body").stop().animate({scrollTop:-1*posk.top+centeryk}) 
    }; 
}); 

Hut ich es tun möchte, ist das Fenster einen Satz Prozentsatz mit den Pfeiltasten zu bewegen, so war mein Gedanke das finden aktuelle Koordinaten der oberen linken Ecke des Dokuments und fügen Sie einen Prozentwert relativ zum Benutzerbildschirm hinzu und animieren Sie den Bildlauf so, dass der Inhalt nicht springt und der Benutzer den Fokus verliert, von wo er war. Der $ ("span") .text ist nur so, dass ich weiß, was passiert und wird in Kommentare umgewandelt, wenn der Code vollständig ist.

Also, was passiert, in Chrome und Firefox ist die Ausgabe des $ ("span") .texts für die Positionsvariablen korrekt, beginnend bei 0,0 und zeigt immer wieviele Inhalte in Koordinaten gescrollt wurden , aber bei IE beginnt es bei -2, -2 und kommt nie wieder raus, auch wenn ich das Fenster manuell bis zum Ende scrolle und versuche, mit der rechten Pfeiltaste immer noch den Anfangswert von -2, - zurückzugeben. 2 und blättern Sie zurück zum Anfang.

Ich habe versucht, den Offset für document.body.scrollLetf und scrollTop zu ersetzen, aber das Ergebnis ist das gleiche, nur dieses Mal sind die Koordinaten 0,0. Mache ich etwas falsch? Oder ist das ein IE Bug? Gibt es einen Weg darum herum oder eine andere Funktion, die ich nutzen kann, um die gleichen Ergebnisse zu erzielen?

Auf einer anderen Anmerkung, ich habe zwei andere Optionen für den Benutzer in diesem Bereich der Website navigiert, ist ein klicken und ein beliebige Stelle auf dem Bildschirm zu ziehen, um es zu bewegen:

$("html").mousedown(function(e) 
{ 
    var initx=e.pageX 
    var inity=e.pageY 
    $(document).mousemove(function(n) 
    { 
     var x_inc= initx-n.pageX; 
     var y_inc= inity-n.pageY; 
     window.scrollBy(x_inc*0.7,y_inc*0.7); 
     initx=n.pageX; 
     inity=n.pageY 
     //$("span").text(initx+ "," +inity+ "," +x_inc+ "," +y_inc+ "," +e.pageX+ "," +e.pageY+ "," +n.pageX+ "," +n.pageY); 

    // cancel out any text selections 
    document.body.focus(); 

    // prevent text selection in IE 
    document.onselectstart = function() { return false; }; 
    // prevent IE from trying to drag an image 
    document.ondragstart = function() { return false; }; 

    // prevent text selection (except IE) 
    return false; 
    }); 
}); 

$("html").mouseup(function() 
{ 
    $(document).unbind('mousemove'); 
}); 

Der einzige Teil dieses Code, den ich nicht geschrieben habe, waren die Auswahllinien für den Text, die ich in einem Tutorial über das Klicken und Ziehen von Objekten gefunden habe. Dieser Code funktioniert in Chrome, FireFox und IE, obwohl es in Firefox und IE öfter passiert Moviment Störungen während Sie ziehen, manchmal scheint es das "Scrollen" ist ein wenig gezackt, es ist nur eine visuelle Sache und nicht so wichtig, aber wenn es einen Weg gibt, es zu verhindern, würde ich gerne wissen.

Antwort

1

in Ordnung Ich habe gerade mein Problem gelöst, die POSK Variable

var poskt=$(document).scrollTop(); 

und das Hinzufügen eines neuen var für scrollleft zu ändern, so der Code verhalten sich genauso auf Chrome, FF und Internet Explorer