html - 悬停时强制结束 CSS 过渡

标签 html css css-animations css-transitions

默认情况下,如果您停止将鼠标悬停在元素上,则任何属性的转换也将停止。简单的例子:

li {
  position: relative;
  transition: 1s;
  left: 0;
}

li:hover {
  left: 20px;
}
<ul>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
</ul>

尝试从列表的顶部到底部快速运行指针,元素几乎不会移动。我想实现过渡时的行为,一旦开始,就会结束。我正在寻找纯 CSS 解决方案。

最佳答案

不确定这可以通过 css 实现只是,我会使用 Javascript为此,并在转换完成时收听。

let listItems = document.querySelectorAll('li');

listItems.forEach(listItem=>{
  listItem.addEventListener('mouseover', function() {
    this.classList.add('slide-left');
  });
  
  listItem.addEventListener('transitionend', function() {
    this.classList.remove('slide-left');
  });
})
li {
  position: relative;
  transition: 1s;
  left: 0;
}

li:hover, .slide-left {
  left: 20px;
}
<ul>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
    <li>Item</li>
</ul>

关于html - 悬停时强制结束 CSS 过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67777094/

相关文章:

html - 如何在没有来自类 "B"的第一个 div 的情况下查找所有 div 元素中的文本

css - HTML5 SVG 100% 宽度和 100% 视口(viewport)高度?

css - 混合混合模式与动画之间的冲突

html - 关键帧动画仅适用于 chrome/chromium

css - 如何播放反向关键帧动画以悬停?

html - & :focus on input wont change element

html - 使用 JavaScript 重新渲染时阻止 img 标签闪烁

css - 当父位置是相对的时,文本显示在 <div> 之外

CSS margin-left 过渡不起作用

css - 使用多段线剪辑文本