ホームページ ウェブフロントエンド jsチュートリアル Vueでポップアップウィンドウ機能を作る(コード付き)

Vueでポップアップウィンドウ機能を作る(コード付き)

Jun 06, 2018 pm 02:53 PM
vue ポップアップコンポーネント

今回はVueのポップアップ関数(コード付き)をお届けします。 以下は実際に使っている事例です。最近、Dialog ダイアログ コンポーネントを使用して、Element-UI フレームワークを使用しました。大まかに達成された効果は、以前のモバイル プロジェクトで作成したポップアップ コンポーネントと非常によく似ていました。このポップアップ コンポーネントの実装をみんなと共有したいと思いました。 、次の記事では、ポップアップ ウィンドウ コンポーネントの実装について説明します

この記事の主な内容には、ポップアップ ウィンドウ マスクの実装、スロット スロットの使用、props と $ のパラメーターの受け渡しが含まれます。気に入った場合は、この記事を読んで何かを得ることができれば幸いです

まず、コンポーネントの HTML スタイル、CSS スタイル、マスク レイヤー、コンテンツ レイヤーを構築します。

ポップアップ ウィンドウのコンテンツをカスタマイズします。ポップアップ ウィンドウ コンポーネントは、親コンポーネントからポップアップ ウィンドウのコンテンツを受け取ります。

ポップアップ ウィンドウのコンテンツをカスタマイズします。 スタイル: ポップアップ ウィンドウ コンポーネントは、コンポーネント スイッチを通じて親コンポーネントから渡されるポップアップ ウィンドウの幅、上下左右の位置を受け取ります。親コンポーネントから渡された props はコンポーネントの表示と非表示を制御し、子コンポーネントが閉じられるときにイベントが使用され、

  1. 1 の値を変更します。コンポーネントの CSS スタイル:

    HTML 構造: マスク レイヤー、コンテンツ レイヤー、コンテンツ レイヤーのヘッダー タイトルと本文、および閉じるボタン
  2. コンポーネント内の HTML 構造は次のとおりです。後で追加されるものもありますので、理解できない場合は、最初はスキップしてください。

    <template>
     <p class="dialog">
      <!--外层的遮罩 点击事件用来关闭弹窗,isShow控制弹窗显示 隐藏的props-->
      <p class="dialog-cover back" v-if="isShow" @click="closeMyself"></p>
      <!-- transition 这里可以加一些简单的动画效果 -->
      <transition name="drop">
       <!--style 通过props 控制内容的样式 -->
      <p class="dialog-content" :style="{top:topDistance+&#39;%&#39;,width:widNum+&#39;%&#39;,left:leftSite+&#39;%&#39;}" v-if="isShow">
       <p class="dialog_head back">
        <!--弹窗头部 title-->
        <slot name="header">提示信息</slot>
       </p>
       <p class="dialog_main" :style="{paddingTop:pdt+&#39;px&#39;,paddingBottom:pdb+&#39;px&#39;}">
       <!--弹窗的内容-->
       <slot name="main">弹窗内容</slot>
       </p>
       <!--弹窗关闭按钮-->
       <p class="foot_close" @click="closeMyself">
        <p class="close_img back"></p>
       </p>
      </p>
     </transition>
     </p>
    </template>
    ログイン後にコピー
    以下は、コンポーネント内の主要な CSS スタイルであり、マスキング効果は主に z- によって実現されます。特定のコンテンツの CSS は、必要に応じて設定できます
  3. <style lang="scss" scoped>
     // 最外层 设置position定位 
     .dialog {
     position: relative;
     color: #2e2c2d;
     font-size: 16px;
     }
     // 遮罩 设置背景层,z-index值要足够大确保能覆盖,高度 宽度设置满 做到全屏遮罩
     .dialog-cover {
     background: rgba(0,0,0, 0.8);
     position: fixed;
     z-index: 200;
     top: 0;
     left: 0;
     width: 100%;
     height: 100%;
     }
     // 内容层 z-index要比遮罩大,否则会被遮盖,
     .dialog-content{
     position: fixed;
     top: 35%;
     // 移动端使用felx布局 
     display: flex;
     flex-direction: column;
     justify-content: center;
     align-items: center;
     z-index: 300;
     }
    </style>
    ログイン後にコピー
  4. 2. スロットを通じてポップアップ コンテンツをカスタマイズします

    このステップは、 の機能と使用法を理解するだけで済みます。スロット、問題ありません。

  5. シングルスロット:
  6. これはスロットが渡されなかった場合に表示されるポップアップコンテンツです

    上記はシングルスロットです。親コンポーネントでスロットを使用する正しい方法は次のとおりです:
  7. <my-component>
     <!--在my-component里面的所有内容片段都将插入到slot所在的DOM位置,并且会替换掉slot标签-->
     <!--这两个p标签,将替换整个slot标签里面的内容-->
     <p>这是一些初始内容</p>
     <p>这是更多的初始内容</p>
    </my-component>
    ログイン後にコピー
