【问题标题】:Halting a translate3d transition停止 translate3d 过渡
【发布时间】:2013-09-05 15:25:45
【问题描述】:

我有一个滚动文本 div,我希望用户能够通过单击按钮来暂停和恢复。以下是我创建过渡的方式:

words.style.webkitTransform = "translate3d(0px, -"+(27 * (words.children.length-4))+"px, 0px)";
words.style.webkitTransition = ((27 * words.children.length)/speed)+"s all linear";

我尝试在暂停功能中将转换设置为“无”,但这只会使 div 滚动回原来的位置。这相当于执行 translate3d(0px, 0px, 0px)。有没有一种方法可以简单地暂停当前动画,或者我必须以某种方式测量当前的过渡位置?

更新:这是一个 jsfiddle:http://jsfiddle.net/VAgXF/1/

【问题讨论】:

  • 我最好的选择是删除转换属性并计算当前位置。然后将过渡设置为恢复时的剩余部分。
  • 如果不使用过渡,而是使用动画,则可以使用 animationstate = paused。这样可以吗?

标签: javascript html css css-transitions css-transforms


【解决方案1】:

根据实际示例进行编辑

Try this demo instead

您可以在您的情况下使用WebKitCSSMatrix 来获取translate3d 值。我不知道它的所有选择器,但exfy,所以这段代码有效,因为你不改变z

var words = document.getElementById("words");
var speed = 10;
words.style.webkitTransform = "translate3d(0px, -"+(27 * (words.children.length))+"px, 0px)";
words.style.webkitTransition = ((27 * words.children.length)/speed)+"s all linear";

var paused = false;
document.getElementById("button").onclick = function() {
  if(!paused) {
    var translated3D = new WebKitCSSMatrix(window.getComputedStyle(words, null).webkitTransform);
    words.style.webkitTransform = "translate3d(" + translated3D.e + "px, " + translated3D.f + "px, " + 0 + "px)";
    paused = true;
    button.innerHTML = "Start";
  } else {
    paused = false;
    button.innerHTML = "Stop";
    words.style.webkitTransform = "translate3d(0px, -"+(27 * (words.children.length))+"px, 0px)";
    words.style.webkitTransition = ((27 * words.children.length)/speed)+"s all linear";
  }
}

话虽如此,我会避免使用transform3d 来处理一些简单的问题,但它会使问题复杂化。

【讨论】:

  • 我现在在这个问题中有一个 jsfiddle,我还在这里用你的解决方案创建了一个:jsfiddle.net/VAgXF/4。我得到了你的向下漂移的效果。
  • 是的,做到了。据我所知,似乎工作得很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
相关资源
最近更新 更多