2013-05-17 16 views
32

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?

+1

Utilizzare una libreria come Mootools o jQuery per gestire le astrazioni del browser per voi, se possibile. –

+1

Le versioni cross-browser non sono scrollX e scrollY, document.body.scrollLeft e document.body.scrollTop? – lifetimes

+1

^^^^^ È [*** pageYOffset e document.body.scrollTop ***] (http://help.dottoro.com/ljnvjiow.php) – adeneo

risposta

83

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.

Here, try out the example for yourself!

+5

'document.documentElement.scrollTop' fornisce 0 in Google Chrome 40 – McX

+2

@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

+0

gennaio 2016, ancora non risolto. – Hacktisch

2

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.

4

Se si utilizza jQuery, ho utilizzato $ (finestra) .scrollTop() per ottenere la posizione Y in IE 8. Sembrava funzionare.

1

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; 
} 
10

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) 
+4

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

0

In angolare, usiamo:

var windowEl = angular.element($window); 
    scrolldist = windowEl.scrollTop(); 
+0

ovvero [jQuery's scrollTop] (https://docs.angularjs.org/api/ng/function/angular.element) comunque .. –

1

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

0

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 
}