2012-01-27 10 views
9

ChromeとSafariでは、$("body").scrollTop(1000)が期待どおりに動作します。jQuery scrollトップがブラウザ間で矛盾します

IEとFFでは、何も起こりません。

IEとFFでは、$(window).scrollTop(1000)が動作しますが、別の場所に移動します。 ChromeとSafariでも動作しますが、どちらも別の場所に移動します。彼らは最大300から500ピクセルのようです。

ブラウザ間で動作するscrollTopプロパティを一貫して設定する方法はありますか?そうでない場合、なぜjQueryがこれを抽象化しないのですか?

私はChromeとSafariでは正常に動作しますが、他のブラウザではうまく動作しません。

私の唯一のブラウザ検出オプションはありますか? (悪い習慣)またはいくつかのより良い方法がありますか?

+0

$(document).scrollTop( "...")を使ってみましたか? – epignosisx

+0

それは実際に働いた。私は$( '文書')を試しましたが、それはしませんでした。あなたが質問として答えるなら、私はあなたに信用を与えるでしょう。 –

答えて

11

$(jQuery.browser.webkit ? "body": "html").animate({ scrollTop: myTop }, myDur);

のWebkitブラウザ(クローム/サファリ、両方のMacとのWin)を使用し、 "ボディ"、他を試してみてください(FF /オペラ/ IE 7-9)は、 "HTML"

を使用します

ブラウザの検出が大好きです。

+5

jQuery.browserはバージョン1.3以降で廃止され、1.9から削除されました。 –

0

ブラウザによってはscrollTopbodyまたはhtmlに適用する必要がありますが、両方に適用することは害です。 .scrollTop()のでセットで最初要素に適用されますが、.animate()は、すべての要素に適用され、あなたはこれを行うことができます。

$('body, html').animate({ 
    scrollTop: 1000 
}, 'fast'); 

あなたは変更はすぐに適用したい場合は、0にスピード('fast')を変更。代わりに、以下を使用することもできますが、私は上記の構文が好きです:

$('body, html').each(function() { $(this).scrollTop(1000); }); 
関連する問題