フロントエンド開発者がよく遭遇する問題は、ユーザーに情報を提示するためのポップアップ ウィンドウを作成することです。このポップアップ ウィンドウが表示されると、多くの場合、ページ コンテンツをブロックする灰色のマスク レイヤーが伴います。同時に、ページ全体がこのマスクで覆われ、クリックしたりスクロールしたりすることはできません。 解決策 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
xhtml+css のウェブサイト再構築、ウェブ標準などについては、記事が多すぎるので繰り返しません...
目次1. 脱構築とは何か? 2. 配列の分割3. 配列モードと代入モードの統一4. デフォルト値の構...
目次1. ブラウザのサポート2.エクスポートモジュールのエクスポート3. モジュールをインポートする...
ビジネスを想定: 2位の従業員の給与情報を見るデータベースを作成する emps が存在する場合はデー...
本日、MySQL 8.0 をアップデートしました。最初の問題: Navicatがデータベースに接続で...
1. useState: 関数コンポーネントに状態を持たせる使用例: // カウンター impor...
テーブルを美しくするために、テーブルにさまざまな境界線の色を設定できます。基本的な構文<テーブ...
MySQL には、10 進数などの標準データ型だけでなく、float や double などの非標...
目次sakilaをインストールするインデックススキャンソートテーブル構造インデックススキャンをソート...
テーブル作成コマンドには以下が必要です。 テーブルの名前フィールド名各フィールドを定義します(タイ...
目次1. はじめに1. コンポーネントデータ2. コンポーネントページのレイアウト1. ロゴエリアの...
1. まず、gitを関連付けるときにエラーメッセージが報告されます: エラー: ビルドするリビジョン...
MySQLでテーブルやデータを削除する場合、 [エラー] 1451 - 親行を削除または更新できませ...
この記事では、Vueログイン用画像認証コードの具体的なコードを例として紹介します。具体的な内容は以下...
この記事では、トップに戻るボタンを実装するためのJavaScriptの具体的なコードを参考までに紹介...