Vue はスクロール可能なポップアップウィンドウ効果を実装します

Vue はスクロール可能なポップアップウィンドウ効果を実装します

この記事では、スクロール可能なポップアップウィンドウ効果を実現するためのVueの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

これは最初の実装です

効果画像:

ポップアップウィンドウコード:

ポップアップ

<テンプレート lang="html">
    <div v-if="表示" class="modal-bg" @click="閉じるモーダル">
      <div class="modal_con">
        <div class="modal_content">
          <div class="modal-container">
            <div class="modal_main">
              <p class="modal-header">{{dataList.title}}</p>
              <div class="rules_text">
                <p
                  v-for="(item, index) in dataList.rules"
                  クラス="rules_txt"
                  :key="インデックス"
                >
                  {{ アイテム }}
                </p>
              </div>
          </div>
        </div>
          <div class="footer_rules">
            <div class="tips"></div>
              <div class="rules_button">
                <div class="button" @click="closeModal">
                  <p class="button_text">了解しました</p>
                </div>
              </div>
            </div>
        </div>
      </div>

    </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  名前: 'ポップアップ'、
  小道具: {
    見せる: {
      タイプ: ブール値、
      デフォルト: false
    },
  },
  データ () {
    戻る {
      データリスト: {
        ルール:
          「1. これは最初のデータです、ああ...」
          「2. これは2番目のデータです、ああ...」
          「3. これは3番目のデータです、あぁ…」
          「4. これは 4 番目のデータです...」
        ]、
        褒美: [
          「1. 活動規則 第1条 データ データ データ データ」、
          「2. 活動規則 第2条 データデータデータ」
          「2. 活動規則 第3条 データデータデータ」
        ]

      }
    }
  },
  メソッド: {
    モーダルを閉じる() {
      this.$emit('closeModal')
    },
  }
}
</スクリプト>

<style lang="css" スコープ>
.modal_con {
  幅: 80%;
  高さ: 287px;
  背景: #ffffff;
  オーバーフロー: 非表示;
  マージン: 0 自動;

  位置: 固定;
  上位: 50%;
  左: 50%;
  変換: translate(-50%, -50%);
  境界線の半径: 8px;
}
.modal_content {
  高さ: 100%;
  背景色: #fff;
}
.modal-bg {
  幅: 100%;
  高さ: 100%;
  背景色: rgba(0, 0, 0, 0.6);
  位置: 固定;
  上: 0;
  左: 0;
  zインデックス: 999;
}
.modal-container {
  高さ: 78%;
  テキスト配置: 中央;
  ディスプレイ: フレックス;
  flex-direction: 列;
  overflow-y: スクロール;
  /* ios には次の属性が必要です*/
  -webkit-オーバーフロースクロール: タッチ;
}

.rules_txt {
  フォントサイズ: 15px;
  フォントファミリ: PingFangSC、PingFangSC-Regular;
  フォントの太さ: 400;
  テキスト配置: 両端揃え;
  色: #666666;
  パディング: 0 20px;
  上マージン: 8px;
  下マージン: 0;
}

.rules_txt:最後の子{
  パディング下部: 40px;
}
.modal-header {
  フォントサイズ: 17px;
  フォントファミリー: PingFang、PingFang-SC;
  フォントの太さ: 太字;
  テキスト配置: 中央;
  色: #333333;
  マージン: 0;
  パディング上部: 20px;
}
.報酬タイトル{
  フォントサイズ: 17px;
  フォントファミリー: PingFang、PingFang-SC;
  フォントの太さ: 太字;
  テキスト配置: 中央;
  色: #333333;
  パディング: 0;
  上マージン: 14px;
  下マージン: 6px;
}
.footer_rules {
  幅: 100%;
  高さ: 22%;
  位置: 絶対;
  下部: 0;
}
.ヒント {
  /* 幅: 100%;
  不透明度: 0.6;
  高さ: 49px;
  背景: linear-gradient(180deg, rgba(255, 255, 255, 0.5), #ffffff);
  テキスト配置: 中央;
  行の高さ: 49px;
  フォントサイズ: 18px; */
}
.rules_button {
  幅: 100%;
  背景: #ffffff;
  パディング下部: 20px;
  右下の境界線の半径: 8px;
  左下の境界線の半径: 8px;
}
。ボタン {
  幅: 90%;
  ディスプレイ: フレックス;
  コンテンツの中央揃え: 中央;
  コンテンツの位置を中央揃えにします。
  背景: 線形グラデーション(270度, #1283ff, #50a3ff);
  境界線の半径: 4px;
  テキスト配置: 中央;
  マージン: 0 自動;
}
.ボタンテキスト{
  フォントサイズ: 15px;
  フォントファミリー: PingFang、PingFang-SC;
  フォントの太さ: SC;
  色: #ffffff;
  ディスプレイ: フレックス;
  コンテンツの中央揃え: 中央;
  コンテンツの位置を中央揃えにします。
  マージン: 0;
  パディング: 12px 0;
}
.rules_con {
  パディング下部: 80px;
}
</スタイル>

Home.vue ページでポップアップ ウィンドウを使用します。

<!-- イベントルールのポップアップウィンドウ-->
 <テンプレート>
<div>
 <div @click="クリックポップアップ">
            <span>クリックするとポップアップウィンドウが開きます</span>
          </div>
 <ポップアップ
      v-show="isRulesShow"
      @closeModal="isRulesShow = false"
      :show="isRulesShow"
    >
    </ポップアップ>
</div>
</テンプレート>
<スクリプト>
'./Popup' から Popup をインポートします
エクスポートデフォルト{
名前:"ホーム",
コンポーネント:
 ポップアップ
},
データ () {
    戻る {
      isRulesShow: フラグ
      }
    },
    時計:
    isRulesShow (v) {
      もし(動詞){
        //main.js でメインページのスライドメソッドを無効にする
        this.noScroll()
      } それ以外 {
        //メインページはスライドできます this.canScroll()
      }
    },
  },
   方法:{
 //アクティビティルールポップアップウィンドウ clickPopup () {
      this.isRulesShow = true
    },
 }
}
</スクリプト>
   <style lang="scss" スコープ>
