Sto provando a determinare il numero di pixel verso il basso che ho fatto scorrere usando window.scrollY
. Ma questo non è supportato in IE8. Qual è l'alternativa sicura, cross-browser?alternativa IE8 a window.scrollY?
risposta
La versione compatibile con più browser per window.scrollY
è document.documentElement.scrollTop
. Consulta la sezione "Note" di questo articolo Mozilla documentation per una soluzione completa e dettagliata in IE8 e versioni precedenti.
As mentioned here, pageYOffset
è un'altra alternativa a window.scrollY (nota però che questo è solo compatibile con IE9 +).
Per quanto riguarda il link qui sopra, controllare Esempio 4 di un modo completamente compatibile per ottenere la posizione di scorrimento (esso rappresenta anche per lo zoom come accennato @adeneo!) Utilizzando document.documentElement.scrollTop
e document.documentElement.scrollLeft
.
'document.documentElement.scrollTop' fornisce 0 in Google Chrome 40 – McX
@McX Ciò a causa di un bug di Chrome ancora in sospeso che deve ancora essere risolto (ma a giudicare dalle risposte che ho visto, è in corso la correzione) - https://code.google.com/p/chromium/issues/detail?id=157855 – lifetimes
gennaio 2016, ancora non risolto. – Hacktisch
Se hai un motivo valido per non solo utilizzando una libreria per gestire questo tipo di funzionalità di base, non esitano 'di non reinventare la ruota'.
Mootools is open source, e si può solo 'rubare' la sua attuazione, frammenti rilevanti:
getScroll: function(){
var win = this.getWindow(), doc = getCompatElement(this);
return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
}
function getCompatElement(element){
var doc = element.getDocument();
return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
}
Questi 2 sono il nucleo di decidere quale modalità di compatibilità browser corrente che ha, e quindi se utilizzare window.pageYOffset
o document.body.scrollTop
basato su quello o anche document.html.scrollTop
per browser buggy molto antichi.
Se si utilizza jQuery, ho utilizzato $ (finestra) .scrollTop() per ottenere la posizione Y in IE 8. Sembrava funzionare.
in base alla risposta Niels', vengo con una soluzione leggermente più compatto quando è necessaria solo la coord Y:
function get_scroll_y() {
return window.pageYOffset || document.body.scrollTop || document.html.scrollTop;
}
Se non c'è bisogno di usare un sacco, basta fare:
var scroll =
window.scrollY //Modern Way (Chrome, Firefox)
|| window.pageYOffset (Modern IE, including IE11
|| document.documentElement.scrollTop (Old IE, 6,7,8)
funziona, anche se non penso che sia necessario il secondo (window.pageYOffset). Mentre funziona, tutti i browser IE precedenti supportano il metodo 'document.documentElement.scrollTop' per ottenere la posizione di scorrimento. I nuovi browser IE ("Edge") supportano 'window.scrollY', come menzionato nella MDN: https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY?redirectlocale=en-US&redirectslug = DOM% 2Fwindow.scrollY – ps2goat
In angolare, usiamo:
var windowEl = angular.element($window);
scrolldist = windowEl.scrollTop();
ovvero [jQuery's scrollTop] (https://docs.angularjs.org/api/ng/function/angular.element) comunque .. –
sulla base di Mozilla, e le risposte di cui sopra, ho un creato il bel funzioni ow per ottenere più facilmente le coordinate:
var windowEl = (function() {
var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat");
function scroll() {
return { left: scrollLeft, top: scrollTop };
};
function scrollLeft() {
return window.scrollX || window.pageXOffset || (isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft);
};
function scrollTop() {
return window.scrollY || window.pageYOffset || (isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop);
};
return {
scroll: scroll,
scrollLeft: scrollLeft,
scrollTop: scrollTop
}
})();
Secondo il Mozilla documentation, come citato da vite precedenti, il La proprietà pageXOffset
è un alias per la proprietà scrollX
, così sta stictly parlando non è necessario.
Anyhoo, l'utilizzo è:
var scroll = windowEl.scroll();
// use scroll.left for the left scroll offset
// use scroll.top for the top scroll offset
var scrollLeft = windowEl.scrollLeft();
// the left scroll offset
var scrollTop = windowEl.scrollTop();
// the top scroll offset
testati & opere su Chrome, Firefox, Opera, Riva (8-Edge), IE (7-11), IE8 su XP
window.scrollY & window.scrollX funziona bene in tutti i moderni browser come (Chrome, FireFox & Safari) ma non funziona in IE in modo da risolvere l'uso window.pageXOffset o window.pageYOffset.
Ecco un esempio di codice che ho scritto per risolvere cioè problema in modo che lo scorrimento programmatica funziona in tutti i browser tra cui Internet Explorer
if((window.scrollY || window.pageYOffset) >= 1100){
//alert('Switch to land');
$('#landTrst').trigger('click'); // your action goes here
}else if ((window.scrollY || window.pageYOffset) <= 900) {
//alert('Switch to Refernce Letter');
$('#resLet').trigger('click'); // your action goes here
}
- 1. Alternativa gratuita a PowerGREP
- 2. Alternativa all'elenco a discesa?
- 3. Alternativa a FolderBrowserDialog
- 4. Swift: Alternativa a .classForCoder()
- 5. alternativa a pthread_timedjoin_np
- 6. Sintassi alternativa a __block?
- 7. Alternativa a sun.misc.Signal
- 8. Alternativa a IETester
- 9. Alternativa a fullcalendar?
- 10. Alternativa a FogBugz?
- 11. Alternativa a MediaStore.Playlists.Members.moveItem
- 12. Alternativa a Breeze.js?
- 13. Alternativa a Response.End()?
- 14. Alternativa a scipy.optimize.curve_fit
- 15. Alternativa a TXMLDocument?
- 16. Alternativa a Dreamweaver?
- 17. Alternativa a GLUTSelator?
- 18. ActiveRecord: alternativa a find_in_batches?
- 19. Alternativa Android a MetroGridHelper
- 20. Alternativa sicura a pericolosamenteSetInnerHTML
- 21. alternativa a Windows Servizio
- 22. Alternativa a header_remove
- 23. WinForms: alternativa a SplitContainer?
- 24. Abbastanza alternativa a JProgressBar?
- 25. Alternativa a file_get_contents?
- 26. alternativa flessibile a NSTokenField?
- 27. Alternativa a Intent.FLAG_ACTIVITY_CLEAR_TASK
- 28. Alternativa a texelFetch?
- 29. Alternativa a FusedLocationProviderApi
- 30. Alternativa multipiattaforma a COM
Utilizzare una libreria come Mootools o jQuery per gestire le astrazioni del browser per voi, se possibile. –
Le versioni cross-browser non sono scrollX e scrollY, document.body.scrollLeft e document.body.scrollTop? – lifetimes
^^^^^ È [*** pageYOffset e document.body.scrollTop ***] (http://help.dottoro.com/ljnvjiow.php) – adeneo