内在小孩的过渡之火
P粉274161593
P粉274161593 2024-04-02 14:38:29
0
1
265

这是最小的可重现示例。 “切换”悬停的过渡结束正在触发(我不想要)并过早隐藏“a”。

要在转换结束后重现单击切换。

我意识到这种情况正在发生,因为切换位于 a 内部(我无法更改它)。有没有办法在切换时停止转换(不检测发生了哪个转换)。

它变得太复杂了,发现transitionend有bug,我宁愿使用setTimeout(这对于css转换来说有点可笑)。

var a = document.querySelector('.a')
a.style.display = 'block'
setTimeout(function() {
  a.classList.add('visible')
}, 50)

document.querySelector('.toggle').addEventListener('click', function() {
  console.log('click')
  a.addEventListener('transitionend', function cb(e) {

    console.log('end')
    a.style.display = 'none'

  })
  a.classList.remove('visible')

})
.a {
  position: relative;
  width: 200px;
  height: 200px;
  background: red;
  left: 200px;
  display: none;
  transition: left 1s;
}

.visible {
  left: 0;
}

.toggle {
  transition: color 0.2s;
}

.toggle:hover {
  color: #fff;
}
<div class="a">
  <div class="toggle">
    toggle
  </div>
</div>

P粉274161593
P粉274161593

全部回复(1)
P粉214176639

使用关键帧动画根本不需要 JavaScript。只需指定最终状态是什么,并确保将填充模式设置为forwards,这样最终状态就不会重置。

.a {
  display: grid;
  font: 2rem sans-serif;
  place-content: center;
  
  position: relative;
  width: 200px;
  height: 200px;
  background: red;
  
  left: 200px;
  opacity: 0;
  animation: slideIn .3s ease-in-out forwards;
}

.toggle {
  transition: color 0.2s;
}

.toggle:hover {
  color: #fff;
}

@keyframes slideIn {  
  to {
    opacity: 1;
    left: 0;
  }
}
toggle
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!