js实现星空效果

摘要:
*{margin;padding;列表样式;}body{background color;}span{width;height;background;position;varscreenH=document.documentElement.clientHeight;i<document.body.appendChild(span);};过渡

js实现星空效果第1张

本次主要是来实现上面的星空效果:在黑色的背景下面,有大小不一的星星在闪烁,当鼠标悬浮时,星星放大并旋转。

首先,我们需要一个大的夜空容器和放星星的容器:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        body{
            background-color: #000;
        }

        span{
            width: 30px;
            height: 30px;
            background: url("images/star.png") no-repeat;
            position: absolute;
            background-size:100% 100%;
           }
    </style>
</head>
<body>
<span></span>
</body>
</html>

js实现星空效果第2张

此时在大背景下有一颗星星,但该星星是固定的,我们需要通过css添加闪烁的效果:

span{
    animation: flash 1s alternate infinite;
}
        
@keyframes flash {
    0%{opacity: 0;}
    100%{opacity: 1;}
}

目标是在不同的地方显示随机大小的星星,所以,我们需要做以下几步操作:

  • 计算出星星可显示位置
  • 循环生成多个星星,即span
  • 利用随机数生成星星的定位值,使其在不同位置显示
  • 利用随机数计算星星的缩放比,在界面中显示不同大小的星星
<script>
    window.onload = function () {
        //屏幕的尺寸
        var screenW = document.documentElement.clientWidth;
        var screenH = document.documentElement.clientHeight;

        //动态创建多个星星
        for(var i=0; i<150; i++){
            var span = document.createElement('span');
            document.body.appendChild(span);

            //位置随机
            var x = parseInt(Math.random() * screenW);
            var y = parseInt(Math.random() * screenH);
            span.style.left = x + 'px';
            span.style.top = y + 'px';

             //大小随机
            var scale = Math.random() * 1.5;
            span.style.transform = 'scale('+ scale + ', ' + scale + ')';
        }
    }
</script>

js实现星空效果第3张

此时界面中已经出现了上面的效果,但是此时所有星星的闪烁频率是相同的,因为在用css3写样式的时候,我们只定义了相同的执行时间,所以我们可以给不同的星星的动画添加不同的延迟时间,这样视觉上就不会出现所有的一起闪烁的效果了。

var rate = Math.random() * 1.5;
span.style.animationDelay = rate + 's';

最后就是添加鼠标悬浮事件了,当鼠标悬浮时,星星旋转并放大,我们也可以用css实现。

span:hover{
    transform: scale(3, 3) rotate(180deg) !important;
    transition: all 1s;
  }

至此,我们就完成了最开始想要的效果了,完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        body{
            background-color: #000;
        }

        span{
            width: 30px;
            height: 30px;
            background: url("images/star.png") no-repeat;
            position: absolute;
            background-size:100% 100%;
            animation: flash 1s alternate infinite;
        }
        
        @keyframes flash {
            0%{opacity: 0;}
            100%{opacity: 1;}
        }

        span:hover{
            transform: scale(3, 3) rotate(180deg) !important;
            transition: all 1s;
        }
    </style>
</head>
<body>
<span></span>
<script>
    window.onload = function () {
        // 屏幕的尺寸
        var screenW = document.documentElement.clientWidth;
        var screenH = document.documentElement.clientHeight;

        // 2. 动态创建多个星星
        for(var i=0; i<150; i++){
            var span = document.createElement('span');
            document.body.appendChild(span);

            //位置随机
            var x = parseInt(Math.random() * screenW);
            var y = parseInt(Math.random() * screenH);
            span.style.left = x + 'px';
            span.style.top = y + 'px';

            //大小随机
            var scale = Math.random() * 1.5;
            span.style.transform = 'scale('+ scale + ', ' + scale + ')';

            //频率随机
            var rate = Math.random() * 1.5;
            span.style.animationDelay = rate + 's';
        }
    }
</script>
</body>
</html>

下载完整详细代码:点这里

免责声明:文章转载自《js实现星空效果》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇web API请求与参数获取DHCP Option43配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring 注解(二)注解工具类

本文转载自Spring 注解(二)注解工具类 导语 首先回顾一下 AnnotationUtils 和 AnnotatedElementUtils 这两个注解工具类的用法: @Test @GetMapping(value = "/GetMapping", consumes = MediaType.APPLICATION_JSON_VALUE) public...

Dijkstra和堆优化

Dijkstra算法 由于我之前一直记的迪杰斯特拉的翻译导致我把dijkstra写成了dijstra……所以下文#define dijstra dijkstra 我以后叫她迪杰克斯歘! Dijskra是用来在有向图或者无向图中寻找任意两个点的最小距离的算法。它相较于spfa不会死掉(spfa死了),但是无法处理带负环的图和求最长路(除非加上一些奇怪的东西,...

CentOS7进程管理systemd详解

  概述: 系统启动过程中,当内核启动完成,后加载根文件系统,后就绪的一些用户空间的服务的管理工作,就交由init进行启动和管理,在CentOS6之前的init的管理方式都类似,相关的内容我们在之前的文章中也做出过介绍。在CentOS7上,init变成了systemd,其管理方式也发生了重大的变化,本章就跟大家欧一起探讨一些关于CentOS7上的sys...

如何调用部署在SSL下的Web Services

java:In my recent experience, this error appears when there is a problem with the trustStore or trustStorePassword. Make sure you have separate keyStore and trustStore files that...

Cesium粒子系统学习

<!DOCTYPE html> <html lang="en"> <head> <!-- Use correct character set. --> <meta charset="utf-8"> <!-- Tell IE to use the latest, best vers...

IE6中location不跳转问题

前天一我遇到个看似很诡异的问题,就是<a href="javascript:void(0);" onclick="window.location.href=url"></a>在IE6下面没反应,不跳转到onclik事件中的"window.location.href"。 当时我们在网上找了篇文章很快就解决了,但是文章中没有说明具体原因在...