VUE組件 之 Drawer 抽屜

来源:https://www.cnblogs.com/similar/archive/2019/08/05/10683300.html
-Advertisement-
Play Games

因為項目中用的是 element-ui 框架,而這個框架並沒有抽屜組件,所以自己實現一個,具體代碼如下: drawer.vue 組件具體使用如下: ...


因為項目中用的是 element-ui 框架,而這個框架並沒有抽屜組件,所以自己實現一個,具體代碼如下:

drawer.vue

<template>
  <div class="drawer">
    <div :class="maskClass" @click="closeByMask"></div>
    <div :class="mainClass" :style="mainStyle" class="main">
      <div class="drawer-head">
        <span>{{ title }}</span>
        <span class="close-btn" v-show="closable" @click="closeByButton">X</span>
      </div>
      <div class="drawer-body">
        <slot/>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    // 是否打開
    display: {
      type: Boolean
    },

    // 標題
    title: {
      type: String,
      default: '標題'
    },

    // 是否顯示關閉按鈕
    closable: {
      type: Boolean,
      default: true
    },

    // 是否顯示遮罩
    mask: {
      type: Boolean,
      default: true
    },

    // 是否點擊遮罩關閉
    maskClosable: {
      type: Boolean,
      default: true
    },

    // 寬度
    width: {
      type: String,
      default: '400px'
    },

    // 是否在父級元素中打開
    inner: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    maskClass: function () {
      return {
        'mask-show': (this.mask && this.display),
        'mask-hide': !(this.mask && this.display),
        'inner': this.inner
      }
    },
    mainClass: function () {
      return {
        'main-show': this.display,
        'main-hide': !this.display,
        'inner': this.inner
      }
    },
    mainStyle: function () {
      return {
        width: this.width,
        right: this.display ? '0' : `-${this.width}`,
        borderLeft: this.mask ? 'none' : '1px solid #eee'
      }
    }
  },
  mounted () {
    if (this.inner) {
      let box = this.$el.parentNode
      box.style.position = 'relative'
    }
  },
  methods: {
    closeByMask () {
      this.maskClosable && this.$emit('update:display', false)
    },
    closeByButton () {
      this.$emit('update:display', false)
    }
  }
}
</script>

<style lang="scss" scoped>
.drawer {
  /* 遮罩 */
  .mask-show {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 10;
    background-color: rgba(0,0,0,.5);
    opacity: 1;
    transition: opacity .5s;
  }
  .mask-hide {
    opacity: 0;
    transition: opacity .5s;
  }

  /* 滑塊 */
  .main {
    position: fixed;
    z-index: 10;
    top: 0;
    height: 100%;
    background: #fff;
    transition: all 0.5s;
  }
  .main-show {
    opacity: 1;
  }
  .main-hide {
    opacity: 0;
  }

  /* 某個元素內部顯示 */
  .inner {
    position: absolute;
  }

  /* 其他樣式 */
  .drawer-head {
    display: flex;
    justify-content: space-between;
    height: 45px;
    line-height: 45px;
    padding: 0 15px;
    font-size: 14px;
    font-weight: bold;
    border-bottom: 1px solid #eee;
    .close-btn {
      display: inline-block;
      cursor: pointer;
      height: 100%;
      padding-left: 20px;
    }
  }
  .drawer-body {
    font-size: 14px;
    padding: 15px;
  }
}
</style>

 

組件具體使用如下:

<template>
    <div class="box">
        <el-button type="primary" @click="display = true">打開抽屜</el-button>
        <drawer title="我是一個抽屜組件" :display.sync="display" :inner="true" :width="drawerWidth" :mask="false">
            1. Hello, world!
            2. Do you like it?
        </drawer>
    </div>
</template>

<script>
import drawer from '@/components/drawer/drawer'
export default {
    components: { drawer },
    data () {
        return {
            display: false,
            drawerWidth: '500px'
        }       
    }
}
</script>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • LDAP 服務 本文主要在debian配置,如果需要在CentOS上部署,需要修改大部分的路勁,這裡需要自行修改。 服務按照個人理解,也可使理解為一個資料庫,但是這個資料庫的讀寫性能不像 一樣擁有良好的讀寫性能,而 更偏向於讀取,而弱於寫入。並且 的數據類型屬於面向對象的數據類型,這和 的數據類型不 ...
  • 將一個圖片文件寫入到本地目錄,然後去相冊查看,會查找不到這個圖片文件,但是去文件目錄下查找,確確實實有該圖片文件。 問題在於相冊是一個獨立的app,它並不會去刷新本地圖片,所以需要在寫圖片文件成功之後,通知圖庫 ...
  • 先看效果圖: BasePopupWindowWithMask.class TestPopupWindow.class pop_layout.xml pop_background.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:a ...
  • 一、什麼是優先順序的權重 1.作用:當多個選擇器混合在一起的時候,我們可以通過計算權重來判斷誰的優先順序最高。 2.權重的計算規則 公共代碼: (1)首先計算選擇器中有多少個id,id多的選擇器優先順序最高; 例子: (2)如果id選擇器同樣多,那麼類選擇器多的優先順序高 (3)如果類名的個數也一樣多,那麼 ...
  • `jq操作頁面文檔`http://jquery.cuishifeng.cn/ jq初始 jq選擇器 jq事件 jq內容操作 jq樣式操作 ...
  • 08.05自我總結 JavaScript 一.概念 JavaScript(下文我們會用簡稱JS來代替)是腳本編程語言,JS語言開發的文件是以.js為尾碼,通過在html文件中引入該js文件來控制html代碼的交互功能以及前臺數據處理的業務邏輯(js語言代碼也可以直接寫在html文件中),採用的 "E ...
  • 0805自我總結 一.絕對定位 生成絕對定位的元素,相對於瀏覽器視窗進行定位。 二.相對定位 父級(最近的一個父級)相對定位的目的 1)不影響自身佈局 2)輔助自己絕對定位佈局 三預設定位 預設值。沒有定位,元素出現在正常的流中(忽略 top, bottom, left, right 或者 z in ...
  • 08.05自我總結 一.盒子佈局 1.盒子佈局的組成 margin border padding content 2.margin margin是外邊距,控制盒子的顯示位置相對於他的上一級 left、top控制自身,right、bottom影響兄弟 3.border 寬度:border width ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...