美文网首页
如何使用@keyframe实现左右摇晃动画

如何使用@keyframe实现左右摇晃动画

作者: Oo晨晨oO | 来源:发表于2017-11-23 18:20 被阅读9次

最近使用tower的时候, 发现tower的提醒铃铛(当有新消息的时候)会左右摇动, 于是就打算试一试keyFrame动画看看是否可以实现这个效果.

实现代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试动画</title>
    <style>
        .rotate{
            display: block;
            margin: 100px auto;
            line-height: 30px;
            text-decoration: none;
            text-align: center;
            color: white;
            width: 120px;
            height: 30px;
            background-color: #999999;
            transform-origin: top;
            animation:rotate 5s infinite;
            -webkit-animation:rotate 5s infinite;
        }

        @keyframes rotate
        {
            0%   {
                -ms-transform:rotate(0deg); /* IE 9 */
                -moz-transform:rotate(0deg); /* Firefox */
                -webkit-transform:rotate(0deg); /* Safari and Chrome */
                -o-transform:rotate(0deg); /* Opera */
                transform:rotate(0deg);
            }
            25%  {-ms-transform:rotate(8deg); /* IE 9 */
                -moz-transform:rotate(8deg); /* Firefox */
                -webkit-transform:rotate(8deg); /* Safari and Chrome */
                -o-transform:rotate(8deg); /* Opera */
                transform:rotate(8deg);}
            38%  {-ms-transform:rotate(-6deg); /* IE 9 */
                -moz-transform:rotate(-6deg); /* Firefox */
                -webkit-transform:rotate(-6deg); /* Safari and Chrome */
                -o-transform:rotate(-6deg); /* Opera */
                transform:rotate(-6deg);}
            50%  {-ms-transform:rotate(6deg); /* IE 9 */
                -moz-transform:rotate(6deg); /* Firefox */
                -webkit-transform:rotate(6deg); /* Safari and Chrome */
                -o-transform:rotate(6deg); /* Opera */
                transform:rotate(6deg);}
            62%  {-ms-transform:rotate(-4deg); /* IE 9 */
                -moz-transform:rotate(-4deg); /* Firefox */
                -webkit-transform:rotate(-4deg); /* Safari and Chrome */
                -o-transform:rotate(-4deg); /* Opera */
                transform:rotate(-4deg);}
            75%  {-ms-transform:rotate(2deg); /* IE 9 */
                -moz-transform:rotate(2deg); /* Firefox */
                -webkit-transform:rotate(2deg); /* Safari and Chrome */
                -o-transform:rotate(2deg); /* Opera */
                transform:rotate(2deg);}
            100% {-ms-transform:rotate(0deg); /* IE 9 */
                -moz-transform:rotate(0deg); /* Firefox */
                -webkit-transform:rotate(0deg); /* Safari and Chrome */
                -o-transform:rotate(0deg); /* Opera */
                transform:rotate(0deg);}
        }

        @-moz-keyframes rotate /* Firefox */
        {
            0%   {
                -ms-transform:rotate(0deg); /* IE 9 */
                -moz-transform:rotate(0deg); /* Firefox */
                -webkit-transform:rotate(0deg); /* Safari and Chrome */
                -o-transform:rotate(0deg); /* Opera */
                transform:rotate(0deg);
            }
            25%  {-ms-transform:rotate(8deg); /* IE 9 */
                -moz-transform:rotate(8deg); /* Firefox */
                -webkit-transform:rotate(8deg); /* Safari and Chrome */
                -o-transform:rotate(8deg); /* Opera */
                transform:rotate(8deg);}
            38%  {-ms-transform:rotate(-6deg); /* IE 9 */
                -moz-transform:rotate(-6deg); /* Firefox */
                -webkit-transform:rotate(-6deg); /* Safari and Chrome */
                -o-transform:rotate(-6deg); /* Opera */
                transform:rotate(-6deg);}
            50%  {-ms-transform:rotate(6deg); /* IE 9 */
                -moz-transform:rotate(6deg); /* Firefox */
                -webkit-transform:rotate(6deg); /* Safari and Chrome */
                -o-transform:rotate(6deg); /* Opera */
                transform:rotate(6deg);}
            62%  {-ms-transform:rotate(-4deg); /* IE 9 */
                -moz-transform:rotate(-4deg); /* Firefox */
                -webkit-transform:rotate(-4deg); /* Safari and Chrome */
                -o-transform:rotate(-4deg); /* Opera */
                transform:rotate(-4deg);}
            75%  {-ms-transform:rotate(2deg); /* IE 9 */
                -moz-transform:rotate(2deg); /* Firefox */
                -webkit-transform:rotate(2deg); /* Safari and Chrome */
                -o-transform:rotate(2deg); /* Opera */
                transform:rotate(2deg);}
            100% {-ms-transform:rotate(0deg); /* IE 9 */
                -moz-transform:rotate(0deg); /* Firefox */
                -webkit-transform:rotate(0deg); /* Safari and Chrome */
                -o-transform:rotate(0deg); /* Opera */
                transform:rotate(0deg);}
        }

        @-webkit-keyframes rotate /* Safari 和 Chrome */
        {
            0%   {
                -ms-transform:rotate(0deg); /* IE 9 */
                -moz-transform:rotate(0deg); /* Firefox */
                -webkit-transform:rotate(0deg); /* Safari and Chrome */
                -o-transform:rotate(0deg); /* Opera */
                transform:rotate(0deg);
            }
            25%  {-ms-transform:rotate(8deg); /* IE 9 */
                -moz-transform:rotate(8deg); /* Firefox */
                -webkit-transform:rotate(8deg); /* Safari and Chrome */
                -o-transform:rotate(8deg); /* Opera */
                transform:rotate(8deg);}
            38%  {-ms-transform:rotate(-6deg); /* IE 9 */
                -moz-transform:rotate(-6deg); /* Firefox */
                -webkit-transform:rotate(-6deg); /* Safari and Chrome */
                -o-transform:rotate(-6deg); /* Opera */
                transform:rotate(-6deg);}
            50%  {-ms-transform:rotate(6deg); /* IE 9 */
                -moz-transform:rotate(6deg); /* Firefox */
                -webkit-transform:rotate(6deg); /* Safari and Chrome */
                -o-transform:rotate(6deg); /* Opera */
                transform:rotate(6deg);}
            62%  {-ms-transform:rotate(-4deg); /* IE 9 */
                -moz-transform:rotate(-4deg); /* Firefox */
                -webkit-transform:rotate(-4deg); /* Safari and Chrome */
                -o-transform:rotate(-4deg); /* Opera */
                transform:rotate(-4deg);}
            75%  {-ms-transform:rotate(2deg); /* IE 9 */
                -moz-transform:rotate(2deg); /* Firefox */
                -webkit-transform:rotate(2deg); /* Safari and Chrome */
                -o-transform:rotate(2deg); /* Opera */
                transform:rotate(2deg);}
            100% {-ms-transform:rotate(0deg); /* IE 9 */
                -moz-transform:rotate(0deg); /* Firefox */
                -webkit-transform:rotate(0deg); /* Safari and Chrome */
                -o-transform:rotate(0deg); /* Opera */
                transform:rotate(0deg);}
        }

        @-o-keyframes rotate /* Opera */
        {
            0%   {
                -ms-transform:rotate(0deg); /* IE 9 */
                -moz-transform:rotate(0deg); /* Firefox */
                -webkit-transform:rotate(0deg); /* Safari and Chrome */
                -o-transform:rotate(0deg); /* Opera */
                transform:rotate(0deg);
            }
            25%  {-ms-transform:rotate(8deg); /* IE 9 */
                -moz-transform:rotate(8deg); /* Firefox */
                -webkit-transform:rotate(8deg); /* Safari and Chrome */
                -o-transform:rotate(8deg); /* Opera */
                transform:rotate(8deg);}
            38%  {-ms-transform:rotate(-6deg); /* IE 9 */
                -moz-transform:rotate(-6deg); /* Firefox */
                -webkit-transform:rotate(-6deg); /* Safari and Chrome */
                -o-transform:rotate(-6deg); /* Opera */
                transform:rotate(-6deg);}
            50%  {-ms-transform:rotate(6deg); /* IE 9 */
                -moz-transform:rotate(6deg); /* Firefox */
                -webkit-transform:rotate(6deg); /* Safari and Chrome */
                -o-transform:rotate(6deg); /* Opera */
                transform:rotate(6deg);}
            62%  {-ms-transform:rotate(-4deg); /* IE 9 */
                -moz-transform:rotate(-4deg); /* Firefox */
                -webkit-transform:rotate(-4deg); /* Safari and Chrome */
                -o-transform:rotate(-4deg); /* Opera */
                transform:rotate(-4deg);}
            75%  {-ms-transform:rotate(2deg); /* IE 9 */
                -moz-transform:rotate(2deg); /* Firefox */
                -webkit-transform:rotate(2deg); /* Safari and Chrome */
                -o-transform:rotate(2deg); /* Opera */
                transform:rotate(2deg);}
            100% {-ms-transform:rotate(0deg); /* IE 9 */
                -moz-transform:rotate(0deg); /* Firefox */
                -webkit-transform:rotate(0deg); /* Safari and Chrome */
                -o-transform:rotate(0deg); /* Opera */
                transform:rotate(0deg);}
        }
    </style>
</head>
<body>
    <a href="#" class="rotate">测试专用</a>
</body>
</html>

其实过程就两步:

  1. 首先在选择器里面设置animation: 动画名 动画时间 重复次数
  2. 在@keyframe中实现动画, 可以使用from to, 也可以使用百分比

有关transform变换的知识, 可以点击这里

旋转动画的中心点

要注意的一点是, tower动画铃铛是以铃铛根部为中心点来回摇晃的, 所以我们要更改旋转中心点, 即: transform-origin: top;

有关旋转中心点的知识, 可以看这里

过于冗长的浏览器兼容代码

可以看到, 要兼容不同浏览器, 要写很多很多重复的兼容代码, 我们可以使用postcss这个工具来进行css后处理, 即我们可以随意使用最新的css语法, 并且可以只写最标准的语法, 兼容性交给postcss去做
详细postcss用法可以点击这里

相关文章

网友评论

      本文标题:如何使用@keyframe实现左右摇晃动画

      本文链接:https://www.haomeiwen.com/subject/thftbxtx.html