Sto scrivendo un sito utilizzando jquery che chiama ripetutamente $(window).width()
e $(window).height()
per posizionare e dimensionare elementi in base a la dimensione del viewport.
Nella risoluzione dei problemi, ho scoperto che sto ottenendo report di dimensioni viewport leggermente diversi nelle chiamate ripetute alle funzioni jQuery sopra riportate quando la finestra non viene ridimensionata.
Chiedendosi se c'è qualche caso particolare, qualcuno sa di quando succede, o se è proprio così. La differenza nelle dimensioni riportate è 20px o meno, sembra. Accade in Safari 4.0.4, Firefox 3.6.2 e Chrome 5.0.342.7 beta su Mac OS X 10.6.2. Non ho ancora provato altri browser perché non sembra essere specifico per il browser. Non ero nemmeno in grado di capire da cosa dipende la differenza, se non è la dimensione della finestra, potrebbe esserci un altro fattore che rende i risultati diversi?
Qualsiasi intuizione sarebbe apprezzata.
aggiornamento:
Si non i valori di $(window).width()
e $(window).height()
che cambiano. Sono i valori delle variabili che sto usando per memorizzare i valori di cui sopra.
Non ci sono barre di scorrimento che influenzano i valori, non appaiono barre di scorrimento quando i valori delle variabili cambiano. Ecco il mio codice per memorizzare i valori nelle mie variabili (che sto facendo solo in modo che siano più brevi).
(tutto questo è a $(document).ready()
)
// inizialmente dichiarare le variabili per essere visibili a otehr funzioni all'interno .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()
ho inserito una relazione d'allarme per sondare le variabili di cui sopra contro i valori che dovrebbero avere in mano. I valori $(item).param()
rimangono coerenti, ma le variabili cambiano per motivi che non riesco a capire.
Ho cercato i punti in cui il mio codice potrebbe alterare il valore delle variabili in questione, anziché recuperare solo i valori impostati e non trovarne nessuno. Posso postare l'intera shebang da qualche parte se questa è una possibilità.
btw, avevi ragione dopo tutto ... durante la risoluzione dei problemi ho notato che c'erano barre di scorrimento. apparivano così brevemente che non potevano essere visti se non in modalità debug con la sceneggiatura sospesa a metà dell'esecuzione. una volta rimosse le variabili e la funzione di cui sopra, alcuni elementi saltarono ancora dalla posizione - aveva a che fare con l'ordine delle istruzioni di script - dovevo solo assicurarmi di resettare il div tenendo le immagini inserite a css left: 0 prima di inserire l'immagine . morale alla storia: solo perché le barre di scorrimento non appaiono abbastanza a lungo da essere viste, non significa che non erano lì! –
Vorrei anche usare questa domanda: http://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the-resize-is-completed in modo da poter controllare una volta che il ridimensionamento l'evento è finito prima di fare qualsiasi cosa. Lo script eseguirà ciò che è sempre nella funzione .resize() ogni pixel che ridimensionate, quindi è meglio aspettare. – MarkP