🐛(component): [menu]修复折叠时偶现闪烁的问题
This commit is contained in:
		
							parent
							
								
									286398fc4d
								
							
						
					
					
						commit
						f00064d509
					
				@ -31,7 +31,7 @@ const isOpen = computed(() => {
 | 
			
		||||
    class="layui-sub-menu-popup"
 | 
			
		||||
  >
 | 
			
		||||
    <li :class="['layui-nav-item']">
 | 
			
		||||
      <a href="javascript:void(0)" style="justify-content: space-between">
 | 
			
		||||
      <a href="javascript:void(0)">
 | 
			
		||||
        <div>
 | 
			
		||||
          <!-- 图标 -->
 | 
			
		||||
          <i v-if="$slots.icon" class="layui-sub-menu-icon">
 | 
			
		||||
@ -52,7 +52,7 @@ const isOpen = computed(() => {
 | 
			
		||||
        </span>
 | 
			
		||||
      </a>
 | 
			
		||||
    </li>
 | 
			
		||||
    <template #content class="layui-sub-menu-popup-content">
 | 
			
		||||
    <template #content>
 | 
			
		||||
      <slot></slot>
 | 
			
		||||
    </template>
 | 
			
		||||
  </lay-dropdown>
 | 
			
		||||
@ -67,7 +67,7 @@ const isOpen = computed(() => {
 | 
			
		||||
// popup-menu item样式
 | 
			
		||||
.layui-nav.layui-nav-collapse {
 | 
			
		||||
  .layui-sub-menu-popup dl .layui-nav-item {
 | 
			
		||||
    width: auto;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    > a {
 | 
			
		||||
      display: flex;
 | 
			
		||||
      align-items: center;
 | 
			
		||||
 | 
			
		||||
@ -13,6 +13,7 @@ import {
 | 
			
		||||
  Ref,
 | 
			
		||||
  useSlots,
 | 
			
		||||
  watch,
 | 
			
		||||
  watchEffect,
 | 
			
		||||
} from "vue";
 | 
			
		||||
import { onClickOutside } from "@vueuse/core";
 | 
			
		||||
import LayTransition from "../transition/index.vue";
 | 
			
		||||
@ -48,10 +49,19 @@ const nextLevel = computed(() => level.value + 1);
 | 
			
		||||
 | 
			
		||||
provideLevel(nextLevel);
 | 
			
		||||
 | 
			
		||||
const computedPopup = computed(
 | 
			
		||||
  () =>
 | 
			
		||||
    isTree.value && (isCollapse.value === true || isCollapse.value === "true")
 | 
			
		||||
);
 | 
			
		||||
const needPopup = ref(false);
 | 
			
		||||
watchEffect(() => {
 | 
			
		||||
  const _isCollapse = isCollapse.value === true || isCollapse.value === "true";
 | 
			
		||||
  if (_isCollapse) {
 | 
			
		||||
    // 折叠时等待动画结束改变DOM
 | 
			
		||||
    setTimeout(() => {
 | 
			
		||||
      needPopup.value = isTree.value && _isCollapse;
 | 
			
		||||
    }, 200);
 | 
			
		||||
  } else {
 | 
			
		||||
    // 展开时立即改变DOM
 | 
			
		||||
    needPopup.value = isTree.value && _isCollapse;
 | 
			
		||||
  }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
watch(isOpen, () => {
 | 
			
		||||
  if (isOpen.value && position.value !== "left-nav") {
 | 
			
		||||
@ -100,8 +110,7 @@ onBeforeUnmount(() => window.removeEventListener("resize", setPosition));
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <template v-if="!computedPopup">
 | 
			
		||||
    <li class="layui-nav-item">
 | 
			
		||||
  <li v-if="!needPopup" class="layui-nav-item">
 | 
			
		||||
    <a href="javascript:void(0)" @click="openHandle()">
 | 
			
		||||
      <!-- 图标 -->
 | 
			
		||||
      <i v-if="slots.icon" class="layui-sub-menu-icon">
 | 
			
		||||
@ -143,9 +152,7 @@ onBeforeUnmount(() => window.removeEventListener("resize", setPosition));
 | 
			
		||||
      </dl>
 | 
			
		||||
    </template>
 | 
			
		||||
  </li>
 | 
			
		||||
  </template>
 | 
			
		||||
  <template v-else>
 | 
			
		||||
    <SubMenuPopup :id="id">
 | 
			
		||||
  <SubMenuPopup v-else :id="id">
 | 
			
		||||
    <template v-if="slots.icon" #icon>
 | 
			
		||||
      <slot name="icon"></slot>
 | 
			
		||||
    </template>
 | 
			
		||||
@ -153,11 +160,10 @@ onBeforeUnmount(() => window.removeEventListener("resize", setPosition));
 | 
			
		||||
      <slot name="title"></slot>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template #expandIcon>
 | 
			
		||||
        <slot v-if="slots.expandIcon" name="expandIcon"></slot>
 | 
			
		||||
      <slot name="expandIcon"></slot>
 | 
			
		||||
    </template>
 | 
			
		||||
    <template #default>
 | 
			
		||||
      <slot name="default"></slot>
 | 
			
		||||
    </template>
 | 
			
		||||
  </SubMenuPopup>
 | 
			
		||||
</template>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@ -449,9 +449,11 @@ export default {
 | 
			
		||||
          首页
 | 
			
		||||
        </template>
 | 
			
		||||
    </lay-menu-item>
 | 
			
		||||
    <lay-sub-menu title="目录" id="3">
 | 
			
		||||
    <lay-sub-menu id="3">
 | 
			
		||||
      <template #icon><lay-icon type="layui-icon-home"></lay-icon></template>
 | 
			
		||||
      <template #title>首页</template>
 | 
			
		||||
      <template #title>  
 | 
			
		||||
        首页 
 | 
			
		||||
      </template>
 | 
			
		||||
      <lay-menu-item id="4">
 | 
			
		||||
        <template #title>首页</template>
 | 
			
		||||
      </lay-menu-item> 
 | 
			
		||||
@ -480,7 +482,7 @@ export default {
 | 
			
		||||
        </lay-sub-menu>
 | 
			
		||||
      </lay-sub-menu>
 | 
			
		||||
    </lay-sub-menu>  
 | 
			
		||||
    <lay-sub-menu title="目录" id="13">
 | 
			
		||||
    <lay-sub-menu id="13">
 | 
			
		||||
        <template #icon>
 | 
			
		||||
          <lay-icon type="layui-icon-home"></lay-icon> 
 | 
			
		||||
        </template>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user