Tab 标签页
gr-tabs
:标签页的根组件,其子元素只能是gr-tab
组件。gr-tab
:标签页的子组件,每个标签页的内容在此定义。gr-list
:标签页内的列表元素。
自定义样式
移步到 CSS Part。
基本用法
TIP
内置了 触摸拖动切换
的功能
【最新】
《战双帕弥什》锈夜逐光版本一览
【2024-11-07】
【攻略】
content
【2023-11-07】
查看代码
html
html
<gr-tabs id="grTab">
<gr-tab title="标签一">
<gr-list>
<div slot="prefix">【最新】</div>
<div>《战双帕弥什》锈夜逐光版本一览</div>
<div slot="suffix">【2024-11-07】</div>
</gr-list>
</gr-tab>
<gr-tab title="标签二">
<gr-list>
<div slot="prefix">【攻略】</div>
<div>content</div>
<div slot="suffix">【2023-11-07】</div>
</gr-list>
</gr-tab>
<div slot="footer">
<button>hhhh</button>
</div>
</gr-tabs>
批量渲染列表元素
WARNING
需要注意的是,若数据的获取是异步操作。那么最好给内容区域设置一个最小高度,避免出现页面抖动。
css
gr-tabs::part(list-wrap) {
min-height: 10rem;
}
【攻略】
content
【2023-11-07】
查看代码
html
html
<gr-tabs id="grTab">
<gr-tab title="标签一"></gr-tab>
<gr-tab title="标签二">
<gr-list>
<div slot="prefix">【攻略】</div>
<div>content</div>
<div slot="suffix">【2023-11-07】</div>
</gr-list>
</gr-tab>
<div slot="footer">
<button>hhhh</button>
</div>
</gr-tabs>
js
js
// 标签页元素
const grTab = document.querySelector("#grTab");
// 模拟数据
const mockList = [
{
prefix: "【最新】",
content: "《战双帕弥什》锈夜逐光版本一览",
surfix: "【2024-11-07】",
href: "",
},
{
prefix: "【最新】",
content: "《战双帕弥什》新版本「锈夜逐光」PV公开 | 时轮重构,孤影洄光",
surfix: "【2024-11-06】",
href: "",
},
{
prefix: "【最新】",
content: "《锈夜逐光》版本更新公告",
surfix: "【2024-11-05】",
href: "",
},
];
// 模拟数据获取
const fetchData = () =>
new Promise((resolve) => {
setTimeout(() => {
resolve({ data: mockList });
}, 200);
});
// 当组件加载完毕时,使用 window.$renderGrList 进行列表渲染
grTab.addEventListener("gr-tabs-load", async () => {
// 因为组件会将传入的 gr-tab 转换成普通元素,所以这里是需要使用 gr-tab 上传入的标签名作为唯一标识。
const tab1 = grTab.shadowRoot.querySelector("[data-tab-title='标签一']");
fetchData().then((res) => {
const template = window.$renderGrList(tab1, res.data);
});
});
TIP
在组件引入后,会在 window
对象上挂载名为 $renderGrList
的函数。
js
/**
* @typedef {Object} Option
* @property {String} prefix - 前缀内容
* @property {String} content - 内容
* @property {String} surfix - 后缀内容
* @property {String} href - 链接
*/
const option = {
prefix: String,
content: String,
surfix: String,
href: String,
};
/**
* 渲染 gr-list 元素到指定的根容器
* @param {HTMLElement} root - 元素挂载的根容器
* @param {Array.<Option>} optionsArr - 元素的配置信息数组
*/
window.$renderGrList(root, optionsArr);
Gr-tab Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
title | 标签名 | string | - | - |
Gr-list Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
href | 链接地址 | string | - | - |
Gr-list Slot
名称 | 说明 |
---|---|
- | 默认插槽 |
footer | 底部插槽 |
Gr-tabs CSS Part
用法可参考 MDN ::part()伪类
名称 | 说明 |
---|---|
main-container | 根容器 |
标签页顶部
名称 | 说明 |
---|---|
tab-wrap | 顶部的根容器 |
tab-list-wrap | 标签元素列表的容器 |
tab-item | 标签元素 |
tab-line | 标签选中时,底部跟随的线 |
tab-cursor | 标签选中时,标签左边跟随的箭头 |
cursor-tail | 跟随的箭头的尾部 |
cursor-arrow | 跟随的箭头的头部 |
标签页的内容部分
名称 | 说明 |
---|---|
content-wrap | 标签页的内容的根容器 |
list-wrap | 标签页的内容容器 |
content-item | 内容元素 |
标签页底部
名称 | 说明 |
---|---|
footer-wrap | 标签页底部容器 |
Gr-list CSS Part
用法可参考 MDN ::part()伪类
名称 | 说明 |
---|---|
container | 根容器 |
前半部分
名称 | 说明 |
---|---|
content-wrap | 前半部分的根容器 |
prefix-desc | 前缀内容容器 |
msg-wrap | 内容容器 |
后半部分
名称 | 说明 |
---|---|
suffix-desc | 后缀内容容器 |