【问题标题】:Smooth movement, and possibly move JS to CSS3平滑移动,并可能将 JS 移动到 CSS3
【发布时间】:2013-07-06 12:00:17
【问题描述】:

我有一个小工件。

HTML:

<div id="it">X</div>

CSS:

#it {
    background: blue;
    width: 40px;
    text-align: center;
    color: white;
    padding: 10px 0;
    border: solid 1px black;
    border-radius: 25px;
    position: absolute;
    left: 100px;
    top: 100px;
}

JS:

$('#it').animate({
    left: '+=100',
    top: '+=100'
}, 400, function() {
        $(this).animate({
        top: '-=100'
    }, 400, function() {
        $(this).animate({
            left: '-=100',
            top: '+=100'
        }, 400, function() {
            $(this).animate({
                top: '-=100'
            }, 400);
        });
    });
});

上述所有内容都放在this jsfiddle

我需要什么帮助:

  1. 循环 JS。此外,我几乎可以肯定可以做一些事情来简化重复的嵌套代码。
  2. 使运动平稳。即,使物体以单条曲线飞行,沿着“倾斜 8”形状,而不是 4 条直线。
  3. 如果可能,摆脱 JS 并用 CSS3 替换它。

我的项目也不一定需要,但如果有一种方法可以沿途旋转对象,使其始终朝向它前进的方向,那就太棒了。就像您从高处观看赛车一样。

【问题讨论】:

  • Geo 请阅读我对我的回答的评论。

标签: jquery css animation css-transitions


【解决方案1】:

我已经将你的 JavaScript 转换为 CSS3:here it is for you

它是循环的并使用 CSS3,可在 IE 10、chrome、firefox 和 safari 中运行。我没有 Opera,所以我无法测试,IE 9 及以下版本需要使用 CSS3 shiv。

@-webkit-keyframes move {
0%   {top:  100px;
      left: 100px;}
25%  {top:  250px;
      left: 250px;}
50%  {top:  100px;
      left: 250px;}
75%  {top:  250px;
      left: 100px;}
100% {top:  100px;
      left: 100px;}
}

该代码替换了您拥有的 JavaScript;它分段创建动画。虽然它只是动画语法的 webkit 部分,但为了确保您涵盖所有基础,不要忘记标准规范动画语法的 @-moz-@keyframes

-webkit-animation:move 5s infinite;

这个 CSS3 规则告诉解析器应该使用哪个元素使用声明的动画。

可以使用 transform css 声明来旋转项目,我将尽快处理并更新它。到目前为止,我已经获得了可以在每个浏览器中工作的转换。此外,我按照您的要求将整个动画倾斜了一个角度,使其看起来像一个无穷大符号。如果没有复杂的数学运算或高级使用过渡和额外的动画,现在很难获得平滑的拐角转弯,我不太确定如何正确地做到这一点。我会看看能做些什么。

【讨论】:

  • 我已经更新了我的 jsfiddle 以在 mozilla、IE 10、chrome 和 safari 上工作
  • 轮换是你想要的还是不同的?顺便说一下,此时的平滑度是做不到的。不过,我会看看如何以不同的方式完成。
  • 循环很好,我也喜欢轻松。没看到轮回是的,我担心平滑度可能需要再次返回 JS(以及一些困难的 sin()cos() 数学函数)。不过谢谢。
  • 看看 chrome,我正在添加其他浏览器支持。
  • 好吧,看看jsfiddle.net/nbatothemax/amJ2e/7我在答案中链接了它并更新了那个链接,因为它之前在更新6上,但是直到stackoverflow允许每个人都看到它,你可以从这个链接是我在上面给你的。
【解决方案2】:

试试这个:http://jsfiddle.net/Tn7UE/1/ 我添加了transform:rotate(); 来改变方向。和setInterval for 循环。

【讨论】:

  • 这个对js很有用,但是设置间隔在css中可以很方便的完成
  • 绝对是轮换+1!唯一剩下的就是平滑它,使其弯曲角落。
  • 另外,箭头的好主意 - 这样您就可以看到当前方向!
  • 同意。不过,一旦我放慢了计时器的速度,旋转就很容易了。
猜你喜欢
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
相关资源
最近更新 更多