* {
  タッチアクション:パン-y;
}
</スタイル>

ポップアップウィンドウ内の本文が一緒にスクロールしてしまう問題を解決

main.js内

//ポップアップボックスはスライド禁止です Vue.prototype.noScroll = function () {
  var mo = 関数 (e) { e.preventDefault() }
  document.body.style.overflow = '隠し'
  document.addEventListener('touchmove', mo, false,{passive: false })// ページのスライドを無効にする}
 
//ポップアップボックスはスライドできます Vue.prototype.canScroll = function () {
  var mo = 関数 (e) {
    e.preventDefault()
  }
  document.body.style.overflow = ''// スクロールバーが表示されます document.removeEventListener('touchmove', mo, false,{passive: false })
}

ページを使用する場合:

//メインページのスライドを無効にする this.noScroll()
//メインページはスライドできます this.canScroll()

//スタイルも追加します:
* {
  タッチアクション:パン-y;
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueコンポーネントを使用してシンプルなポップアップ効果を実装する
  • vue.js ポップアップコンポーネントに関する知識ポイントのまとめ
  • 素晴らしい Vue ポップアップ コンポーネント
  • Vueポップアップメッセージコンポーネントの使い方
  • VUEは、自由にドラッグできるポップアップコンポーネントを実装しています。
  • Vueは、「詳細を表示」ボタンをクリックして詳細リストをポップアップウィンドウに表示する操作を実装します。
  • Vue のトーストポップアップコンポーネントの詳細な例
  • Vue でポップアップ コンポーネントを閉じるときに操作を破棄して非表示にする
  • Vueがポップアップしたら、携帯電話のリターンキーを押してポップアップ機能を閉じます(ページはジャンプしません)
  • VUEを使用して、テーブル内の文字数が5文字を超える場合はテキスト情報を非表示にし、マウスを動かすとすべての文字を表示します。

<<:  MySQL explain クエリ命令情報の取得原理と例

>>:  xshell を使用して VMware で Linux に接続する方法 (2 つの方法)

推薦する

mysql8.0.23 msi インストールの超詳細なチュートリアル

1.MySqlをダウンロードしてインストールする公式ウェブサイトからMySqlデータベースをダウンロ...

MySQLはカスタム関数を使用して親IDまたは子IDを再帰的に照会します

背景: MySQL では、レベルに制限がある場合、たとえば、ツリーの最大深度を事前に決定できる場合、...

vue3 コンポーネント通信方法の概要と例

vue3コンポーネントの通信モードは次のとおりです。小道具$放出$expose / 参照$属性vモデ...

MySQLインデックスの使用に関するヒントと注意事項

1. インデックスの役割一般的なアプリケーション システムでは、読み取りと書き込みの比率は約 10:...

Linux に nginx をインストールする方法

Nginx は C 言語で開発されており、Linux で実行することをお勧めします。もちろん、Win...

jsを使用してシンプルなカルーセル効果を実現する

この記事では、シンプルなカルーセル効果を実現するためのjsの具体的なコードを参考までに紹介します。具...

DockerでRedisを使用するための詳細な手順

1. はじめにこの記事では、Docker を使用して Redis を探索する方法を説明します。 Do...

win10にUbuntu18デュアルシステムをインストールするとmmx64.efiが見つからないという問題が発生する

Ubuntu 18のインストール中に、USBディスクからUbuntuのインストールを開始すると、mm...

Apple 電卓の JS 実装

この記事の例では、Appleの電卓を実装するためのJSの具体的なコードを参考までに共有しています。具...

MySQL パフォーマンスの最適化: インデックスを効率的かつ正しく使用する方法

実践こそが真実をテストする唯一の方法です。この記事では、インデックスの全体的な使用法についてのみ説明...

複数の Tomcat を展開して起動し、プロジェクトを移行する方法を 1 つの記事で学習します。

目次tomcatをデプロイする1.ダウンロードして解凍する2. 設定ファイルを変更する移植プロジェク...

Docker での FastAPI デプロイの詳細なプロセス

Docker 学習https://www.cnblogs.com/poloyy/p/15257059...

MySQL トランザクションの概念と使用法の詳細な説明

目次情事の概念取引の状態取引の役割取引の特徴トランザクション構文トランザクション対応ストレージエンジ...

MySQL 5.7 でデータベースのデータ保存場所を変更する方法

MySQL データベースに保存されるデータが徐々に増加すると、元のストレージ領域がいっぱいになり、M...

Baidu百科事典UIの開発動向について議論する

<br />百度百科事典の正式版がついにオンラインになりました。2年間の「テスト版」の帽...