摘要:取消確認(rèn)現(xiàn)在彈窗組件的結(jié)構(gòu)已經(jīng)搭建出來了。另外還有兩個方法,分別是點擊取消和確認(rèn)的回調(diào)函數(shù),它們的作用是觸發(fā)對應(yīng)的事件。到這里,一個簡單的彈窗組件已經(jīng)完成了樣式后面再說。一個彈窗組件的拖拽一般通過三個事件來控制,分別是。
更多文章
一個彈窗組件通常包含兩個部分,分別是遮罩層和內(nèi)容層。
遮罩層是背景層,一般是半透明或不透明的黑色。
內(nèi)容層是放我們要展示的內(nèi)容的容器。
{{ title }}
現(xiàn)在彈窗組件的結(jié)構(gòu)已經(jīng)搭建出來了。
類 modal-bg: 遮罩層
類 modal-container: 內(nèi)容層容器
類 modal-header: 內(nèi)容層頭部
類 modal-main: 內(nèi)容層主體部分(用來展示內(nèi)容)
類 modal-footer: 內(nèi)容層腳部
屬性 v-show: 控制彈窗的展示與關(guān)閉
屬性 title: 標(biāo)題
方法 hideModal: 點擊取消的回調(diào)函數(shù)
方法 submit: 點擊確認(rèn)的回調(diào)函數(shù)
插槽 slot: 用來展示內(nèi)容
定義完 HTML 結(jié)構(gòu),還得定義組件的 props 屬性,用來接收父組件的傳參,以方便在父組件通過屬性來控制彈窗。
export default { name: "modal", props: { show: { type: Boolean, default: false }, title: { type: String, default: "" }, }, methods: { hideModal() { this.$emit("hideModal") }, submit() { this.$emit("submit") }, } }
從上述代碼可知,組件只有兩個 prop 屬性,分別是 show(控制彈窗展示與關(guān)閉)和 title(彈窗標(biāo)題)。
另外還有兩個方法,分別是點擊取消和確認(rèn)的回調(diào)函數(shù),它們的作用是觸發(fā)對應(yīng)的事件。
到這里,一個簡單的彈窗組件已經(jīng)完成了(樣式后面再說)。
一個組件寫完了,要怎么調(diào)用呢?
假設(shè)這個組件的文件名為 Modal.vue,我們在父組件里這樣調(diào)用 (假設(shè)父組件和彈窗組件在同一文件夾下)。
這里放彈窗的內(nèi)容
import Modal from "./Modal.vue" export default { data() { return { title: "彈窗標(biāo)題", show: true, } }, components: { Modal }, methods: { hideModal() { // 取消彈窗回調(diào) this.show = false }, submit() { // 確認(rèn)彈窗回調(diào) this.show = false } } }
把子組件要求的兩個屬性和兩個方法都寫上,現(xiàn)在來看看這個彈窗的效果。
一個簡單的彈窗組件就這樣完成了。
現(xiàn)在市面上的 UI 庫特別多,所以一些通用的組件樣式不建議自己寫,直接用現(xiàn)成的就好。在這個組件上,我們可以使用 element-ui,改造后變成這樣。
{{ title }}
嗯... 看起來只有兩個按鈕變化了,不過沒關(guān)系,后面的內(nèi)容部分肯定還有用得上的時候。
功能看起來這個簡單的彈窗組件真的是非常簡單,我們可以在此基礎(chǔ)上適當(dāng)?shù)脑黾右恍┕δ?,例如:拖拽?/p>
一個彈窗組件的拖拽一般通過三個事件來控制,分別是 mousedown、mousemove、mouseup。
mousedown 用來獲取鼠標(biāo)點擊時彈窗的坐標(biāo)
mousemove 用來計算鼠標(biāo)移動時彈窗的坐標(biāo)
mouseup 取消彈窗的移動
先來看代碼。
{{ title }}
在彈窗上增加了三個事件 mousedown、mousemove、mouseup,用來控制彈窗移動(點擊彈窗頭部進(jìn)行拖拽)。
data() { return { x: 0, // 彈窗 X 坐標(biāo) y: 0, // 彈窗 Y 坐標(biāo) node: null, // 彈窗元素 isCanMove: false // 是否能拖動彈窗 } }, mounted() { // 將彈窗元素賦值給 node this.node = document.querySelector(".modal-container") }, setStartingPoint(e) { this.x = e.clientX - this.node.offsetLeft this.y = e.clientY - this.node.offsetTop this.isCanMove = true }, modalMove(e) { if (this.isCanMove) { this.node.style.left = e.clientX - this.x + "px" this.node.style.top = e.clientY - this.y + "px" } }, cancelMove() { this.isCanMove = false }
通過這些新增的代碼,這個彈窗就具有了拖拽的功能。
最后附上這個彈窗組件的完整代碼
{{ title }}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104688.html
摘要:前言上回說了組件組件開發(fā)練習(xí)焦點圖切換的一個練習(xí)項目,這次換下口味,說下的插件練手的項目。和組件開發(fā)的目錄相比,區(qū)別就在于這個文件夾上。開發(fā)過程把項目跑起來首先,先弄這個組件。最后還需要一個變量,控制彈窗是否顯示。 1.前言 上回說了組件(vue組件開發(fā)練習(xí)--焦點圖切換)的一個練習(xí)項目,這次換下口味,說下vue的插件練手的項目。相對于現(xiàn)在之前的焦點圖切換的組件,這個可能就更簡單了,基...
摘要:在組件內(nèi),我們觸及不到組件的模板,所以簡單的在動態(tài)模板上添加并不能完成事件監(jiān)聽。簡單來說,依賴收集是在渲染函數(shù)渲染的函數(shù)中進(jìn)行的,在中一旦通過使用了這個變量,通過這個變量的就收集到了正在執(zhí)行的渲染函數(shù)這一個依賴。 作為一個中后臺表單&表格工程師,經(jīng)常需要在一個頁面中處理多個彈窗。我自己的項目中,一個復(fù)雜的審核頁面中的彈窗數(shù)量超過了30個,如何管理大量的彈窗就成為了一個需要考慮的問題。 ...
摘要:最近是用開發(fā)了一套組件庫在開發(fā)過程對對于組件化的開發(fā)有一些感想,于是開始記錄下這些。彈窗組件一直是開發(fā)中必備的,使用頻率相當(dāng)高,最常見的莫過于,,這些曾經(jīng)我們都會用來調(diào)試程序不同的組件庫對于彈窗的處理也是不一樣的。 最近是用 vue 開發(fā)了一套組件庫 vue-carbon , 在開發(fā)過程對對于組件化的開發(fā)有一些感想,于是開始記錄下這些。 彈窗組件一直是 web 開發(fā)中必備的,使用頻率相...
摘要:基于開發(fā)的插件包含仿照原生樣式來源一些想法剛開始的時候想要用現(xiàn)成的彈窗組件來著但是查找一圈沒有發(fā)現(xiàn)比較合適項目的所以才自己開發(fā)了一個包含四種并且可以單個引入的組件開發(fā)實際上比較簡單有興趣的可以看下源碼實現(xiàn)步驟很清晰關(guān)于樣式的問題是直接從魅 wc-messagebox 基于 vue 2.0 開發(fā)的插件 包含 Alert, Confirm, Toast, Prompt 仿照 iOS 原生...
摘要:前言最近在使用框架,用到了對話框組件,大致實現(xiàn)的效果,跟我之前自己在移動端項目里面弄的一個彈窗組件差不太多?,F(xiàn)在基本上彈窗組件都已實現(xiàn)的差不多了,還差一個彈窗的關(guān)閉事件,這里就涉及到子組件往父組件傳參了。 前言 最近在使用element-ui框架,用到了Dialog對話框組件,大致實現(xiàn)的效果,跟我之前自己在移動端項目里面弄的一個彈窗組件差不太多。然后就想著把這種彈窗組件的實現(xiàn)方式與大家...
閱讀 2970·2021-11-17 09:33
閱讀 3131·2021-11-16 11:52
閱讀 495·2021-09-26 09:55
閱讀 2992·2019-08-30 15:52
閱讀 1328·2019-08-30 15:44
閱讀 1274·2019-08-30 13:59
閱讀 810·2019-08-30 13:08
閱讀 1173·2019-08-30 10:50