飘落的闪光

作者: kerush | 来源:发表于2017-04-12 10:50 被阅读39次
前端入坑纪 07

转瞬又是周三,单休的宝宝表示再干三天,又有得休息了。怎么感觉有点自我安慰的赶脚?

今天把项目中一个飘飘的效果做好了,就是代码真有点长。讲真,这个效果在手机上确实有点卡,也不晓得是不是我目前水平的关系。唉,漫漫web前端路,不知其所止......

某时刻截图

一等大事:项目链接

HTML 结构
    <div class="wrap">
       ![](spark.png)
       ![](spark.png)
       ![](spark.png)
       ![](spark.png)
       ![](spark.png)
       ![](spark.png)
       ![](spark.png)
       ![](spark.png)
    </div>

页面里就是8张图片,不晓得为什么图片标签发布后全变了。大家脑补都是html 的图片标签

CSS 结构
        html,
        body {
            height: 100%
        }
        
        * {
            margin: 0;
            padding: 0
        }
        
        .wrap {
            background-color: #2F67A8;
            height: 100%
        }
        
        .sparks {
            height: 50px;
            transition-property: top left;
            transition: 5s linear;
            position: fixed;
        }
        
        div.wrap img.sparks:nth-child(1) {
            animation: rots 5s linear infinite alternate .4s
        }
        
        div.wrap img.sparks:nth-child(2) {
            animation: rots 5s linear infinite alternate .7s
        }
        
        div.wrap img.sparks:nth-child(3) {
            animation: rots1 5s linear infinite alternate 1.1s
        }
        
        div.wrap img.sparks:nth-child(4) {
            animation: rots1 5s linear infinite alternate 1.7s
        }
        
        div.wrap img.sparks:nth-child(5) {
            animation: rots 5s linear infinite alternate .6s
        }
        
        div.wrap img.sparks:nth-child(6) {
            animation: rots 5s linear infinite alternate .35s
        }
        
        div.wrap img.sparks:nth-child(7) {
            animation: rots1 5s linear infinite alternate 1.1s
        }
        
        div.wrap img.sparks:nth-child(8) {
            animation: rots1 5s linear infinite alternate 1.3s
        }
        
        @keyframes rots {
            0% {
                transform: rotateZ(38deg)
            }
            50% {
                transform: rotateZ(0)
            }
            100% {
                transform: rotateZ(-38deg)
            }
        }
        
        @keyframes rots1 {
            0% {
                transform: rotateZ(-58deg)
            }
            50% {
                transform: rotateZ(0)
            }
            100% {
                transform: rotateZ(58deg)
            }
        }

css 给每个图片添加不同的延时,不同的转角度数,我这只写了两个度数效果

简单示意
JavaScript 结构
        var winH = window.innerHeight,
            winW = window.innerWidth,
            i = j = 0,
            Otarget = document.getElementsByClassName("sparks");
        // 变换元素的位置坐标
        function chanPos(aimer, a, b) {
            Otarget[aimer].style.left = a + "px";
            Otarget[aimer].style.top = b + "px";
        }
        // a到b之间的整数
        function ranges(a, b) {
            return Math.floor(Math.random() * (b - a) + a)
        }
        // 整体效果
        function sparkMov(aimer) {
            // 获取元素对象的当前位置属性
            var lefta = parseInt(Otarget[aimer].style.left),
                topb = parseInt(Otarget[aimer].style.top);
            // 重启过渡的效果
            Otarget[aimer].style.transitionProperty = "all";
            // 用三元表达式使50%机率加减随机数,决定了向左还是向右移动
            var movPos = ranges(1, 10) < 5 ? ranges(20, 70) : (-ranges(20, 70));
            //元素left位置的随机取值,以及超过屏幕宽度时,减小left
            switch (true) {
                case (lefta < 0):
                    lefta = lefta + ranges(50, 80);
                    break;
                case (lefta > winW):
                    lefta = lefta - ranges(50, 80);
                    break;
                default:
                    lefta = lefta + movPos;
            }
            //元素top位置的随机取值,以及超过屏幕高度时,回到屏幕的最上部
            switch (true) {
                case (topb < 0):
                    topb = topb + 50;
                    break;
                case (topb > winH):
                    lefta = ranges(10, winW);
                    topb = -ranges(60, 70);
                    // 飘至底部时去除过渡的效果,免得元素在页面上出现往上飘的效果
                    Otarget[aimer].style.transitionProperty = "none";
                    break;
                default:
                    topb = topb + ranges(50, 100);
            }

            //将算好的随机位置付给aimer元素对象
            chanPos(aimer, lefta, topb);
        }
        // 页面加载时,给定初始随机位置
        for (i; i < Otarget.length; i++) {
            // 这里是闭包的形式读到循环中对应的i,否则都是循环最后的那个值
            (function() {
                chanPos(i, ranges(25, winW - 30), -ranges(60, 155))
            })(i);
        }
        //每隔5000ms变更位置
        function roler() {
            for (j = 0; j < Otarget.length; j++) {
                // 这里是闭包的形式读到循环中对应的j
                (function() {
                    sparkMov(j)
                })(j)
            }
        }
        setInterval(roler, 5000);

基本结合示意图和javascript里的备注,应该很好理解了,加油~~~

相关文章

  • 飘落的闪光

    前端入坑纪 07 转瞬又是周三,单休的宝宝表示再干三天,又有得休息了。怎么感觉有点自我安慰的赶脚? 今天把项目中一...

  • 飘落的梦不再飘落

    齐帆齐微课 我的文学梦, 看到这个题目, 感觉很耀眼 ,就像一道金光闪现在我的眼前 ,又似乎是久违的朋友,既熟悉又...

  • 旋转木马

    嘴上假装情愿地说着再见 一边漫步,一边缓缓飘落的秋叶 熠熠闪光散落的回忆开始舞动 在旋转中悄悄变幻的景色 每个快乐...

  • 飘落

    一颗孤零零的心飘落了 显得有些落寞 和孤寂 那颗心是封闭的 除了心的主人 没有人有钥匙 可是 钥匙早已丢失 不知埋...

  • 飘落

    闲来无事 马路旁的自行车上看着没看完的故事 旁边的小槐树上飘落一片树叶 树叶只有一小半变黄大部分还是绿色 而之所以...

  • 飘落

    一个人,游走于异乡的城市 风也妖黄,雨也妖黄 雨也迷茫,心也迷茫 一朵花,飘落面前 风也馨香,雨也馨香 灯也明靓,...

  • 飘落

    这片叶子 还在墨绿 却等待着 风给予的飘落 它在 享受着 在风中 摇曳生姿的自由 却不知道 自由的以后 是碾作成泥...

  • 飘落

    所有的花瓣都下落不明 只要有一瓣收入书页 与错过贴近 这个月份就成功了

  • 飘落

    人哪!” 中年男人叫了一声。 他转动身子,左右看了看。旁边书架前站两个人,一个还戴着手套,...

  • 飘落

    回忆,注入心底 如一片落叶悄无声息 却总会在夜深人静 飘落在心弦 那景,那情,那悟 依然还在 忘不了,是不想忘记 ...

网友评论

    本文标题:飘落的闪光

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