我在我的页面中使用DAISY UI抽屉组件,但当我试图通过JS函数移动页面方向时,抽屉会像下面的示例代码那样从左到右或从右到左显示动画,这是不受欢迎的移动,它应该在移动方向时以某种方式隐藏.

我试图用hidden级来隐藏它,但我找不到一种方法来再次显示它.

我试了z-index,但再一次触发不了它. 我试了<div class="drawer-side invisible peer-checked:visible">,它有点用,但抽屉不再平稳地向后滑动,它只是立即隐藏起来!

那么,如何防止可见的滑动抽屉在移动Html方向的同时出现这种行为,并保持抽屉平稳地滑入滑出呢?

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link href="https://cdn.jsdelivr.net/npm/daisyui@4.6.1/dist/full.min.css" rel="stylesheet" type="text/css" />
  <script src="https://cdn.tailwindcss.com"></script>
</head>

<body>
  <label id="lng" class="btn btn-primary drawer-button m-1" onclick="switchDir()">Switch Html Dir</label>

  <div class="drawer">
    <input id="my-drawer" type="checkbox" class="drawer-toggle" />
    <div class="drawer-content">
      <!-- Page content here -->
      <label for="my-drawer" class="btn btn-primary drawer-button m-1">Open drawer</label>
    </div>
    
    <div class="drawer-side">
      <label for="my-drawer" aria-label="close sidebar" class="drawer-overlay"></label>
      <ul class="menu p-4 w-80 min-h-full bg-base-200 text-base-content">
        <!-- Sidebar content here -->
        <li><a>Sidebar Item 1</a></li>
        <li><a>Sidebar Item 2</a></li>
      </ul>
    </div>
  </div>

  <script>
    // Function to switch the HTML direction
    function switchDir() {
      let page = document.getElementsByTagName('html')[0];
      if (page.dir == 'rtl') {
        page.dir = 'ltr';
      } else {
        page.dir = 'rtl';
      }
    };
  </script>
</body>

推荐答案

在进行dir更改之前,获取所有.drawer-side个元素并将其从视图中隐藏:

const drawers = document.querySelectorAll('.drawer-side');
drawers.forEach(drawer => {
  drawer.style.display = 'none';
});

进行dir次更改,然后等待一个渲染帧,然后重置样式.这是为了让CSS过渡不播放:

requestAnimationFrame(() => {
  drawers.forEach(drawer => {
    drawer.style.display = '';
  });
});

// Function to switch the HTML direction
function switchDir() {
  let page = document.getElementsByTagName('html')[0];
  
  const drawers = document.querySelectorAll('.drawer-side');
  drawers.forEach(drawer => {
    drawer.style.display = 'none';
  });

  if (page.dir == 'rtl') {
    page.dir = 'ltr';
  } else {
    page.dir = 'rtl';
  }
  
  requestAnimationFrame(() => {
    drawers.forEach(drawer => {
      drawer.style.display = '';
    });
  });
};
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link href="https://cdn.jsdelivr.net/npm/daisyui@4.6.1/dist/full.min.css" rel="stylesheet" type="text/css" />
  <script src="https://cdn.tailwindcss.com"></script>
</head>

<body>
  <label id="lng" class="btn btn-primary drawer-button m-1" onclick="switchDir()">Switch Html Dir</label>

  <div class="drawer">
    <input id="my-drawer" type="checkbox" class="drawer-toggle" />
    <div class="drawer-content">
      <!-- Page content here -->
      <label for="my-drawer" class="btn btn-primary drawer-button m-1">Open drawer</label>
    </div>
    
    <div class="drawer-side">
      <label for="my-drawer" aria-label="close sidebar" class="drawer-overlay"></label>
      <ul class="menu p-4 w-80 min-h-full bg-base-200 text-base-content">
        <!-- Sidebar content here -->
        <li><a>Sidebar Item 1</a></li>
        <li><a>Sidebar Item 2</a></li>
      </ul>
    </div>
  </div>
</body>

Html相关问答推荐

一次悬停可触发同一分区中的另一次悬停

将容器水平偏离中心放置在桌面上;在移动设备上平稳地集中缩小规模

我的表的第一列似乎是推其他2列到右边,我不能改变它

如何使div按钮链接到另一个网页

将CSS应用于TD标记内的div

为什么在添加文本时网格区域会调整大小?

如何设置弹性盒子容器的具体大小?

Html视频标签:圆角像素化

如何制作带有粘性头和脚的可滚动车身

禁用所有行,但在16角中单击编辑按钮的行除外

为什么index.html在Django中有这样的名称?

如何将图像放在其内部按钮下方

为什么我的图像在悬停时与固定顶部栏重叠?

如何从 div 内的属性中提取 href 和文本

从 Vue 应用程序的容器元素渲染 HTML

如何调整网格中单元格的高度?

如何使 Shiny 中的 selectInput Select 扩展到井面板之外或以其他方式使它们更容易被用户看到?

使用 sprite 的问题,字符 sprite 中的额外边距

Mediawiki css/html 信息框创建空白行

正确使用视频作为背景