ps: 子コンポーネントにスロットが含まれている場合、上記の p タグの内容は破棄されます:

名前付きスロット:

いわゆる名前付きスロットは、スロット タグに名前属性を割り当てます。以下に示すように、名前付きスロットは、親コンポーネント内の異なるコンテンツ フラグメントを子コンポーネント内の異なる場所に配置できます。ポップアップコンポーネントスロットを使用するには:

<p class="dialog_head back ">
 <!--弹窗头部 title-->
 <slot name="header">提示信息</slot>
 </p>
 <p class="dialog_main " :style="{paddingTop:pdt+&#39;px&#39;,paddingBottom:pdb+&#39;px&#39;}">
 <!--弹窗的内容-->
 <slot name="main">弹窗内容</slot>
 </p>
ログイン後にコピー
親コンポーネントでの使用方法:

使用したいコンポーネントにポップアップコンポーネントを導入し、コンポーネントを通じてコン​​ポーネントとして登録します。

親コンポーネントのポップアップコンポーネントスロットを利用する方法は以下の通りです。

<dialogComponent>
 <p slot="header">插入到name为header的slot标签里面</p>
  <p class="dialog_publish_main" slot="main">
  这里是内容插入到子组件的slot的name为main里面,可以在父组件中添加class定义样式,事件类型等各种操作
  </p>
</dialogComponent>
ログイン後にコピー

コンポーネントで使用されるスロットの紹介は以上です。ポップアップ コンポーネントでのスロットの適用は、非常に強力であることがわかりますが、スロット自体の使用は難しくありません。学生たちはスロットに夢中になりましたか?

3. props を使用してポップアップ ウィンドウの可視性を制御し、ポップアップ ウィンドウのスタイルをカスタマイズします

psops は、Vue の親コンポーネントが子コンポーネントにデータを転送する方法です。詳しくない方は、こちらをご覧ください。小道具のドキュメント。

ポップアップ コンポーネントは他のコンポーネントに導入されて使用されるため、さまざまなコンポーネント シナリオでポップアップ ウィンドウに適合させるには、ポップアップ コンポーネントにある程度のカスタマイズ性が必要です。そうでないと、そのようなコンポーネントは意味がありません。ポップアップ コンポーネントを例として、props の使用方法を説明します。

まず、渡されたコンポーネントで検証などの props の特性をいくつか定義する必要があります。

次に、親コンポーネントで props データをバインドします。

<script>
export default {
 props: {
 isShow: { 
 //弹窗组件是否显示 默认不显示
  type: Boolean,
  default: false,
  required:true, //必须
 },
 //下面这些属性会绑定到p上面 详情参照上面的html结构
 // 如: :style="{top:topDistance+'%',width:widNum+'%'}"
 widNum:{ 
 //内容宽度
  type: Number,
  default:86.5
 },
 leftSite:{
  // 左定位
  type: Number,
  default:6.5
 },
 topDistance: {
  //top上边距
  type: Number,
  default:35
 },
 pdt:{
  //上padding
  type: Number,
  default:22
 },
 pdb:{
  //下padding
  type: Number,
  default:47
 }
 },
}
</script>
ログイン後にコピー

親コンポーネントでの使用方法:

<dialogComponent :is-show="status.isShowPublish" :top-distance="status.topNum">
</dialogComponent>
ログイン後にコピー

ps: props によって転送されるデータは双方向のバインディングではなく、親コンポーネントのデータが変更されると、一方向のデータ フローになります。これは驚くべきことに、Props は子コンポーネント内で変更されるべきではありません。したがって、ポップアップ ウィンドウを閉じるときに、$emit を使用して親コンポーネントのデータを変更する必要があります。そうすれば、データは自動的に子コンポーネントに渡されます。

现在基本上弹窗组件都已实现的差不多了,还差一个弹窗的关闭事件,这里就涉及到子组件往父组件传参了。

4. $emit 触发父组件事件修改数据,关闭弹窗

Vue中在子组件往父组件传参,很多都是通过 $emit 来触发父组件的事件来修改数据。

在子组件中,在点击关闭,或者遮罩层的时候触发下面这个方法:

methods: {
 closeMyself() {
  this.$emit("on-close"); 
  //如果需要传参的话,可以在"on-close"后面再加参数,然后在父组件的函数里接收就可以了。
 }
 }
ログイン後にコピー

父组件中的写法:

<dialogComponent :is-show="status.isShowPublish" :top-distance="status.topNum" @on-close="closeDialog"> 
 </dialogComponent>
 //"on-close是监听子组件的时间有没有触发,触发的时候执行closeDialog函数
methods:{
 closeDialog(){
 // this.status.isShowPublish=false;
 //把绑定的弹窗数组 设为false即可关闭弹窗
 },
}
ログイン後にコピー

可以用弹窗组件实现下列这种信息展示,或者事件交互:

 

弹窗组件代码

上面是把弹窗的每个步骤拆分开来,一步步解析的,每一步都说的比较清楚了,具体连起来的话,可以看看 代码 ,再结合文章就能理的很清楚了。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

