2013-05-17 10 views
32

window.scrollYを使用してスクロールしたピクセル数を調べようとしています。しかしこれはIE8ではサポートされていません。安全なブラウザ間の代替手段は何ですか?IE8の代わりにwindow.scrollY?

+1

を含むすべてのブラウザで動作するように、すなわち、問題を解決するために書いたサンプルコードは、すべての可能であればあなたのために、ブラウザの抽象化を処理するために、MooToolsはやjQueryのようなライブラリを使用しています。 –

+1

ブラウザクロスブラウザのバージョンではなく、scrollX、scrollY、document.body.scrollLeft、document.body.scrollTop? – lifetimes

+1

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

答えて

83

window.scrollYのクロスブラウザ対応バージョンは、document.documentElement.scrollTopです。 IE8以前の詳細な回避策については、Mozilla documentationの「Notes」セクションを参照してください。

As mentioned herepageYOffsetは、window.scrollYの別の代替手段です(ただし、これはIE9 +互換です)。上記のリンクに関しては

は、(それも@adeneo述べたように、ズームを占めて!)スクロール位置を取得するには、完全に互換性のある方法のため例4をチェックdocument.documentElement.scrollTopdocument.documentElement.scrollLeftを使用します。

Here, try out the example for yourself!

+5

'document.documentElement.scrollTop'はGoogle Chromeで0を返します40 – McX

+2

@McXこれは、進行中のChromeのバグがまだ解決されていないためです(ただし、これまでの回答から判断すると、修正中です) - https://code.google.com/p/chromium/issues/detail?id=157855 – lifetimes

+0

2016年1月、まだ修正されていません。 – Hacktisch

2

あなただけの基本機能のこの種を扱うためのライブラリを使用しないための正当な理由がある場合は、「ホイールを再発明していない」ことを躊躇しないでください。

Mootools is open source、そしてあなただけの、その実装、関連するスニペット「盗む」ことができます。

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

は、これらの2がどの互換モード、それが持っている現在のブラウザを決定するの中核であり、その後、使用するかどうかをwindow.pageYOffsetdocument.body.scrollTopそれに基づいて、あるいは実際に古風なバギーブラウザの場合はdocument.html.scrollTopです。

4

jQueryを使用している場合、私は$(window).scrollTop()を使用してIE 8のY位置を取得しました。動作するようです。

1

だけY座標が必要な場合ニールス回答に基づいて、私は少しよりコンパクトな解決策を考え出す:

function get_scroll_y() { 
    return window.pageYOffset || document.body.scrollTop || document.html.scrollTop; 
} 
10

あなたはそれをたくさん使用する必要がない場合は、単にん:

角度で
var scroll = 
    window.scrollY //Modern Way (Chrome, Firefox) 
|| window.pageYOffset (Modern IE, including IE11 
|| document.documentElement.scrollTop (Old IE, 6,7,8) 
+4

これは動作しますが、私はあなたが2番目のもの(window.pageYOffset)を必要としないと思います。それが動作している間、すべての古いIEブラウザは 'document.documentElement.scrollTop'スクロール位置を取得する方法をサポートしています。最新のIEブラウザ(「Edge」)は、MDNで述べたように 'window.scrollY'をサポートしています:https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY?redirectlocale=en-US&redirectslug = DOM%2Fwindow.scrollY – ps2goat

0

、我々が使用する:

のMozilla、および上記の回答に基づいて
var windowEl = angular.element($window); 
    scrolldist = windowEl.scrollTop(); 
+0

これは[jQueryのscrollTop](https://docs.angularjs.org/api/ng/function/angular.element)です。 –

1

を、私が作成した関数のベルを持っていますOWは、より簡単にCOORDSを取得するには:

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 
    } 
})(); 

Mozilla documentationによると、上記の寿命が引用として、pageXOffsetプロパティはそれほどstictlyない必要が話している、scrollXプロパティの別名です。

Anyhoo、使用量は次のとおりです。

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 

クロム、Firefoxの、オペラ、エッジ(8-EDGE)、IE(7-11)、IE8 XP

0

window.scrollYに&作品をテスト済み& window.scrollXは(Chrome、FireFox & Safariのような)現代のブラウザでうまく動作しますが、IEでは動作しませんので、window.pageXOffsetやwindow.pageYOffsetを修正してください。ここで

私はプログラムによるスクロールがIE

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 
}