【问题标题】:Why is the duration of transition always fixed with webkit browsers?为什么 webkit 浏览器的过渡持续时间总是固定的?
【发布时间】:2014-10-23 15:52:53
【问题描述】:

我一直在玩 CSS 过渡并制作了这个 JSFiddle

transition 属性目前受到所有主要浏览器的支持,并且也不需要供应商前缀(但我已将它们包含在我的小提琴中)。我还在W3C site 上搜索了transition-duration 的一些已知问题,但没有找到。

HTML

<div class="foo"></div>

CSS

.foo {
    background: #4FC093;
    display: block;
    width: 600px;
    height: 600px;
    box-shadow: 0 0 300px inset;
    margin: 0 auto;
    border-radius: 50%;
    cursor: pointer;
    transition: all 10s ease;
}

.foo:hover {
    width: 100px;
    height: 100px;
    box-shadow: 0 0 50px inset; 
}

Google Chrome / webkit 浏览器的问题

如果我在过渡结束之前移除光标,它会通过 (10s) 过渡属性中定义的持续时间返回到初始状态。

例如:
我在 1s 播放过渡后移除了光标,它通过 10s 回到了初始状态。

在 Firefox 和 IE10+ 中,变回初始状态的持续时间与实际过渡播放时间的持续时间相同

要查看它的实际效果,请将鼠标悬停在 .foo div 上,并在过渡开始时快速移除光标。
[ PS:10s 的持续时间可能很无聊,但我已经这样做了清楚地观察问题。 ]

【问题讨论】:

  • 据我所知,这是 Chrome 的新行为。他们还刚刚推出了 M37 的更新,所以这可能是该版本的一个新问题......绝对很奇怪。
  • 我使用的是 Windows,无法在 Safari 上进行测试。但是最新版本的 Opera 也给出了这种奇怪的输出。
  • FWIW,我刚刚在 Safari 上进行了测试,它具有相同的行为。
  • @NicoO 感谢您的链接。阅读段落。因此,“预期的行为是第二​​个过渡更短”。会成为标准吗?然后 webkit 不遵循标准。但是.. 我可以看到它通过了该链接中的大部分测试。
  • 我不想污染 cmets 以获得更好的,但是是的:我认为 Chrome 没有显示出预期的行为。我们可以讨论什么是正确的行为,因为保证转换运行时也是一个很好的特性。但这在这一点上肯定感觉不自然。我认为 Firefox 在这里做得更好。显示的行为可以成为可选的计时功能,但希望不是默认的。

标签: css google-chrome webkit css-transitions


【解决方案1】:

您可以添加第二个过渡以使所有人的“还原”动画更快(如果这适用于您想要的)。

请参阅下面的 updated fiddle here 和部分 CSS:

.foo {
    /* default properties */
    transition: all 1s ease;/* this transition will apply when user exits hover state */
}

.foo:hover {
    /* properties for hover */
    transition: all 10s ease;/* this transition will apply when user hovers */
}

【讨论】:

  • 但它会恢复到 1s 内的初始状态,这是不希望的。
  • 这个问题是,如果你将鼠标悬停在它一直进去,那么它只需要 1 秒就可以恢复到原来的大小。这只是扭转了问题。
  • 是的 - 这是一个在某些人的实现中可能有用的解决方案。我会看看是否有办法利用它来提供您想要的确切解决方法。
【解决方案2】:

我以前没有经历过这种情况,但我想我可以看到正在发生的事情。

如果我正确理解您的问题,这是因为当您最初悬停并在转换完成之前移除时,chrome 认为它必须在同一时间段内转换一个小的变化,因此它看起来更慢。

例如,如果您将鼠标悬停在直径为 600 像素的圆圈上 1 秒,并且直径达到 500 像素(只是弥补),那么当您停止悬停时,它只需在 10 秒内向后扩展 100 像素,而不是它正在计算的完整 500 像素在初始悬停时。因此速度降低。

做到这一点的可靠方法是使用 Javascript 而不是 CSS。这样您就可以在鼠标离开时计算其当前大小,从而保持过渡速度恒定。

【讨论】:

  • 我不想用JS。我实际上是在为 CSS3 而战;)它应该是标准化的,并且应该在所有不同的浏览器中都一样。
  • 我同意,我会尽可能地尝试使用 CSS 而不是 JS。您可以只使用 JS 来更改过渡时间。将实际过渡留给 CSS。
  • 我发现这个链接可能有助于在 DOM 中设置时间? programering.com/a/MjM4YzMwATg.html
猜你喜欢
  • 2014-10-11
  • 1970-01-01
  • 2013-12-19
  • 2014-09-30
  • 2013-02-18
  • 2021-01-06
  • 2020-01-29
  • 1970-01-01
  • 2011-12-12
相关资源
最近更新 更多