Ich schreibe eine Site mit jquery, die wiederholt $(window).width()
und $(window).height()
aufruft, um Elemente basierend auf zu positionieren und zu dimensionieren die Größe des Darstellungsbereichs
Bei der Fehlerbehebung habe ich festgestellt, dass ich bei wiederholten Aufrufen der obigen jquery-Funktionen geringfügig unterschiedliche Werte für Darstellungsfeldgrößen erhält, wenn das Darstellungsfenster nicht in der Größe geändert wird.
Ich frage mich, ob es irgendeinen besonderen Fall gibt, von dem irgendjemand weiß, wann das passiert, oder ob es genau so ist, wie es ist. Der Unterschied in den angegebenen Größen ist 20px oder weniger, so scheint es. Es passiert in Safari 4.0.4, Firefox 3.6.2 und Chrome 5.0.342.7 Beta auf Mac OS X 10.6.2. Ich habe andere Browser noch nicht getestet, da sie nicht spezifisch für den Browser sind. Ich konnte auch nicht herausfinden, woher der Unterschied kommt. Wenn es nicht die Größe des Darstellungsbereichs ist, könnte es einen anderen Faktor geben, der die Ergebnisse unterscheidet?
Jeder Einblick wäre willkommen.
Update:
Es ist nicht die Werte von $(window).width()
und $(window).height()
dass verändern. Es sind die Werte der Variablen, die ich verwende, um die obigen Werte zu speichern.
Es sind keine Bildlaufleisten, die die Werte beeinflussen, keine Bildlaufleisten werden angezeigt, wenn sich die Variablenwerte ändern. Hier ist mein Code, um die Werte in meinen Variablen zu speichern (was ich gerade mache, damit sie kürzer sind).
(all dies ist in $(document).ready()
)
// zunächst die Variablen deklarieren sichtbar sind Funktionen otehr innerhalb .ready()
var windowWidth = $(window).width(); //retrieve current window width
var windowHeight = $(window).height(); //retrieve current window height
var documentWidth = $(document).width(); //retrieve current document width
var documentHeight = $(document).height(); //retrieve current document height
var vScrollPosition = $(document).scrollTop(); //retrieve the document scroll ToP position
var hScrollPosition = $(document).scrollLeft(); //retrieve the document scroll Left position
function onm_window_parameters(){ //called on viewer reload, screen resize or scroll
windowWidth = $(window).width(); //retrieve current window width
windowHeight = $(window).height(); //retrieve current window height
documentWidth = $(document).width(); //retrieve current document width
documentHeight = $(document).height(); //retrieve current document height
vScrollPosition = $(document).scrollTop(); //retrieve the document scroll ToP position
hScrollPosition = $(document).scrollLeft(); //retrieve the document scroll Left position
}; //end function onm_window_parameters()
ich eine Benachrichtigung Anweisung eingefügt, um die oben genannten Variablen auf die Werte sondieren sie sollen halten. Die $(item).param()
Werte bleiben konsistent, aber meine Variablen ändern sich aus Gründen, die ich nicht herausfinden kann.
Ich habe nach Orten gesucht, wo mein Code den Wert der betreffenden Variablen ändern könnte, anstatt nur ihre gesetzten Werte abzurufen und keine zu finden. Ich kann den ganzen Shebang irgendwo posten, wenn das eine Möglichkeit ist.
BTW, du warst doch recht ... während der Fehlersuche habe ich bemerkt, dass es Scrollbalken gab. Sie erschienen so kurz, dass sie nur im Debug-Modus angezeigt werden konnten, während das Skript mitten in der Ausführung pausierte. Sobald ich die oben genannten Variablen und Funktionen entfernt habe, sind einige Elemente immer noch aus der Position gesprungen - es hatte mit der Reihenfolge der Scriptschritte zu tun - ich musste nur sicherstellen, dass ich das eingefügte Bild auf css left: 0 zurücksetze, bevor ich das Bild einfüge . Moral zur Geschichte: Nur weil Scrollbalken nicht lange genug erscheinen, um gesehen zu werden, heißt das nicht, dass sie nicht da waren! –
Ich würde auch diese Frage verwenden: http://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the-resize-iscompleted, so dass Sie einmal die Größenänderung überprüfen können Ereignis ist beendet, bevor Sie etwas tun. Ihr Skript wird jedes Pixel, das Sie in der Größe ändern, in der Funktion .resize() ausführen. Daher ist es besser zu warten. – MarkP