搜尋

首頁  >  問答  >  主體

為什麼 arrowBackground 會立即轉換並且不需要 0.5 秒

//* Define variables and html elements

const sidebar = document.querySelector('.sidebar');
const arrow = document.querySelector('.arrow');

//* Add event listeners

sidebar.addEventListener('mouseout', () => {
  arrow.style.transitionDelay = '0s';
  sidebar.style.transitionDelay = '0.05s';
})

sidebar.addEventListener('mouseover', () => {
  arrow.style.transitionDelay = '0.05s';
  sidebar.style.transitionDelay = '0s';
})
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  height: 100vh;
  width: 100vw;
  display: flex;
}

.sidebar {
  position: fixed;
  height: 100vh;
  background-color: black;
  width: 80px;
  transition: all 0.5s ease;
  z-index: 0;
}

.arrow {
  position: relative;
  left: 7.5px;
  right: 7.5px;
  top: 7.5px;
  width: 65px;
  height: 65px;
  fill: rgb(115, 151, 162);
  transition: all 0.5s ease;
  z-index: 2;
}

.arrowBackground {
  position: absolute;
  top: 0;
  width: 82px;
  height: 80px;
  background-color: rgb(30, 30, 30);
  z-index: 1;
  border: 2px solid rgb(50, 50, 50);
  transition: all 0.5s ease;
}

.sidebar:hover {
  width: 240px;
}

body:has(.sidebar:hover) .arrow {
  transform: rotate(180deg);
  left: 167.5px;
}

body:has(.sidebar:hover) .arrowBackground {
  left: 160px;
}
<section class="sidebar">
  <div class="icons">
    <div>
      <svg class="icon arrow" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
      <div class="arrowBackground"></div>
    </div>
  </div>
</section>

當我將滑鼠懸停在側欄上時,箭頭和側欄需要0.5 秒才能轉換,但箭頭背景類別會立即執行此操作,我不知道為什麼,我希望它需要0.5 秒才能轉換,但我不知道如何會修復它

我嘗試重新排列一些程式碼,但沒有任何效果,我嘗試在 JavaScript 中設定轉換延遲,但仍然不起作用

P粉473363527P粉473363527240 天前3581

全部回覆(1)我來回復

  • P粉226642568

    P粉2266425682024-04-06 00:16:09

    left: 0; 加到 arrowBackground,否則它不知道從什麼位置轉換

    //* Define variables and html elements
    
    const sidebar = document.querySelector('.sidebar');
    const arrow = document.querySelector('.arrow');
    
    //* Add event listeners
    
    sidebar.addEventListener('mouseout', () => {
      arrow.style.transitionDelay = '0s';
      sidebar.style.transitionDelay = '0.05s';
    })
    
    sidebar.addEventListener('mouseover', () => {
      arrow.style.transitionDelay = '0.05s';
      sidebar.style.transitionDelay = '0s';
    })
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    
    body {
      height: 100vh;
      width: 100vw;
      display: flex;
    }
    
    .sidebar {
      position: fixed;
      height: 100vh;
      background-color: black;
      width: 80px;
      transition: all 0.5s ease;
      z-index: 0;
    }
    
    .arrow {
      position: relative;
      left: 7.5px;
      right: 7.5px;
      top: 7.5px;
      width: 65px;
      height: 65px;
      fill: rgb(115, 151, 162);
      transition: all 0.5s ease;
      z-index: 2;
    }
    
    .arrowBackground {
      position: absolute;
      left: 0;
      top: 0;
      width: 82px;
      height: 80px;
      background-color: rgb(30, 30, 30);
      z-index: 1;
      border: 2px solid rgb(50, 50, 50);
      transition: all 0.5s ease;
    }
    
    .sidebar:hover {
      width: 240px;
    }
    
    body:has(.sidebar:hover) .arrow {
      transform: rotate(180deg);
      left: 167.5px;
    }
    
    body:has(.sidebar:hover) .arrowBackground {
      left: 160px;
    }

    回覆
    0
  • 取消回覆