手把手教你搭建基於 Vue3 的前端 UI 組件庫 - 開關

2022-01-04 全棧民工

Vue3 UI Framework - 開關

為了更好的提升用戶體驗,我們這裡再做一個很常用的開關組件 jeremy-switch

需求分析

開始之前我們先做一個簡單的需求分析

1.switch 組件應分為選中/未被選中,兩種狀態2.可以通過點擊變更選中狀態3.不同的選中狀態有不同的顏色,且有滑塊處於不同的端4.可以指定不同的尺寸5.可以自定義顏色6.可以設置為禁用

那麼可以整理出以下參數表格

參數含義類型可選值默認值value默認選擇狀態booleanfalse / truefalsesize尺寸stringmiddle / small / largemiddlecolor顏色string任意合法顏色值#8c6fefdisabled是否禁用booleanfalse / truefalse骨架

這裡我們可以參考 button 組件,因為 switch 組件具有和 button 組件一樣的」點擊」之功能,所以這裡可以直接使用 button 標籤來實現,然後再用一個 div 來充當滑塊,很容易得到如下骨架:

<template>
  <button
    @click="toggle"
    class="jeremy-swicth"
    :class="{ active: value }"
    :size="size"
    :style="{ '--color': color }"
    :disabled="disabled"
  >
    <div></div>
  </button>
</template>

功能

首先,我們再在 Typescript 中聲明一些需求分析中的屬性:

declare const props: {
  value: boolean;
  size?: "middle" | "small" | "large";
  color: string;
  disabled: boolean;
};
declare const context: SetupContext;

然後,再在 export default 中寫入聲明的參數:

export default {
  install: function (Vue) {
    Vue.component(this.name, this);
  },
  name: "JeremySwitch",
  props: {
    value: {
      type: Boolean,
      default: false,
    },
    size: {
      type: String,
      default: "middle",
    },
    color: {
      type: String,
      default: "#8c6fef",
    },
    disabled: {
      type: Boolean,
      default: false,
    },
  },
};

最後,再補全 setup 方法:

  setup(props, context) {
    const toggle = () => {
      context.emit("update:value", !props.value);
    };
    return { toggle };
  },

樣式表

補全層疊樣式表:

