2012-03-15 6 views
14

これには、デバイスとライブラリに依存しない単純なJavaScriptソリューションがありますか?モバイルブラウザがオーバーフローをサポートしているかどうかを検出:スクロール

可能であれば、スクロール可能なコンテナをモバイルに配信できるように、html要素にクラスを追加したいと思います。

これは、Modernizrと同様のアプローチで、ブラウザの検出ではなく機能のサポートを検出します。私はModernizrフレームワーク全体を使いたくないだけです。モバイルプロジェクトのJavaScriptライトを維持しようとしています。

ありがとうございます!

+0

(より大きい1200pxワイド画面で無タッチイベントのサポート )CSSプロパティ、 と幅広いデスクトップブラウザ推論テストをスクロールしてくださいあなたの質問に少し努力してください。 – Triode

+0

可能重複:http://stackoverflow.com/questions/3343311/can-javascript-detect-when-scrollbars-are-unavailable-ie-on-mobile-browsersまた、参照してください:http://lostmonocle.com/post/870842095/geeky-stuff-using-jquery-to-check-if-scrollbars-are – Prescott

+0

私はこのような何かを考えていたが、それを見つけるのが難しい:http:///stackoverflow.com/questions/3911866/how-to-detect-lack-of-positionfixed-in-a-generic-way – ackernaut

答えて

5

これは完璧ではありませんが、私はこれを使って-webkit-overflow-scrollを検出しています。

var overflowScrolling = typeof($("body")[0].style["-webkit-overflow-scrolling"]) !== "undefined"; 

overflow-scrollingでない場合は、iScrollを読み込みます。

-webkit-overflow-scrollingをサポートしているデバイスはまだiScrollを読み込みますが、これは少なくともiOS 5と最新のアンドロイドにネイティブスクロールすることを意味します。ここで

+3

ハイフンをアンダースコアに置き換えたいのでしょうか? – donquixote

+0

ブラウザで 'overflow:scroll'が動作するかどうかではなく、' -webkit-overflow-scrolling'のサポートをチェックします。 – speedarius

+0

@speedariusこれは最初の文章の状態です。 – respectTheCode

2

は非ベンダー接頭辞プロパティを含むすべての可能なオプションをチェックし、jQueryのか、Modernizrなどのライブラリの依存関係を持っていないソリューションです:

function hasOverflowScrolling() { 
    var prefixes = ['webkit', 'moz', 'o', 'ms']; 
    var div = document.createElement('div'); 
    var body = document.getElementsByTagName('body')[0]; 
    var hasIt = false; 

    body.appendChild(div); 

    for (var i = 0; i < prefixes.length; i++) { 
     var prefix = prefixes[i]; 
     div.style[prefix + 'OverflowScrolling'] = 'touch'; 
    } 

    // And the non-prefixed property 
    div.style.overflowScrolling = 'touch'; 

    // Now check the properties 
    var computedStyle = window.getComputedStyle(div); 

    // First non-prefixed 
    hasIt = !!computedStyle.overflowScrolling; 

    // Now prefixed... 
    for (var i = 0; i < prefixes.length; i++) { 
     var prefix = prefixes[i]; 
     if (!!computedStyle[prefix + 'OverflowScrolling']) { 
      hasIt = true; 
      break; 
     } 
    } 

    // Cleanup old div elements 
    div.parentNode.removeChild(div); 

    return hasIt; 
} 

alert(hasOverflowScrolling()); 
+0

これは、モバイルデバイスの「モーメンタム」スクロールを制御する ' - * - overflow-scrolling'のブラウザサポートをチェックします。オーバーフロー:スクロールがブラウザで機能するかどうかをチェックしません。たとえば、Android <3.0の場合、 'overflow:scroll'は単に機能しません。私はこれが質問の内容だと信じています。 – speedarius

+0

これは私にいつもどこでも偽を与える – Gino

2

これは非常に良い質問です。残念ながら現在、overflow: scrollのサポートを確実に確認する方法はありません。

フィラメント群は、(http://filamentgroup.github.io/Overthrow/を参照してください)あなたのプロジェクトで使用したい場合があり、このためのポリフィルを持っていますが、自分自身によると:

トラブルが、それは難しいです - オーバーフローをテストするために - おそらく不可能 サポート[...]必要に迫られて

、転覆は、ネイティブのオーバーフローをサポートしていることが知られているモバイル プラットフォームの現在および将来のバージョンをホワイトリストにユーザーエージェント 文字列を調べて、ではなく 以上を通じてチェックする前に信頼性が高く、不可知論手段:すなわち、 iOS5をの(!今クロームAndroidのあまり)に触れ

関連する問題