xy-ui
是一套使用原生Web Components
規範開發的跨框架UI組件庫。查看文檔css
風格參考Ant Design
、Metiral Design
。html
github項目地址vue
該文檔基於docsify動態建立,文中全部組件均爲可交互實例。react
現集成gitalk評論系統,有相關問題可在下方評論區留言。git
react
、vue
仍是原生項目都可使用。shadow dom
真正意義上實現了樣式和功能的組件化。div
標籤同樣。在實現組件功能時,遵循CSS
爲主,JavaScript
爲輔的思路,UI
和業務邏輯分離,使得代碼結構上更加簡約。github
好比xy-button
有一個點擊擴散的水波紋效果,就是採用CSS
來實現,JavaScript
只是輔助完成鼠標位置的獲取web
.btn::after { content: ""; display: block; position: absolute; width: 100%; height: 100%; left: var(--x,0); top: var(--y,0); pointer-events: none; background-image: radial-gradient(circle, #fff 10%, transparent 10.01%); background-repeat: no-repeat; background-position: 50%; transform: translate(-50%,-50%) scale(10); opacity: 0; transition: transform .3s, opacity .8s; } .btn:not([disabled]):active::after { transform: translate(-50%,-50%) scale(0); opacity: .3; transition: 0s; }
詳細可查看源碼。大部分組件都是相似的設計。npm
現代瀏覽器。瀏覽器
包括移動端,不支持IE
。app
IE
不支持原生customElements
, webcomponentsjs能夠實現對IE
的兼容,不過不少CSS
特性仍然無效,因此放棄
目前尚未託管npm
,能夠在github
上獲取最新文件。
目錄以下:
. └── xy-ui ├── components //功能組件 | ├── xy-icon.js | └── ... └── iconfont //圖標庫 └── icon.svg
將components
和iconfont
文件夾放入項目當中。
部分組件使用須要依賴其餘組件,依賴關係以下
組件 | 依賴項 | 描述 |
---|---|---|
xy-button |
xy-icon 、xy-loading |
按鈕。組件使用了icon 和loading 屬性。 |
xy-icon |
無 | 圖標。 |
xy-slider |
xy-tips |
滑動條。組件使用了showtips 屬性。 |
xy-select |
xy-button |
下拉選擇器。組件內部使用xy-button 組合而成。 |
xy-tab |
xy-button |
標籤頁。組件導航按鈕使用了xy-button 。 |
xy-loading |
無 | 加載。 |
xy-switch |
無 | 開關。 |
xy-checkbox |
無 | 多選。 |
xy-radio |
無 | 單選。 |
xy-tips |
無 | 提示。 |
xy-message |
xy-icon |
全局提示。提示信息圖標使用xy-icon 。 |
xy-dialog |
xy-icon 、xy-button 、xy-loading |
彈窗提示。提示信息圖標使用xy-icon ,確認取消按鈕使用了xy-button 。組件使用了loading 屬性。 |
xy-layout |
無 | 佈局。 |
xy-input |
xy-icon 、xy-button 、xy-tips |
輸入框。組件使用了icon 屬性,同時有xy-button 交互,表單驗證使用了xy-tips 信息提示。 |
xy-textarea |
同上 | 多行輸入框。同上。 |
無依賴組件直接引入單獨js
便可,有依賴組件須要引入相關js
。
如需單獨使用xy-tips
組件,僅需引用xy-tips.js
。
// . // └── project // ├── components // | └── xy-tips.js // └── index.html import './components/xy-tips.js';
如需單獨使用xy-input
組件,需引用xy-input.js
、xy-button.js
、xy-icon.js
、xy-tips.js
。
// └── project // ├── components // | ├── xy-input.js // | ├── xy-button.js // | ├── xy-icon.js // | └── xy-tips.js // └── index.html import './components/xy-input.js';
大部分狀況下所有引用便可
<script type="module"> import './components/xy-button.js'; </script> <xy-button>button</xy-button>
現代瀏覽器支持原生import
語法,不過須要注意script
的類型type="module"
。
import './components/xy-icon.js'; ReactDOM.render(<xy-button>button</xy-button>, document.body);
關於react
中使用Web Components
的注意細節可參考 https://react.docschina.org/docs/web-components.html
與原生相似,暫無研究。
使用一個組件有如下幾種方式:
這是最經常使用的使用方式(推薦)。
<xy-button>button</xy-button>
也能夠經過document.createElement
建立元素
const btn = document.createElement('xy-button'); document.body.appenChild(btn);
自定義組件是經過class
定義,能夠經過new
來實例化。
import XyButton from './components/xy-button.js'; const btn = new XyButton(); document.body.appenChild(btn);
大部分狀況下,能夠把組件當成普通的html
標籤,
好比給<xy-button>button</xy-button>
添加事件,有如下幾種方式
<xy-button onclick="alert(5)">button</xy-button>
btn.onclick = function(){ alert(5) } btn.addEventListener('click',function(){ alert(5) })
自定義事件只能經過
addEventListener
綁定
好比元素的獲取,徹底符合html
規則
<xy-tab> <xy-tab-content label="tab1">tab1</xy-tab-content> <xy-tab-content label="tab2">tab2</xy-tab-content> <xy-tab-content label="tab3" id="tab3">tab3</xy-tab-content> </xy-tab>
const tab3 = document.getElementById('tab3'); tab3.parentNode;//xy-tab
組件的布爾類型的屬性也聽從原生規範(添加和移除屬性),好比
<xy-dialog show></xy-dialog> <!-- 顯示 --> <xy-dialog></xy-dialog> <!-- 隱藏 --> <xy-button loading>button</xy-button> <!-- 加載中 --> <xy-button>button</xy-button> <!-- 正常 -->
總之,大部分狀況下把它當成普通的html
標籤(不用關注shadow dom的結構)就行了,之前怎麼作如今仍然怎麼作,只是新增了方法而已。
更多詳細介紹請查看文檔,歡迎star~