【问题标题】:CSS transition width/position with long duration issue持续时间较长的 CSS 过渡宽度/位置问题
【发布时间】:2015-08-27 10:03:10
【问题描述】:

假设我们想要宽度/位置的过渡

当使用较长的持续时间时,会出现不希望的行为,因为在其余操作中计时函数将从零开始

    #test {
      border: solid 1px;
      width: 100px;
      height: 50px;
      transition: width 10s linear;
    }
    #test:hover {
      width: 1000px;
      transition: width 10s linear;
    }
<div id="test"></div>

在过渡期间将 div 重新悬停在任何地方时,说在中间,它将在 10s 上进行过渡,但对于 500px 而不是原始设置,更糟糕的是,最后 10 像素需要 10 秒。

有什么解决方法或者我应该使用 jQuery animate 函数?

【问题讨论】:

  • 我没看到问题。
  • @AndreaLigios 问题是,如果你重新悬停<div>,当它的宽度为600px(而不是最初的100px)时,新的过渡将再次需要10秒,但仅适用于400px因此,过渡似乎较慢。我相信 OP 想要的是在过渡时保持稳定的速度,无论发生的时间如何。
  • @TasosK。好的,但这并没有发生在我身上!你用的是哪种浏览器??编辑:好的,我已经使用 Chrome 复制了它。如前所述,它在 Firefox 上不是这样的
  • @AndreaLigios 你是对的。它在 Firefox 和 Chrome 中的工作方式不同。我猜在 Firefox 中它可以按照 OP 的要求工作
  • Firefox、IE 和 Safari 按我的意愿工作,问题似乎只在 Chrome 中,我想我会保持原样,直到 Chrome 像其他人一样做 谢谢大家

标签: html css google-chrome transition


【解决方案1】:

如果您不介意编写动画脚本,这里有一个解决方案。 本质上,您必须知道覆盖剩余宽度的剩余时间。

当然,你可以让这个函数在任何元素上使用,你也可以传入想要的宽度,但这超出了这个范围。

$("#test").on("mouseover", function(){
  var $el = $(this);  
  var time = 10000 - $el.width()*10; // This is the actual remaining animation time

  $el.stop().animate({"width": "1000px"}, time, "linear");
});

$("#test").on("mouseout", function(){
  var $el = $(this);
  var time = $el.width()*10; // This is the actual remaining animation time
  
  $el.stop().animate({"width": "100px"}, time, "linear");
});
#test {
  border: solid 1px;
  width: 100px;
  height: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="test"></div>

【讨论】:

  • 是的,可以完美运行,但是正如您在 cmets 中看到的那样,除了 Chrome 之外,纯 CSS 也可以正常工作,此外,我以宽度为例,但我实际上愿意做的是动画一个背景位置,但正如 link 所说,它不太支持跨平台,将来可能不会支持
  • 我明白了。我想我想提供一个临时解决方案,直到您可以得到更好的东西或让 Chrome 实现它。但是,它并不完全适用于您的用例。祝你好运!
猜你喜欢
  • 2019-10-28
  • 1970-01-01
  • 2014-02-17
  • 2016-09-20
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
相关资源
最近更新 更多