這次帶給大家Vue做出彈跳窗功能(附程式碼),Vue做出彈跳窗功能(的注意事項有哪些,下面就是實戰案例,一起來看一下。
最近在使用element-ui框架,用到了Dialog對話框組件,大致實現的效果,跟我之前自己在移動端項目裡面弄的一個彈窗組件差不太多。然後就想著把這種彈窗組件的實現方式與大家分享一下,下面本文會帶著大家手摸手實現一個彈窗組件。
本文主要內容會涉及到彈窗遮罩的實現, slot 插槽的使用方式,props 、 $emit 傳參,具體組件代碼也傳上去了。如果喜歡的話可以點波贊/關注,支持一下,希望大家看完本文可以有所收穫。
組件最後實現的效果
實作步驟
先建置元件的html和css樣式,遮罩層和內容層。
自訂彈出式內容:彈跳視窗元件透過slot 插槽接受從父元件傳過來彈窗內容。
自訂彈出式樣式:彈跳視窗元件透過props 接收從父元件傳過來的彈窗寬度,上下左右的位置。
元件開關:透過父元件傳進來的props 控制元件的顯示與隱藏,子元件關閉時透過事件$emit 觸發父元件改變值。
1.建構元件的html和css樣式。
html結構:一層遮罩層,一層內容層,內容層裡面又有一個頭部title和主體內容和一個關閉按鈕。
下面是元件中的html結構,裡面有一些後面要加進去的東西,如果看不懂的話可以先跳過,
<template> <p> <!--外层的遮罩 点击事件用来关闭弹窗,isShow控制弹窗显示 隐藏的props--> </p> <p></p> <!-- transition 这里可以加一些简单的动画效果 --> <transition> <!--style 通过props 控制内容的样式 --> <p> </p> <p> <!--弹窗头部 title--> <slot>提示信息</slot> </p> <p> <!--弹窗的内容--> <slot>弹窗内容</slot> </p> <!--弹窗关闭按钮--> <p> </p> <p></p> </transition> </template>
下面是組件中的主要的css樣式,裡面都做了充分的註釋,主要透過z-index和background 達到遮罩的效果,具體內容的css可以根據自己的需求來設定。
<style> // 最外层 设置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>
2. 透過slot 客製化彈窗內容
這一步,只要理解了slot 的作用以及用法,就沒有問題了。
單一插槽:
上面是單一插槽也叫預設插槽,在父元件中使用插槽的正確姿勢:
<my-component> <!--在my-component里面的所有内容片段都将插入到slot所在的DOM位置,并且会替换掉slot标签--> <!--这两个p标签,将替换整个slot标签里面的内容--> <p>这是一些初始内容</p> <p>这是更多的初始内容</p> </my-component>
ps:如果子元件裡麵包含slot 插槽,那麼上面的p標籤的內容將會被丟棄。
具名插槽:
所謂的具名插槽,即為slot 標籤賦一個name 屬性,具名插槽可以父元件中不同的內容片段放到子元件的不同地方,具名插槽還是可以擁有預設插槽。下面可以看一下彈窗元件插槽的使用方式:
<p> <!--弹窗头部 title--> <slot>提示信息</slot> </p> <p> <!--弹窗的内容--> <slot>弹窗内容</slot> </p>
在父元件中的使用方式:
將彈窗元件引入要使用的元件中,並透過components 註冊成為組件。
父元件中彈跳視窗元件插槽的使用方法如下。
<dialogcomponent> <p>插入到name为header的slot标签里面</p> <p> 这里是内容插入到子组件的slot的name为main里面,可以在父组件中添加class定义样式,事件类型等各种操作 </p> </dialogcomponent>
關於組件中用到的插槽的介紹就到這裡了,插槽在彈窗組件中的應用是一個典型的栗子,可以看到插槽作用相當強大,而插槽本身的使用並不難,同學愛上插槽了沒有?
3.透過props 控制彈窗顯隱&&自訂彈窗style
psops 是Vue中父元件向子元件傳遞資料的一種方式,不熟悉的小夥伴們可以看一下props文檔。
因為彈窗組件都是引到別的組件裡面去用的,為了適合不同組件場景中的彈窗,所以彈窗組件必須具備一定的可自訂性,否則這樣的組件將毫無意義,下面介紹一下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> </dialogcomponent>
ps:props傳遞資料不是雙向綁定的,而是單向資料流,父元件的資料變化時,也會傳遞到子元件中,這就意外著我們不應該在子元件中修改props。所以我們在關閉彈跳窗的時候就 需要透過 $emit 來修改父元件的資料 ,然後資料會自動傳到子元件中。
现在基本上弹窗组件都已实现的差不多了,还差一个弹窗的关闭事件,这里就涉及到子组件往父组件传参了。
4. $emit 触发父组件事件修改数据,关闭弹窗
Vue中在子组件往父组件传参,很多都是通过 $emit 来触发父组件的事件来修改数据。
在子组件中,在点击关闭,或者遮罩层的时候触发下面这个方法:
methods: { closeMyself() { this.$emit("on-close"); //如果需要传参的话,可以在"on-close"后面再加参数,然后在父组件的函数里接收就可以了。 } }
父组件中的写法:
<dialogcomponent> </dialogcomponent> //"on-close是监听子组件的时间有没有触发,触发的时候执行closeDialog函数 methods:{ closeDialog(){ // this.status.isShowPublish=false; //把绑定的弹窗数组 设为false即可关闭弹窗 }, }
可以用弹窗组件实现下列这种信息展示,或者事件交互:
弹窗组件代码
上面是把弹窗的每个步骤拆分开来,一步步解析的,每一步都说的比较清楚了,具体连起来的话,可以看看 代码 ,再结合文章就能理的很清楚了。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是Vue做出彈跳窗功能(附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器