前端开发跳动的心:transform+transition动画实例

游戏开发 前端 后端
c   游戏前端开发
游戏前端开发薪资

学了transition和transform,总在想到底应该做一个什么样的例子来练习这两个新的知识点,无意中看到某一位博主的笔记《纯CSS3实现一颗跳动的红心》,点进去运行了一下,感觉还不错,于是想想不如用transition和transform做一颗跳动的心,费了一番心思,终于实现了效果,算是自己第一个真正意义上的实例笔记吧。

html+css制作思路:
1、两个div,使用transform的rotate和origin控制其翻转和翻转基点,
2、使用border-radius控制div的变形,
3、结合left等css样式拼接两个div,实现心形。

js思路:
1、使用外层div的样式变化来控制内部两个div的变化(我这么做的理由是:可以避免使用js单独为两个div添加className,然后在计时器里又需要做判断等等复杂操作,不如改变外层div的类名,把内部小div的样式改变交给css来做)
2、使用setTimeout控制外层div的类名变换,然后使用定时器setInterval来设置心跳的循环。

代码如下:
代码片段 1

<!DOCTYPE html>
<html lang=”en”>
    <head>
        <meta charset=”UTF-8″ />
        <title>测试css3动画</title>
        <style type=”text/css”>
            .box,
            .box2 {
                width: 320px;
                height: 272px;
                margin: 50px auto;
                position: relative;
            }
            .one,
            .two {
                width: 150px;
                height: 250px;
                border-radius: 75px 75px 0 0;
                background: red;
                position: absolute;
                left: 83px;
                -webkit-transition: 500ms all;
                -moz-transition: 500ms all;
                -ms-transition: 500ms all;
                transition: 500ms all;
            }
            .one {
                -webkit-transform: rotate(-45deg);
                -moz-transform: rotate(-45deg);
                -ms-transform: rotate(-45deg);
                transform: rotate(-45deg);
                left: 50px;
            }
            .two {
                -webkit-transform: rotate(45deg);
                -moz-transform: rotate(45deg);
                -ms-transform: rotate(45deg);
                transform: rotate(45deg);
                left: 122px;
            }
            .box2 div {
                width: 200px;
                height: 300px;
                border-radius: 100px 100px 0 0;
            }
            .box2 div.one {
                -webkit-transform: rotate(-49deg);
                -moz-transform: rotate(-49deg);
                -ms-transform: rotate(-49deg);
                transform: rotate(-49deg);
                left: 19px;
            }
            .box2 div.two {
                left: 112px;
                -webkit-transform: rotate(48deg);
                -moz-transform: rotate(48deg);
                -ms-transform: rotate(48deg);
                transform: rotate(48deg);
            }
        </style>
    </head>
    <body>
        <div class=”box” id=”box”>
            <div class=”one”></div>
            <div class=”two”></div>
        </div>
    </body>
</html>
<script type=”text/javascript”>
    var oDiv = document.getElementById(‘box’)
    var sDiv = oDiv.getElementsByTagName(‘div’)
    var timer = null
    var timer1 = null
    var timer2 = null
    timer = setInterval(function() {
        addClass()
    }, 1000)
    function addClass() {
        clearInterval(timer2)
        oDiv.className = ‘box2’
        timer1 = setTimeout(function() {
            oDiv.className = ‘box’
        }, 300)
    }
</script>

运行可以见心形跳动正常。

有点小地方可能需要解释一下:
为什么使用setTimeout来控制外层的div的类名变化?
虽然没有太多的概念,但是我知道,某些事件或者是系统函数在执行之后会有一些内存上或者其他的某某滞留(大概的意思),所以最好能实现某一次事件行为执行之后能顺利消除,那么使用这样的逻辑:改变类名之前先把前面的setTimeout定时器取消,那么就能保证定时器不会滞留,不会累加,确保不会浪费浏览器资源。

仅仅是一次简单的尝试,如果达人看到且愿意指点一番,感激不尽{:1_472:}

» 本文来自:前端开发者 » 《前端开发跳动的心:transform+transition动画实例》
» 本文链接地址:https://www.rokub.com/7546.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
分享到: 更多 (0)

评论 抢沙发