javascript - 带有 Javascript 问题的 Css 动画

标签 javascript html css animation 3d

我已经在这几个小时了,我已经在整个网络上进行了检查,并且发现了一些有用的东西,但我似乎无法得到我想要的结果。

我正在尝试使用 CSS 动画制作一个简单的游戏。我将屏幕分成 9 个相等的 div,每行 3 行。我希望你从中间的 block 开始,当你单击另一个 div 中的按钮时,你的“船”会转到那个 div 并停留在那里,直到单击另一个按钮.

我已经设法让飞船移动了,但是,当我尝试为其添加旋转以使其具有实际飞机的“滚动”效果时,它会在设定的旋转 Angular 通过动画俯冲炸弹。我希望游戏沿 z 轴滚动以获得伪 3D 外观。有点像旧的自上而下的垂直滚动射击游戏,除了 3D 风格。

animation-name : cssAnimation;
   animation-duration : 1s;
   animation-iteration-count : 1;
   animation-timing-function : ease;
   animation-fill-mode :;
   -webkit-animation-name : cssAnimation;
   -webkit-animation-duration : 1s;
   -webkit-animation-iteration-count : 1;
   -webkit-animation-timing-function : ease;
   -webkit-animation-fill-mode :;
   -ms-animation-name : cssAnimation;
   -ms-animation-duration : 1s;
   -ms-animation-iteration-count : 1;
   -ms-animation-timing-function : ease;
   -ms-animation-fill-mode :;
}
@-webkit-keyframes cssAnimation {
   0% {
       -webkit-transform: rotate(0deg) scale(1) skew(0deg) translateX(0%);
   }
   75% {
       -webkit-transform: rotate(15deg) scale(1) skew(0deg) translateX(-225%);
   }
   100% {
       -webkit-transform: rotate(0deg) scale(1) skew(0deg) translateX(-225%);
   }
}

http://jsfiddle.net/ryanhagz/5GAX7/

最佳答案

您需要做的实际上是围绕动画定义中的时间和规则进行更改。首先,如果一个属性在动画中没有变化,那么就没有必要声明它,所以可以在定义中省略skewscale等属性.

此外,您的代码应该重新安排为:

-webkit-animation: cssAnimation 1s cubic-bezier(.13,.38,.12,.97);
-ms-animation: cssAnimation 1s cubic-bezier(.13,.38,.12,.97);
animation: cssAnimation 1s cubic-bezier(.13,.38,.12,.97);

在代码中,我去掉了未声明的规则(fill-mode)和你有默认数字的规则。顺便说一句,iteration-count 为 1。最后我对它们重新排序,因为没有前缀的应该排在最后。如果您不知道,大多数浏览器解析 CSS 的方式是它们可以解释的最后一条规则将是它们将遵守的规则。例如,在 Google Chrome 29 中,未加前缀的版本可能会工作,并且会被使用,因为它是标准版本,但由于您之后有 -webkit- CSS,Chrome 解析器将使用 -webkit-。每当您编写带有 vendor 前缀的 CSS 时,请记住这一点。

我将函数的时序更改为三次贝塞尔曲线时序,在我看来这让它看起来更好一些。我用来玩时间的网站是由 Lea Verou 制作的,你可以 use it尝试其他时间。

最后,我将您之前的定义更改为:

@-webkit-keyframes cssAnimation {
    0%   { -webkit-transform: rotate(0deg) translateX(0%);    }
    25%  { -webkit-transform: rotate(-15deg);                 }
    100% { -webkit-transform: rotate(0deg) translateX(-225%); }
}

上面只是-webkit-版本为了节省空间,其他的只是加上了合适的前缀。我所做的是告诉动画首先旋转船,然后将其发送到目的地并同时将其旋转回去。计时功能使它看起来在开始时走得很快,在结束时走得更慢。如果你想稍微延迟旋转并让它在此之前开始移动,你只需要在它开始旋转之前插入一些平移,这只是在动画定义中插入更多断点的问题。

最终的 CSS 在 this fiddle 中.

我希望我的回答有助于解释我所做的一切。玩得开心动画!

关于javascript - 带有 Javascript 问题的 Css 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17562227/

相关文章:

javascript - 继承类的原型(prototype)对象如何等于 JavaScript 中原始类的新实例?

javascript - 将元数据添加到 Html5 文件上传

javascript - 在 D3 径向树中自定义 SVG 文本

html - 我无法在 Bootstrap DIV 的底部获取图像

javascript - 如何通过单击按钮(jQuery)推进所选选项

css - 向左溢出?

html - 在容器中使用内联 block 将边距应用于 div

c# - 带映射插件的 knockout View 模型

javascript - 在 Google 折线图中的线注释之上添加图像

javascript - href ="#"保留鼠标悬停属性的替代方案