0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Vue.js】vue-js-modalでモーダルウィンドウを実装

Last updated at Posted at 2021-04-23

vue-js-modalとは

vue-js-modalは、シンプルにモーダルを実装できるコンポーネントライブラリです。
モーダルをドラッグしたり、モーダルのサイズを可変する機能が備わっています。
ダイアログの機能も搭載されております。

vue-js-modalの導入方法

以下のnpm、CDNを使ってインストールします。

  • npm
npm install vue-js-modal --save
  • CDN
<script src="https://cdn.jsdelivr.net/npm/vue-js-modal@1.3.31/dist/index.min.js"></script> 
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vue-js-modal@1.3.31/dist/styles.css">

導入手順

1.ライブラリの取り込み

import VModal from "vue-js-modal";
Vue.use(VModal);

2.メソッドを設定

export default {
  methods: {
    show() {
      this.$modal.show("post"); //()内は任意名
    },
    hide() {
      this.$modal.hide("post"); //()内は任意名
    },
  },
}

3. テンプレートを準備

 <modal class="modal-inner" v-scroll-lock="open" name="post" :width="750" :height="485">
      <div class="modal-header flex">
        <h2 class="post-tll flex">Cinemaを投稿する</h2>
        <hr class="separate" />
      </div>
      <div class="modal-body">
        <div class="post-items flex">
          <div class="post-contens flex">
            <input type="text" class="post-item" placeholder="タイトル" v-model="title"/>
          </div>
          <div class="post-contens flex">
            <textarea name="text" rows="1" v-model="description" placeholder="内容"></textarea>
          </div>
          <div class="post-contens flex">
            <select v-model="genre" class="post-select" :style="{ color: genre == '' ? 'gray' : 'white' }">
              <option class="post-item" value hidden>ジャンルを選択</option>
              <option
                v-for="genre in genres"
                :value="genre.name"
                :key="genre.id"
                class="post-item"
                style="color: white;"
                >{{ genre.name }}</option>
            </select>
          </div>
          <button class="post-btn" @click.prevent="postItem">投稿</button>
          <button class="hide-btn flex" @click="hide">×</button>
        </div>
      </div>
    </modal>

プロパティ

必須 Type Default 説明
name true [String, Number] モーダルの名前
delay false Number 0 オーバーレイ表示と実際のモーダルボックス表示の間の遅延
resizable false Boolean false trueの場合、モーダルウィンドウを画面の中央に保ちながらサイズ変更できます。
adaptive false Boolean false trueの場合、モーダルボックスはウィンドウサイズに適応しようとします
draggable false [Boolean, String] false trueの場合、モーダルボックスはドラッグ可能になります。
scrollable false Boolean false heightプロパティがautoでモーダルの高さがウィンドウの高さを超える場合 - モーダルをスクロールできるようになります
reset false Boolean false モーダルを表示する前に位置とサイズをリセットします
clickToClose false Boolean true falseに設定すると、背景をクリックしてモーダルを閉じることはできません。
transition false String 遷移名
overlayTransition false String 'overlay-fade' 背景オーバーレイのトランジション名
classes false [String, Array] 'v--modal' 指定しない場合、実際のモーダルボックスに適用されるクラス。デフォルトのv--modalクラスが適用されます。
width false [String, Number] 600 ピクセルまたはパーセンテージでの幅(e.g. 50 or "50px", "50%")
height false [String, Number] 300 ピクセルまたはパーセンテージで表した高さ(e.g. 50 or "50px", "50%") or "auto"
minWidth false Number (px) 0 モーダルのサイズ変更可能な最小幅
minHeight false Number (px) 0 モーダルをサイズ変更できる最小の高さ
maxWidth false Number (px) Infinity モーダルの最大幅(値がウィンドウ幅より大きい場合は、ウィンドウ幅が代わりに使用されます)
maxHeight false Number (px) Infinity モーダルの最大の高さ(値がウィンドウの高さより大きい場合は、ウィンドウの高さが代わりに使用されます)
pivotX false Number (0 - 1.0) 0.5 水平方向の位置(%)。デフォルトは0.5です(モーダルボックスはウィンドウの中央(左から50%)になります)。
pivotY false Number (0 - 1.0) 0.5 垂直位置(%)、デフォルトは0.5です(モーダルボックスはウィンドウの中央(上から50%)になります)。
root false Vue instance null モーダルコンテナを取得するrootインスタンス。 このプロパティは、複数のrootインスタンスで動的モーダルを使用する場合にのみ必要です。これは珍しいことです。

まとめ

上記と設定してあげるだけで簡単にモーダルウィンドウを実装することが出来たかと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?