フロントエンド開発者がよく遭遇する問題は、ユーザーに情報を提示するためのポップアップ ウィンドウを作成することです。このポップアップ ウィンドウが表示されると、多くの場合、ページ コンテンツをブロックする灰色のマスク レイヤーが伴います。同時に、ページ全体がこのマスクで覆われ、クリックしたりスクロールしたりすることはできません。 解決策 1: オーバーフローを制御し、スクロールを禁止する (iOS とは互換性がありません) PC でこの効果を作成するのは非常に簡単です。画面いっぱいに表示するために HTML の高さを 100% に設定し、ページがスクロールできないように HTML のオーバーフローを非表示に設定するだけです。 html.style.overflow="非表示"; html.style.height="100%"; body.style.overflow="非表示"; body.style.height="100%"; その理由は、モバイル端末がタッチイベントに基づいているためです。タッチイベントに基づいてスクロールを禁止するには、HTML でスクロールを禁止することを前提として、スクロールを禁止する必要があるコンテンツにラップするブロックレベル要素を追加し、このラップするブロックレベル要素の高さを 100% に設定し、overflow:hidden; を設定する必要があります。次に、ここで、必要なブロックレベル要素であるページ全体をラップする body を考えます。スクロールを禁止するように設定することで、モバイルページのスライド時間がページスクロールをトリガーしないようにすることができます。 html.style.overflow="表示可能"; html.style.height="auto"; body.style.overflow="表示可能"; body.style.height="auto"; これらのスタイルは、対応する CSS プロパティのデフォルトのスタイルとまったく同じです。 解決策 2: 絶対/固定レイアウトにより、ジェスチャ スクロール イベントのバブルが防止されます (PC では効果がありません) モバイル端末のスクロールが画面のタッチイベントに基づいているからこそ、2番目のソリューションが生まれました(Taobao Mobileはこのソリューションを採用しています)。 ソリューション 2 の完全なテスト ソース コードを以下に掲載します。 <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="UTF-8"> <タイトル></タイトル> <スタイル> .メインコンテンツ{ 位置:相対; 幅:100%; 背景色:#ccc; 高さ:2000ピクセル; } .メインコンテンツ .トリガー{ 幅:200px; 高さ:100px; フォントサイズ:30px; 色:#000; } .メインコンテンツ.bottom{ 位置:絶対; 下:0; 左:0; 幅:100%; 高さ:200px; 背景色:赤; } .ブラックシールド{ 位置:固定; トップ:0; 左:0; 幅:100%; 高さ:100%; 背景色:rgba(10,10,10,0.4); zインデックス:10; } .black-shield .info{ フォントサイズ:40px; 色:#000; 境界線:1px実線; zインデックス:20; } </スタイル> </head> <本文> <div class="main-content"> <button id="trigger" class="trigger">オン/オフ</button> <div class="bottom"></div> </div> <div id="シールド" class="black-shield" style="display:none;"> <div id="info" class="info">現在の黒い画面がポップアップ表示された後は、ページをスライドすることはできません。現在のテキストをクリックして、黒い画面を閉じます</div> </div> <スクリプト> 関数test2(){ var showShield=false; var シールド = document.getElementById("シールド"); var トリガー = document.getElementById("トリガー"); var info = document.getElementById("info"); var 本文 = document.querySelector("本文"); var html = document.querySelector("html"); //クリックすると黒い画面が表示されますtrigger.addEventListener("click",function(){ shield.style.display="ブロック"; }、間違い); //クリックすると黒いカーテンが閉じます info.addEventListener("touchstart",function(){ シールドスタイルの表示="なし"; }、間違い); //ブラックスクリーンレイヤーのタッチイベントをブロックします shield.addEventListener("touchstart",function(e){ e.stopPropagation(); e.preventDefault(); }、間違い); } テスト2(); </スクリプト> </本文> </html> これで、フロントエンドページのポップアップマスクによるページスクロール防止に関する記事は終了です。ポップアップマスクによるページスクロール防止に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
>>: 数ステップでサイバーパンク2077風の視覚効果を実現するCSS
1. ユーザーを追加します。まず、adduser コマンドを使用して共通ユーザーを追加します。コマン...
目次ナンセンス実装された機能文章要点ナンセンスデモプレビュー実装された機能デフォルトでホームページが...
感想:私はバックエンド開発者です。静的 (HTML) ページを取得すると、ページ構造と命名規則が極端...
この記事では、WeChatアプレットの左右連動を実現するための具体的なコードを参考までに紹介します。...
MySQL ストアド プロシージャ、カーソル、トランザクションの例の詳細な説明以下は私が作成した M...
テキストファイルの内容を並べ替える使用方法: ソート + オプション + ファイル名 (複数のファイ...
仮想化とコンテナ化は、クラウドベースのプロジェクトでは避けられない 2 つの問題です。仮想化は純粋な...
注: 親コンテナーに高さと :data='Array' および overfolw:h...
この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...
みなさんこんにちは。私は技術の話ばかりして髪を切らない先生のトニーです。今回はMySQL 8.0で追...
MySQL タイム ブラインド インジェクションの 5 つの遅延方法 (PWNHUB の予期しない解...
最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...
目次現状解決さらなる解決策やっと現状WeChat ミニプログラムには、ホームページ、個人ページ、いく...
MySQL 5.5 のインストールと構成のチュートリアル ノートを整理し、全員と共有します。 1.公...
MySQL-8.0.22-winx64のデータベースインストールチュートリアルは参考になります。具体...