This commit is contained in:
2022-12-09 16:41:41 +08:00
parent c1cce5a7c2
commit ff7aa8774f
2003 changed files with 156639 additions and 140 deletions

View File

@@ -0,0 +1,33 @@
import{f as T,r as s,o as c,j as r,h as t,g as o,B as p,v as a,F as B,k as N,d as j,i as n}from"./.pnpm.8fb36023.js";const M={class:"markdown-body"},S=n("p",{class:"describe-plugin"},"\u865A\u62DF\u6EDA\u52A8, \u5E38\u7528\u4E8E\u7F8E\u5316\u6D4F\u89C8\u5668\u539F\u751F\u6EDA\u52A8\u6761\u3002",-1),V=n("p",null,[a("\u4F7F\u7528 "),n("code",null,"lay-scroll"),a(" \u6807\u7B7E, \u521B\u5EFA\u4E00\u4E2A\u865A\u62DF\u6EDA\u52A8\u5BB9\u5668")],-1),z=n("pre",null,[n("code",{"v-pre":""},[n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("template")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("lay-button")]),a(),n("span",{class:"token attr-name"},"@click"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),a("changeTotal"),n("span",{class:"token punctuation"},'"')]),n("span",{class:"token punctuation"},">")]),a("\u4FEE\u6539\u6570\u636E"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("lay-button")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("lay-button")]),a(),n("span",{class:"token attr-name"},"@click"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),a("changeMaxTotal"),n("span",{class:"token punctuation"},'"')]),n("span",{class:"token punctuation"},">")]),a("\u4FEE\u6539\u6570\u636E"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("lay-button")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("lay-scroll")]),a(),n("span",{class:"token attr-name"},"height"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),a("200px"),n("span",{class:"token punctuation"},'"')]),a(),n("span",{class:"token special-attr"},[n("span",{class:"token attr-name"},"style"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),n("span",{class:"token value css language-css"},[n("span",{class:"token property"},"background-color"),n("span",{class:"token punctuation"},":"),a(" whitesmoke")]),n("span",{class:"token punctuation"},'"')])]),a(),n("span",{class:"token attr-name"},"thumbColor"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),a("#000000"),n("span",{class:"token punctuation"},'"')]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("lay-container")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("lay-row")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("lay-col")]),a(),n("span",{class:"token attr-name"},"span"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),a("24"),n("span",{class:"token punctuation"},'"')]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("lay-panel")]),a(`
`),n("span",{class:"token attr-name"},"v-for"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),a("(n, index) in total"),n("span",{class:"token punctuation"},'"')]),a(`
`),n("span",{class:"token attr-name"},":key"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),a("n"),n("span",{class:"token punctuation"},'"')]),a(`
`),n("span",{class:"token special-attr"},[n("span",{class:"token attr-name"},"style"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),n("span",{class:"token value css language-css"},[n("span",{class:"token property"},"margin"),n("span",{class:"token punctuation"},":"),a(" 10px"),n("span",{class:"token punctuation"},";"),a(),n("span",{class:"token property"},"padding"),n("span",{class:"token punctuation"},":"),a(" 10px")]),n("span",{class:"token punctuation"},'"')])]),a(`
`),n("span",{class:"token punctuation"},">")]),a("\u5185\u5BB9"),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("lay-panel")]),a(`
`),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("lay-col")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("lay-row")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("lay-container")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("lay-scroll")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("template")]),n("span",{class:"token punctuation"},">")]),a(`
`),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"<"),a("script")]),a(),n("span",{class:"token attr-name"},"lang"),n("span",{class:"token attr-value"},[n("span",{class:"token punctuation attr-equals"},"="),n("span",{class:"token punctuation"},'"'),a("ts"),n("span",{class:"token punctuation"},'"')]),a(),n("span",{class:"token attr-name"},"setup"),n("span",{class:"token punctuation"},">")]),n("span",{class:"token script"},[n("span",{class:"token language-javascript"},[a(`
`),n("span",{class:"token keyword"},"import"),a(),n("span",{class:"token punctuation"},"{"),a(" ref "),n("span",{class:"token punctuation"},"}"),a(),n("span",{class:"token keyword"},"from"),a(),n("span",{class:"token string"},"'vue'"),a(`
`),n("span",{class:"token keyword"},"const"),a(" total "),n("span",{class:"token operator"},"="),a(),n("span",{class:"token function"},"ref"),n("span",{class:"token punctuation"},"("),n("span",{class:"token number"},"50"),n("span",{class:"token punctuation"},")"),a(`
`),n("span",{class:"token keyword"},"const"),a(),n("span",{class:"token function-variable function"},"changeTotal"),a(),n("span",{class:"token operator"},"="),a(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),a(),n("span",{class:"token operator"},"=>"),a(),n("span",{class:"token punctuation"},"{"),a(`
total`),n("span",{class:"token punctuation"},"."),a("value "),n("span",{class:"token operator"},"="),a(),n("span",{class:"token number"},"2"),a(`
`),n("span",{class:"token punctuation"},"}"),a(`
`),n("span",{class:"token keyword"},"const"),a(),n("span",{class:"token function-variable function"},"changeMaxTotal"),a(),n("span",{class:"token operator"},"="),a(),n("span",{class:"token punctuation"},"("),n("span",{class:"token punctuation"},")"),a(),n("span",{class:"token operator"},"=>"),a(),n("span",{class:"token punctuation"},"{"),a(`
total`),n("span",{class:"token punctuation"},"."),a("value "),n("span",{class:"token operator"},"="),a(),n("span",{class:"token number"},"50"),a(`
`),n("span",{class:"token punctuation"},"}"),a(`
`)])]),n("span",{class:"token tag"},[n("span",{class:"token tag"},[n("span",{class:"token punctuation"},"</"),a("script")]),n("span",{class:"token punctuation"},">")]),a(`
`)])],-1),F=n("table",null,[n("thead",null,[n("tr",null,[n("th",null,"\u5C5E\u6027"),n("th",null,"\u63CF\u8FF0"),n("th",null,"\u53EF\u9009\u503C")])]),n("tbody",null,[n("tr",null,[n("td",null,"height"),n("td",null,"\u9AD8\u5EA6"),n("td",null,"\u2013")]),n("tr",null,[n("td",null,"thumbWidth"),n("td",null,"\u6ED1\u5757\u5BBD\u5EA6"),n("td",null,"\u2013")]),n("tr",null,[n("td",null,"thumbColor"),n("td",null,"\u6ED1\u5757\u989C\u8272"),n("td",null,"\u2013")]),n("tr",null,[n("td",null,"trackColor"),n("td",null,"\u6ED1\u69FD\u989C\u8272"),n("td",null,"\u2013")])])],-1),E={style:{display:"flex","justify-content":"space-between","margin-top":"20px"}},G={},H={__name:"scroll",setup(I,{expose:d}){let l=T(50),y=()=>{l.value=2},_=()=>{l.value=50};return d({frontmatter:{}}),(L,W)=>{const g=s("lay-anchor"),e=s("lay-field"),u=s("lay-button"),m=s("lay-panel"),h=s("lay-col"),f=s("lay-row"),b=s("lay-container"),v=s("lay-scroll"),x=s("lay-code"),w=s("lay-table-box"),C=s("lay-contributor"),k=s("lay-icon"),i=s("router-link");return c(),r("div",M,[t(g,{anchors:"\u57FA\u672C\u4ECB\u7ECD,\u57FA\u7840\u4F7F\u7528,Scroll \u5C5E\u6027",currIndex:-1,show:!0}),t(e,{id:"\u57FA\u672C\u4ECB\u7ECD",title:"\u57FA\u672C\u4ECB\u7ECD",style:{"margin-top":"21px","margin-bottom":"20px"}}),S,t(e,{id:"\u57FA\u7840\u4F7F\u7528",title:"\u57FA\u7840\u4F7F\u7528",style:{"margin-top":"21px","margin-bottom":"20px"}}),t(x,null,{description:o(()=>[V]),code:o(()=>[z]),default:o(()=>[t(u,{onClick:p(y)},{default:o(()=>[a("\u4FEE\u6539\u6570\u636E")]),_:1},8,["onClick"]),t(u,{onClick:p(_)},{default:o(()=>[a("\u4FEE\u6539\u6570\u636E")]),_:1},8,["onClick"]),t(v,{height:"200px",style:{"background-color":"whitesmoke"},thumbColor:"#000000"},{default:o(()=>[t(b,null,{default:o(()=>[t(f,null,{default:o(()=>[t(h,{span:"24"},{default:o(()=>[(c(!0),r(B,null,N(p(l),(q,A)=>(c(),j(m,{key:q,style:{margin:"10px",padding:"10px"}},{default:o(()=>[a("\u5185\u5BB9")]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),t(e,{id:"Scroll \u5C5E\u6027",title:"Scroll \u5C5E\u6027",style:{"margin-top":"21px","margin-bottom":"20px"}}),t(w,null,{default:o(()=>[F]),_:1}),t(C,{"file-path":"scroll"}),n("div",E,[n("div",null,[t(i,{to:"/zh-CN/components/result",class:"lay-link",style:{display:""}},{default:o(()=>[t(k,{type:"layui-icon-left"}),a("\u7ED3\u679C")]),_:1})]),n("div",null,[t(i,{to:"/zh-CN/components/noticeBar",class:"lay-link",style:{display:""}},{default:o(()=>[a("\u901A\u544A\u680F "),t(k,{type:"layui-icon-right"})]),_:1})])])])}}};export{H as default,G as frontmatter};

View File

@@ -0,0 +1 @@
x+)JMU06c040031Q<31><51>KI<4B><49><EFBFBD>*fPq<50><71><18><>аy<D0B0><79><EFBFBD>7<>;n7<6E>1=<0F>

View File

@@ -0,0 +1,5 @@
declare const _default: {
name: string;
class: string;
}[];
export default _default;

View File

@@ -0,0 +1,144 @@
<template>
<lay-layout>
<lay-side>
<lay-scroll style="overflow-y: scroll">
<ul class="layui-menu layui-menu-lg layui-menu-docs">
<li
v-for="menu in menus"
:key="menu"
class="layui-menu-item-group"
lay-options="{type: 'group', isAllowSpread: true}"
>
<div class="layui-menu-body-title">{{ menu.title }}</div>
<hr />
<ul>
<li
v-for="children in menu.children"
:key="children"
:class="[
currentPath === children.path
? 'layui-menu-item-checked2'
: '',
]"
@click="handleClick(children)"
>
<div class="layui-menu-body-title">
<router-link :to="children.path">
<span>{{ children.title }}</span>
<span class="layui-font-12 layui-font-gray">
{{ children.subTitle }}
</span>
</router-link>
</div>
</li>
</ul>
</li>
</ul>
</lay-scroll>
</lay-side>
<lay-body>
<div style="padding: 20px">
<router-view />
</div>
</lay-body>
</lay-layout>
</template>
<script>
import { ref, watch } from "vue";
import { useRouter, useRoute } from "vue-router";
export default {
setup() {
const route = useRoute();
const router = useRouter();
const currentPath = ref("/zh-CN/guide");
watch(
() => route.path,
(val) => {
currentPath.value = val;
},
{
immediate: true,
deep: true,
}
);
const menus = [
{
id: 1,
title: "基础",
children: [
{
id: 1,
title: "介绍",
subTitle: "introduce",
path: "/zh-CN/guide/introduce",
},
{
id: 2,
title: "安装",
subTitle: "started",
path: "/zh-CN/guide/getStarted",
},
{
id: 3,
title: "更新",
subTitle: "change",
path: "/zh-CN/guide/changelog",
},
{
id: 4,
title: "主题",
subTitle: "theme",
path: "/zh-CN/guide/theme",
},
{
id: 5,
title: "夜间",
subTitle: "dark",
path: "/zh-CN/guide/dark",
},
{
id: 6,
title: "语言",
subTitle: "locale",
path: "/zh-CN/guide/locale",
},
{
id: 7,
title: "问题",
subTitle: "problem",
path: "/zh-CN/guide/problem",
},
{
id: 8,
title: "插件",
subTitle: "member",
path: "/zh-CN/guide/plugin",
},
{
id: 9,
title: "团队",
subTitle: "member",
path: "/zh-CN/guide/member",
},
],
},
];
const selected = ref(1);
const handleClick = function (menu) {
selected.value = menu.id;
router.push(menu.path);
};
return {
menus,
selected,
currentPath,
handleClick,
};
},
};
</script>

View File

@@ -0,0 +1,25 @@
import { w as withInstall } from "../badge/index2.js";
import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, unref, renderSlot } from "vue";
var index = /* @__PURE__ */ (() => ".layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}\n")();
const __default__ = {
name: "LayContainer"
};
const _sfc_main = defineComponent({
...__default__,
props: {
fluid: { default: false }
},
setup(__props) {
const props = __props;
const classes = computed(() => props.fluid ? "layui-fluid" : "layui-container");
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", {
class: normalizeClass(unref(classes))
}, [
renderSlot(_ctx.$slots, "default")
], 2);
};
}
});
const component = withInstall(_sfc_main);
export { component as default };

View File

@@ -0,0 +1,19 @@
<template>
<svg
focusable="false"
class=""
data-icon="eye-invisible"
width="1em"
height="1em"
fill="currentColor"
aria-hidden="true"
viewBox="64 64 896 896"
>
<path
d="M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z"
></path>
<path
d="M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z"
></path>
</svg>
</template>

View File

@@ -0,0 +1,140 @@
:root {
--input-border-radius: var(--global-border-radius);
--input-border-color: var(--global-neutral-color-3);
}
@input-lg: 44px;
@input-md: 38px;
@input-sm: 32px;
@input-xs: 26px;
.set-size(@size) {
& {
height: @size;
.layui-input {
height: @size;
line-height: @size;
}
}
}
.layui-input {
width: 100%;
height: 38px;
line-height: 38px;
border-width: 1px;
border-style: solid;
border-color: var(--input-border-color);
border-radius: var(--input-border-radius);
display: inline-flex;
}
.layui-input input{
height: 38px;
line-height: 38px;
background-color: #fff;
color: rgba(0, 0, 0, 0.85);
padding-left: 10px;
display: inline-block;
border: none;
height: 100%;
width: 100%;
}
.layui-input-append {
background-color: #fafafa;
border-left: 1px solid var(--input-border-color);
display: flex;
padding: 0 15px;
flex: none;
align-items: center;
}
.layui-input-prepend {
background-color: #fafafa;
border-right: 1px solid var(--input-border-color);
display: flex;
padding: 0 15px;
flex: none;
align-items: center;
}
.layui-input-wrapper {
width: 100%;
display: inline-flex;
border: none;
}
.layui-input:hover,
.layui-input:focus-within {
border-color: #d2d2d2;
}
.layui-input-clear,
.layui-input-prefix,
.layui-input-suffix,
.layui-input-password {
background-color: white;
}
.layui-input-clear,
.layui-input-password,
.layui-input-prefix,
.layui-input-suffix {
display: flex;
flex: none;
align-items: center;
padding: 0 10px;
}
.layui-input-has-prefix {
input {
padding: 0;
}
}
.layui-input-clear,
.layui-input-password {
color: rgba(0, 0, 0, 0.45);
}
.layui-input-clear:hover {
opacity: 0.6;
}
.layui-input input::-webkit-input-placeholder {
line-height: 1.3;
}
.layui-input input::-ms-reveal {
display: none;
}
.layui-input-disabled {
border-color: var(--input-border-color)!important;
}
.layui-input-disabled {
opacity: 0.6;
}
.layui-input-disabled,
.layui-input-disabled * {
cursor: not-allowed !important;
}
.layui-input{
&[size="lg"] {
.set-size(@input-lg);
}
&[size="md"] {
.set-size(@input-md);
}
&[size="sm"] {
.set-size(@input-sm);
}
&[size="xs"] {
.set-size(@input-xs);
}
}

View File

@@ -0,0 +1,238 @@
<script lang="ts">
export default {
name: "LayFullscreen",
};
</script>
<script lang="ts" setup>
import {
ref,
withDefaults,
computed,
onMounted,
onBeforeUnmount,
Ref,
} from "vue";
import "./index.less";
export interface FullscreenProps {
target?: HTMLElement;
immersive?: boolean;
position?: string;
zIndex?: string;
}
const props = withDefaults(defineProps<FullscreenProps>(), {
immersive: true,
});
const emit = defineEmits(["fullscreenchange"]);
type MethodMap = [
"requestFullscreen",
"exitFullscreen",
"fullscreenElement",
"fullscreenEnabled",
"fullscreenchange",
"fullscreenerror"
];
const methodMap: any[] = [
[
"requestFullscreen",
"exitFullscreen",
"fullscreenElement",
"fullscreenEnabled",
"fullscreenchange",
"fullscreenerror",
],
[
"webkitRequestFullscreen",
"webkitExitFullscreen",
"webkitFullscreenElement",
"webkitFullscreenEnabled",
"webkitfullscreenchange",
"webkitfullscreenerror",
],
[
"webkitRequestFullScreen",
"webkitCancelFullScreen",
"webkitCurrentFullScreenElement",
"webkitCancelFullScreen",
"webkitfullscreenchange",
"webkitfullscreenerror",
],
[
"mozRequestFullScreen",
"mozCancelFullScreen",
"mozFullScreenElement",
"mozFullScreenEnabled",
"mozfullscreenchange",
"mozfullscreenerror",
],
[
"msRequestFullscreen",
"msExitFullscreen",
"msFullscreenElement",
"msFullscreenEnabled",
"MSFullscreenChange",
"MSFullscreenError",
],
];
// 默认请求全屏的元素
const defaultElement: HTMLElement = document.documentElement;
// 要请求全屏显示的元素
let targetEl: Ref<HTMLElement | undefined> = ref<HTMLElement | undefined>(
props.target || defaultElement
);
// 是否全屏
const isFullscreen = ref(false);
// 是否支持全屏
let isSupported: boolean = false;
// 包装全屏 API,屏蔽浏览器差异
const unprefixedMethods: MethodMap = methodMap[0];
const fullscreenAPI: Record<string, string> = {};
for (const methodList of methodMap) {
if (methodList[1] in document) {
for (const [index, method] of methodList.entries()) {
fullscreenAPI[unprefixedMethods[index]] = method;
}
isSupported = true;
break;
}
}
/**
* 进入全屏
* @param targetEl 请求全屏显示的元素,不是所有元素都支持,建议用 div
*/
async function enter(targetEl: HTMLElement | undefined) {
if (!isSupported) return;
if (!targetEl) targetEl = activeEl.value || defaultElement;
let fullscreenEnter = null;
if (props.immersive) {
// @ts-ignore
fullscreenEnter = Promise.resolve(
// @ts-ignore
targetEl[fullscreenAPI.requestFullscreen]()
);
} else {
styleLayFullscreen(targetEl, false);
fullscreenEnter = Promise.resolve(
targetEl?.classList.add("layui-fullscreen")
);
}
return await fullscreenEnter?.then(() => {
isFullscreen.value = true;
emit("fullscreenchange", isFullscreen.value);
return !!document.fullscreenElement;
});
}
/**
* 退出全屏
* @param targetEl 退出全屏元素
*/
async function exit(targetEl: HTMLElement | Document | undefined) {
if (!isSupported) return;
if (!targetEl) targetEl = activeEl.value || document;
let fullscreenExit = null;
if (props.immersive) {
// @ts-ignore
fullscreenExit = Promise.resolve(document[fullscreenAPI.exitFullscreen]());
} else {
if (targetEl instanceof Document) return;
styleLayFullscreen(targetEl, true);
fullscreenExit = Promise.resolve(
targetEl?.classList.remove("layui-fullscreen")
);
}
return await fullscreenExit?.then(() => {
isFullscreen.value = false;
emit("fullscreenchange", isFullscreen.value);
return !!document.fullscreenElement;
});
}
/**
* 进入或退出全屏
*/
async function toggle() {
if (isFullscreen.value) {
await exit(activeEl.value);
} else {
await enter(activeEl.value);
}
}
/**
*
* @param el HTML 元素
* @param isRemove 是否移除样式
*/
const styleLayFullscreen = function (
el: HTMLElement,
isRemove: boolean = false
) {
el.style.position = isRemove ? "" : props.position || "";
el.style.zIndex = isRemove ? "" : props.zIndex || "";
};
const activeEl = computed(() => (targetEl.value = props.target));
/**
* 处理 fullscreenchange 和浏览器窗口内全屏 Escape 按键事件
* @param event 键盘事件
*/
const onFullscreenchange = function (event: KeyboardEvent) {
if (isFullscreen.value && !document.fullscreenElement) {
if (props.immersive) {
isFullscreen.value = false;
emit("fullscreenchange", isFullscreen.value);
} else if (event.key === "Escape") {
exit(activeEl.value);
}
}
};
/**
* 屏蔽 F11 按键原生事件,用 fullscreenAPI 代替
* @param event 键盘事件
*/
const onKeydownF11 = function (event: KeyboardEvent) {
// DOM 根节点全屏
let isRootNodeFullscreen =
props.immersive && (!activeEl.value || activeEl.value === defaultElement);
if (event.key === "F11" && isRootNodeFullscreen) {
event.preventDefault();
toggle();
}
};
onMounted(() => {
//@ts-ignore
document.addEventListener(fullscreenAPI.fullscreenchange, onFullscreenchange);
document.addEventListener("keydown", onFullscreenchange);
document.addEventListener("keydown", onKeydownF11);
});
onBeforeUnmount(() => {
//@ts-ignore
document.removeEventListener(
fullscreenAPI.fullscreenchange,
onFullscreenchange
);
document.removeEventListener("keydown", onFullscreenchange);
document.removeEventListener("keydown", onKeydownF11);
});
</script>
<template>
<slot
name="default"
:isFullscreen="isFullscreen"
:enter="enter"
:exit="exit"
:toggle="toggle"
></slot>
</template>