JavaScript 结合 CSS3 实现动态星星海背景特效
本文详细介绍如何使用 JavaScript 配合 CSS3 的 @keyframes 和 animation 属性,结合 UnderScore.js 库,动态生成并控制屏幕上的星星元素。通过获取视口尺寸、随机设置透明度、缩放及动画延迟,实现逼真的星星闪烁效果,适合前端交互背景开发参考。
星星海特效实现概述
本文通过具体代码示例,展示如何利用 JavaScript 实现动态的星星海背景特效,供读者参考学习。
核心技术知识点
实现该特效涉及以下核心技术点:
首先,利用 CSS 的 @keyframes 规则定义关键帧动画,并通过 animation 属性调用该自定义动画。
其次,使用 opacity 属性控制元素的透明度,其取值范围从 0.0(完全透明)到 1.0(完全不透明)。
第三,应用 CSS 中的 transform 属性来改变元素的形态或位置。
第四,通过 animation-delay 属性设定动画开始前的等待时间。
第五,获取当前屏幕的可视区域尺寸,以确定星星生成的范围。
var 宽 = document.documentElement.clientWidth;
var 高 = document.documentElement.clientHeight;
第六,使用 JavaScript 动态创建 DOM 节点。
第七,将创建的节点追加到指定的父元素中。
appendChild()
第八,借助 UnderScore.js 库提供的 API(通过 _ 调用)来简化随机数生成等操作。
运行效果与代码实现
以下是该特效的实际运行效果展示。

具体实现代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="UnderScore.js"></script>
<style>
*{margin: 0;padding-top: 0}
body{background-color: #000}
span{
width: 30px;
height: 30px;
background: url("star.png") no-repeat;
position: absolute;
background-size: contain;
animation: flash 1s alternate infinite;
}
@keyframes flash{
0%{opacity: 0}
25%{opacity: 0.25}
50%{opacity: 0.5}
75%{opacity: 0.75}
100%{opacity: 1}
}
span:hover{
transform: scale(3, 3) rotate(180deg) !important;
transition: all 1s;
}
</style>
</head>
<body>
<script>
window.onload = function (ev) {
// 1. 求出屏幕尺寸
var screenWidth = document.documentElement.clientWidth;
var screenHeight = document.documentElement.clientHeight;
// 2. 动态创建10颗星星
for (var i = 0; i < 200; i++) {
// 2.1 创建星星
var span = document.createElement('span');
document.body.appendChild(span);
// 2.2 随即坐标
var x = parseInt(_.random(0, screenWidth));
var y = parseInt(_.random(0, screenHeight));
span.style.left = x +'px';
span.style.top = y + 'px';
// 2.3 随机缩放
var scale = _.random(0, 1.5);
span.style.transform = 'scale('+scale+','+scale+')';
// 2.4 频率
var rate = _.random(0, 1.5);
span.style.animationDelay = rate + 's';
}
}
</script>
</body>
</html>
以上就是本文的全部内容,希望对读者有所帮助,欢迎继续支持本站。
D3.js 处理大规模数据点的性能优化策略
2026-11-05 15:37:25
JS实现网页摄像头实时扫码:结合getUserMedia与jsQR教程
2026-11-05 15:27:28
D3.js v5 迁移到 v7 的 API 变更与注意事项
2026-11-05 11:57:17
使用 animate.js 实现多元素协同的序列动画
2026-11-04 22:27:53
JS拖拽排序时怎么添加平滑动画效果?FLIP技术实战
2026-11-04 10:12:22