使用beforeEnter钩子函数(附代码)

react应用开发脚手架使用案例

以上がVueでポップアップウィンドウ機能を作る(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vue.js文字列をオブジェクトに変換する方法は何ですか? vue.js文字列をオブジェクトに変換する方法は何ですか? Apr 07, 2025 pm 09:18 PM

json.parse()stringにオブジェクトを使用することは、最も安全で効率的です。文字列がJSON仕様に準拠していることを確認し、一般的なエラーを回避します。 Try ... CATCHを使用して例外を処理して、コードの堅牢性を向上させます。セキュリティリスクがあるeval()メソッドの使用は避けてください。巨大なJSONの弦の場合、パフォーマンスを最適化するために、チャンクされた解析または非同期解析を考慮することができます。

Vueはマーキー/テキストスクロール効果を実現します Vueはマーキー/テキストスクロール効果を実現します Apr 07, 2025 pm 10:51 PM

CSSアニメーションまたはサードパーティライブラリを使用して、VUEでマーキー/テキストスクロール効果を実装します。この記事では、CSSアニメーションの使用方法を紹介します。スクロールテキストを作成し、テキストを&lt; div&gt;をラップします。 CSSアニメーションを定義し、オーバーフローを設定します:非表示、幅、アニメーション。キーフレームを定義し、アニメーションの開始と終了時にtranslatex()を設定します。期間、スクロール速度、方向などのアニメーションプロパティを調整します。

エクスポートデフォルトとVUEでのインポートの使用方法 エクスポートデフォルトとVUEでのインポートの使用方法 Apr 07, 2025 pm 07:09 PM

エクスポートデフォルトは、VUEコンポーネントのエクスポートに使用され、他のモジュールがアクセスできるようにします。インポートは、単一または複数のコンポーネントをインポートできる他のモジュールからコンポーネントをインポートするために使用されます。

VueとElement-UIカスケードドロップダウンボックスプロップパス値 VueとElement-UIカスケードドロップダウンボックスプロップパス値 Apr 07, 2025 pm 07:36 PM

データ構造は、VUEおよびElement-UIがカスケードしたドロップダウンボックスがプロップを通過し、静的データの直接割り当てがサポートされている場合に明確に定義する必要があります。データが動的に取得される場合は、ライフサイクルフック内で値を割り当て、非同期状況を処理することをお勧めします。非標準のデータ構造の場合、デフォルトプロップまたは変換データ形式を変更する必要があります。意味のある変数名とコメントで、コードをシンプルで理解しやすいままにしてください。パフォーマンスを最適化するには、仮想スクロールまたは怠zyな読み込み手法を使用できます。

Vueコンポーネントの合格値はどういう意味ですか? Vueコンポーネントの合格値はどういう意味ですか? Apr 07, 2025 pm 11:51 PM

Vueコンポーネントの合格値は、コンポーネント間でデータと情報を渡すメカニズムです。プロパティ(小道具)またはイベントを介して実装できます:プロップ:コンポーネントで受信するデータを宣言し、親コンポーネントにデータを渡します。イベント:$ EMITメソッドを使用して、VONディレクティブを使用してイベントをトリガーし、親コンポーネントでイベントを聞きます。

怠zyなロードVUEとはどういう意味ですか? 怠zyなロードVUEとはどういう意味ですか? Apr 07, 2025 pm 11:54 PM

Vue.jsでは、Lazy Loadingを使用すると、コンポーネントまたはリソースを必要に応じて動的にロードすることができ、初期ページの読み込み時間を短縮し、パフォーマンスを改善できます。特定の実装方法には、&lt; Keep-Alive&gt;および&lt;コンポーネントは&gt;コンポーネント。怠zyなロードは、FOUC(スプラッシュ画面)の問題を引き起こす可能性があり、不必要なパフォーマンスのオーバーヘッドを避けるために怠zyなロードが必要なコンポーネントにのみ使用する必要があることに注意してください。

vue.jsのストリングをオブジェクトに変換するためにどのような方法が使用されますか? vue.jsのストリングをオブジェクトに変換するためにどのような方法が使用されますか? Apr 07, 2025 pm 09:39 PM

vue.jsのオブジェクトに文字列を変換する場合、標準のjson文字列にはjson.parse()が推奨されます。非標準のJSON文字列の場合、文字列は正規表現を使用して処理し、フォーマットまたはデコードされたURLエンコードに従ってメソッドを削減できます。文字列形式に従って適切な方法を選択し、バグを避けるためにセキュリティとエンコードの問題に注意してください。

リクエスト方法(取得、投稿など)は正しく使用されていますか? リクエスト方法(取得、投稿など)は正しく使用されていますか? Apr 07, 2025 pm 10:09 PM

vue.jsでのaxios要求方法の使用には、次の原則に従う必要があります。取得:リソースを取得し、データを変更しないでください。投稿:データの作成または送信、データの追加または変更。 PUT:既存のリソースを更新または交換します。削除:サーバーからリソースを削除します。

See all articles