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~