javascript - 尝试使用原生 Element.animate 方法,但无法添加关键帧百分比

标签 javascript css

有人问了一个相关的问题,我正在尝试让它与实验技术 Element.animate 一起工作。 MDN 文档相当……简陋,技术状态可以说是幼稚的。

https://developer.mozilla.org/en-US/docs/Web/API/Element/animate

我有这个标记:

<div class="container">
<div id="movetxt">left to right, right to left</div>
</div>

只希望 movetxt div 在容器 div 中从左向右移动无限远。

css 是硬编码的,因为我不知道如何获取 div 文本节点的宽度。

.container {
margin: 0 auto;
width: 300px;
border: 1px solid red;
}

#movetxt {
width: 180px;
}

现在,JS

var container = document.querySelector(".container");
var movingText = document.getElementById("movetxt");
 var containerWidth = container.offsetWidth;
var textWidth = movingText.offsetWidth;
var totalDistance = containerWidth - textWidth;
var oneWayDistance = totalDistance / 2; //just establishing the travel distance

现在是实验部分:

 movingText.animate([
// keyframes
{ transform: 'translateX(' + oneWayDistance + 'px)' }, 
{ transform: 'translateX(-' + totalDistance + 'px)' }
], { 
// timing options
duration: 1000,
iterations: Infinity
});

这种方法可行,控制台会抛出一些错误,但它会运行。

但是,我想要这种关键帧格式,举个例子:

  0%   { transform: 'translateX(' + oneWayDistance + 'px)' },
        10%  { transform: 'translateX(-' + totalDistance + 'px)' }

如果我尝试这样做,我会得到 Failed to execute 'animate' on 'Element': Keyframes must be objects, or null or undefined.

fiddle 链接:

http://jsfiddle.net/vdb3ofmL/1135/

一定有某种方法可以将关键帧 % 值放在那里,有人能弄清楚吗?

干杯

最佳答案

您需要考虑文本最初位于容器左边缘的事实,因此您需要将 0 格式转换为 容器宽度 - 文本宽度:

而您要查找的是偏移量 ref

var container = document.querySelector(".container");
var movingText = document.getElementById("movetxt");
var containerWidth = container.offsetWidth;
var textWidth = movingText.offsetWidth;
var totalDistance = containerWidth - textWidth;
var oneWayDistance = totalDistance / 2;
console.log(containerWidth);
console.log(textWidth);
movingText.animate([
  // keyframes
  { transform: 'translateX(0)',offset:0 },  /*0%*/
  {  transform: 'translateX(' + totalDistance + 'px)',offset:0.3 }, /*30%*/
  {  transform: 'translateX(0)',offset:1 } /*100%*/
], { 
  // timing options
  duration: 1000,
  iterations: Infinity
});
.container {
  margin: 0 auto;
  width: 300px;
  border: 1px solid red;
}

#movetxt {
  width: 180px;
  border:1px solid;
}
<div class="container">
<div id="movetxt">left to right, right to left</div>
</div>

关于javascript - 尝试使用原生 Element.animate 方法,但无法添加关键帧百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53422105/

相关文章:

javascript - 如何检索和显示 slider 范围值?

javascript - svg 无法在 IE 中正常显示工具提示,但在 Chrome 中正常显示

javascript - 使用 angularjs 自动完成

javascript - 轮询工作多长时间

javascript - Ajax 在 Safari 中加载图像时不考虑 srcset

html - 如何使带有溢出的 ul 适合绝对 div

html - 如何让文本刷新到表格单元格的顶部/底部

javascript - “引用错误: ReactRedux is not defined

css - 如何使用:has in sass

html - 如何在 bootstrap 5 中使用卡片制作完美的圆形图像?