iPhone Web アプリ - 本文のスクロールを停止する 質問する

iPhone Web アプリ - 本文のスクロールを停止する 質問する

私は iPhone Web アプリケーションを作成していますが、iOS5 以降では、ヘッダーなどに position: fixed; を使用できるようになりました。

機能しているものの、ページの上部を上にスクロールすると、通常の灰色の領域がしばらく表示され、その後スクロールできなくなります。

例

このスクロールを停止する方法はありますか? overflow: hidden; などを試してみましたが、何も見つからないようです。

PS スクロールを停止したいのは 1 つだけです。#container という名前の div があり、これをスクロールできるようにしたいのです。

ベストアンサー1

いくつかのソリューションを検討した後、カスタム ソリューションを作成し始めました。

バウンスフィックス

http://jaridmargolin.github.io/bouncefix.js/

使用法:

バウンスフィックス.add(el)

修正を適用して、指定された要素が極端にスクロールしたときに、ボディ全体の弾性バウンスが発生しないようにします。

バウンスフィックス.削除(el)

全身の弾性バウンスを修正する責任を負うすべてのリスナー/オブザーバーを削除します。

なぜ?

スクロールフィックス良いスタートでしたが、いくつかの問題に気づきました。

  1. これは、スクロール可能なコンテンツがある場合にのみ機能しました。空のページがある場合は、本文にバウンス効果が発生します。
  2. API はリスナーを削除するメソッドを公開していませんでした。私のアプリには複数のページがあり、ユーザーがアプリ内を移動するときにすべてのリスナーをアタッチしたままにしておくのは適切ではないと感じました。

どうやって?

これは scrollfix と同様のアプローチを使用します。問題は、スクロールの極限の 1 つにいるときに発生します。touchstart では、上端か下端かを確認し、上にある場合は 1 ピクセルを追加し、下にある場合は 1 ピクセルを削除します。

残念ながら、このトリックは scrollTop 値を設定できる場合にのみ機能します。コンテンツがまだスクロール可能でない場合、たとえばリスト項目が 1 つしかない場合は、本文全体が再びスクロールします。Bouncefix.js は、イベント委譲を使用し、touchstart がトリガーされるたびに scrollHeight を offsetHeight と比較することで、このすべてをバックグラウンドで処理します。スクロール可能なコンテンツがない場合、コンテナー上のすべてのスクロールは e.preventDefault(); によってブロックされます。

おすすめ記事