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 つの方法)

推薦する

JS で配列をループする 4 つの方法のまとめ

この記事では、配列を走査する 4 つの方法を比較してまとめます。 for ループ: for (let...

Vue プロジェクトで SVG コンポーネントをパッケージ化して構成する手順

最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られていると...

Dockerコンテナを作成、起動、停止する方法

1. コンテナとは、独立して実行されるアプリケーション、またはアプリケーションのグループとその動作環...

CentOS 7 に Percona Server+MySQL をインストールする

1. 環境の説明(1) CentOS-7-x86_64、カーネルバージョン uname -r は、 ...

Linux 上で Docker コンテナを作成、一覧表示、削除する方法の概要

1. Dockerコンテナを起動する以下のコマンドを使用して新しい Docker コンテナを起動しま...

MySQL 正規表現 (regexp と rlike) の検索機能の例分析

この記事では、例を使用して MySQL 正規表現 (regexp および rlike) の検索機能を...

CentOS7 に Redis をインストールして設定する方法

導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...

html オプション 無効 選択 選択 無効 オプションの例

コードをコピーコードは次のとおりです。 <選択> <オプション値="&q...

MySQL 8.0 アトミック DDL 構文の詳細な説明

目次01 アトミックDDLの紹介02 一部のDDL操作の実行動作の変更03 DDL 操作のログを表示...

ApacheとTomcatによるクラスタ環境構築プロセスの分析

実際、Apacheクラスタを構築するのは難しくありません。私もインターネットで情報を見つけて自分で設...

Docker Composeのデプロイと基本的な使い方の詳しい説明

1. Docker Composeの概要Compose は、マルチコンテナ Docker アプリケー...

mysqlのkey_lenの計算方法についての簡単な説明

MySQL の explain コマンドは SQL のパフォーマンスを分析できます。その 1 つが ...

node.jsのインストールとHbuilderXの設定の詳細な説明

npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...

ウェブデザインの経験とスキルの概要

■ ウェブサイトのテーマ計画 ウェブサイトのテーマが断片化しすぎないように注意してください。一般的に...

MySQL に大量のデータを挿入するときに重複データを除外する方法

目次1. 問題を発見する2.重複したデータを残さずにすべて削除する3. 削除テーブルから重複データを...