<style lang="scss">
@mixin layout($r, $d) {
  $r2: $r - $d;
  display: inline-block;
  position: relative;
  border: none;
  background: #adadad;
  outline: none;
  transition: background-color 250ms;
  cursor: pointer;
  :focus {
    outline: none;
  }
  > div {
    position: absolute;
    background: white;
    border-radius: 50%;
    transition: left 250ms;
    height: $r2;
    width: $r2;
    top: $d/2;
    left: $d/2;
  }
  height: $r;
  width: $r * 2;
  border-radius: $r / 2;
  &.active {
    background: var(--color);
    > div {
      left: calc(100% - #{$r2} - #{$d/2});
    }
  }
}
$r: 20px;
$d: 4px;
.jeremy-swicth[size="small"] {
  @include layout($r, $d);
}
.jeremy-swicth[size="middle"] {
  @include layout($r * 1.5, $d * 1.5);
}
.jeremy-swicth[size="large"] {
  @include layout($r * 2, $d * 2);
}
.jeremy-swicth[disabled] {
  cursor: not-allowed;
}
</style>

運行效果

- End -

推薦閱讀

1.手把手教你搭建基於 Vue3 的前端 UI 組件庫 - 對話框2.手把手教你搭建基於 Vue3 的前端 UI 組件庫 - 按鈕3.手把手教你搭建基於 Vue3 的前端 UI 組件庫 - 文檔頁4.手把手教你搭建基於 Vue3 的前端 UI 組件庫 - 首頁5.手把手教你搭建基於 Vue3 的前端 UI 組件庫 - 頂部邊欄

關注我

相關焦點

  • 手把手教你搭建基於 Vue3 的前端 UI 組件庫
    讓我們先新建一個 src/views 文件夾,用來存放官網的主要視圖然後在該文件夾下新建兩個 vue 文件,作為我們的視圖•Home.vue,首頁•Document.vue,文檔頁再配置一下 router.ts 來實現跳轉import { createWebHistory, createRouter } from 'vue-router'
  • 手把手教你搭建基於 Vue3 的前端組件庫
    開始大前端時代,最近在面試前端工程師的過程中,有感而發,技術更新迭代快,學習成本高。瀏覽了各大博客論壇,千差萬別,比較混亂。最終決定參考 Element UI 的設計風格,主題色選擇紫色(受到 MaterialDesignInXamlToolkit 的影響),寫一套基於 Vue3 的 UI 框架庫和對應的官方網站,方便後期在項目中快速使用,也算是對 Vue3 新特性的學習和總結。
  • 2020年5個最佳Vue移動端組件庫|UI框架
    小夥伴們平時開發vue,react或是angular項目,都喜歡使用的什麼UI組件庫呢?今天,就來盤點下,幾個熱門優質的Vue.js移動端UI組件庫。1、Mint UI餓了麼開源的移動端UI組件庫,基於vue.js的移動端UI框架,包含豐富的 CSS 和 JS 組件,能夠滿足日常的移動端開發需求。
  • 餓了麼公司前端團隊開源前端基於 Vue的桌面端組件庫-Element
    Element,一套為開發者、設計師和產品經理準備的基於 Vue 2.0 的組件庫,提供了配套設計資源,幫助你的開發快速成型。由餓了麼公司前端團隊開源。開源版本持續更新至2.3.2版;設計原則一致性 Consistency與現實生活一致:與現實生活的流程、邏輯保持一致,遵循用戶習慣的語言和概念;在界面中一致:所有的元素和結構需保持一致
  • 從零開始擼一個Vue3.0組件庫-並上傳到NPM上
    /components/index';createApp(App).use(likeUI).mount('#app');引入好後,在App.vue中進行使用<template> <img alt="Vue logo" src=".
  • 2020年 16 個很有用的 Vue UI庫
    使用最先進的CLI設計應用程式,並提供精心編寫,速度非常快的Quasar Web組件。當使用Quasar時,你不需要像Hammerjs,Momentjs或Bootstrap這樣的額外重型庫。它擁有這些功能,而且體積很小!
  • 2018 年你需要知道的 Vue.js 組件庫,完善你的應用開發
    https://www.oschina.net/p/buefyBuefy 基於 Bulma 和 Vue.js 的輕量級UI組件,它提供了即裝即用的輕量級組件。雖然組件選擇有限,但是值得你去嘗試。Bootstrap-Vue 為 Vue.js 2.4+ 提供了 Bootstrap V4 組件和最全面的網格系統的實現,它具有廣泛的自動化 WAI-ARIA 輔助功能標記。
  • 如何從零到一成為 Vue3 組件庫 Naive UI 的貢獻者?
    您將了解到如何參與開源項目bug修復並提交PR成為ContributesNaiveUI 倉庫地址 :NaiveUI[1]🎄如果你正在學習vue3+TS,那麼我建議你可以關注一下NaiveUI,一個很棒的vue3組件庫^_^,文中開源項目便指的它
  • 前端技術棧:5分鐘入門VUE+Element UI
    vue-cli是vue的腳手架,所謂腳手架說白了就是快速創建模板化的項目,不用每次創建項目都去重複那些固定化的操作,注意我們安裝的是vue2.0的腳手架npm install -g vue-cli不要和vue3.0的混淆,vue3.0是npm install -g @vue/cli,此處不需要安裝3.0,否則會衝突全局安裝webpackwebpack
  • Element-UI 死而復生,基於Vue3.0的版本來了
    Vue 3.0, we recommend using Element Plus from the same team意思是說Element UI 2將繼續保持基於Vue 2.x進行更新,另外基於Vue 3.0的版本將由原來的維護開發,項目取名為Element Plus。
  • Vant - 有贊出品的移動UI組件庫
    Vant 是贊前端團隊維護的移動端組件庫,提供了一整套 UI 基礎組件和業務組件。介紹輕量、可靠的移動端 Vue 組件庫,採用 MIT 開源協議, 目前github star 數9k+,是有贊的一套開源組件庫。通過 Vant,可以快速搭建出風格統一的頁面,提升開發效率。目前已有近 60+ 個組件,這些組件被廣泛使用於有贊的各個移動端業務中。
  • 基於Vue實現一個有點意思的拼拼樂小遊戲
    技術棧如下:vue-cli4 基於vue的腳手架Xuery 筆者基於原生js二次封裝的dom庫vue mvvm庫因為該應用屬於H5遊戲,為了清亮化筆者沒有採用第三方ui庫, 如果大家想採用基於vue的第三方移動端ui庫,筆者推薦如下:Mint 餓了麼推出的移動端ui庫NutUI 一套京東風格的移動端組件庫muse-ui 基於MaterialUI風格的移動端UI組件cube-ui
  • vue常用框架和組件代碼,抓緊收藏轉發吧
    . element-ui  餓了麼出品的基於Vue2.0的ui框架http://element-cn.eleme.io/#/zh-CN     2. iview  和element-ui差不多的組件庫https://iviewui.com/3. mint-ui 移動端ui組件庫http://mint-ui.github.io/#!
  • Vue Element+Node.js開發企業通用管理後臺系統
    1.簡介綜合應用 Vue 和 Node 技術,基於 Element-UI 組件庫搭建「小慕讀書
  • 這些超火的Vue組件你還沒有用過嗎?
    這些超火的Vue組件你還沒有用過嗎? 本文這些 Vue 組件,不論對於 Vue 初學者還是使用 Vue 的熟練工,都是具有很高使用價值的組件,對你的 Vue 之路一定很有幫助。
  • 【組件庫從0到1】Vite + Vue3 + TSX開發指南
    不少前端小夥伴問過我,說業務代碼寫了2、3年了,應該如何再進一步?村長的回答中大多數會提到兩個關鍵點:加強工程化實踐能力和底層原理源碼知識。工程化能力對於小夥伴們在工作中解決問題有直接影響,如果你想成為小組內的核心程式設計師,拿更高的職位和薪資,能夠給大家搭架子,解決問題,重難點突破是非常關鍵的幾個考察點。
  • kpc v0.7.8 發布,同時支持 Vue/React/Intact 的前端組件庫
    動機目前市面上已經存在大量組件庫,我們為什麼還要造這個輪子呢?下面我們解釋下這個組件庫開發的動機。
  • Vue.Draggable - 基於 Vue.js 絲般柔滑的拖拽排序組件
    介紹VueDraggable 是一個專門解決拖拽排序和拖拽分組的前端開原始碼庫。在 jQuery 的時代,有很多動效非常流暢絲滑的拖拽排序插件,但在國內 Vue.js 起來後,卻比較難找到一款像 Sortable.js 那樣的組件,而 Vue.Draggable 就是一款基於 Sortable.js 開發的 Vue 增強組件。
  • Vue3 知名組件庫 NaiveUI 源碼揭秘
    打個比方,皮湯我因為是一名前端,而前端這個領域有很多新興的內容,如 Unbundled 方案 Vite,新興框架 Svelte,新彙編語言 WebAssembly,CSS 工程化方案 TailwindCSS,組件庫如抖音很火的開源庫 Semi Design[2]、或者社區比較火的 Vue3 組件庫 NaiveUI 等。
  • Vue入門10 vue+elementUI
    十二、實戰快速上手我們採用實戰教學模式並結合ElementUI組件庫,將所需知識點應用到實際中,以最快速度帶領大家掌握Vue的使用;