js实现星星闪特效

yizhihongxing

首先介绍一下实现星星闪特效的基本思路,整个流程分为以下几步:

  1. 随机生成 N 个星星的位置和大小
  2. 再随机为每个星星设置一个动画延迟时间
  3. 使用 CSS3 动画为每个星星设置闪烁效果
  4. 可以通过 js 实现控制整个星空的暂停和继续

接下来,我将逐步详细讲解。

1. 随机生成 N 个星星的位置和大小

首先需要使用 js 随机生成一组星星的位置和大小,这可以使用循环来实现。可以控制星星的数量,随机生成坐标和大小的代码如下:

let starNum = 50;  // 星星的数量
let stars = [];  // 用来保存所有星星的数组

for(let i=0; i<starNum; i++){
  // 创建一个对象,用来保存星星的坐标和大小信息
  let star = {};
  // 随机生成星星的横坐标和纵坐标
  star.x = Math.floor(Math.random()*window.innerWidth);
  star.y = Math.floor(Math.random()*window.innerHeight);
  // 随机生成星星的大小,在 10~40 像素之间
  star.size = Math.floor(Math.random()*30 + 10);
  stars.push(star);
}

2. 为每个星星设置动画延迟时间

为了让每个星星的闪烁效果不一样,可以使用随机数为每颗星星指定一个动画延迟时间。代码如下:

for(let i=0; i<starNum; i++){
  // 随机生成星星的动画延迟时间
  stars[i].delay = Math.floor(Math.random()*10) + "s";
}

3. 使用 CSS3 动画为每个星星设置闪烁效果

这里可以使用 CSS3 中的 animation 属性来实现动画效果。为了让每个星星有所不同的闪烁效果,我们可以在 CSS 中指定每个星星的动画延迟时间。代码如下:

.star {
  position: absolute;
  background-color: #fff;
  border-radius: 50%;
  animation: star-shine 2s infinite ease-in-out;
}

.star:nth-child(1) {
  width: 20px;
  height: 20px;
  left: 100px;
  top: 170px;
  animation-delay: 1s;
}

.star:nth-child(2) {
  width: 30px;
  height: 30px;
  left: 220px;
  top: 300px;
  animation-delay: 2s;
}

...

/* 自定义动画 */
@keyframes star-shine {
  0% {
    opacity: 0;
    transform: scale(0.1);
  }
  5% {
    opacity: 1;
  }  
  50% {
    opacity: 0.6;
  }
  100% {
    opacity: 0;
    transform: scale(1.2);
  }        
}

在上面的代码中,可以看到 .star 样式表示每个星星的基础样式。animation 属性指定了该元素使用 star-shine 作为动画,每次动画持续时间为 2 秒,一直重复播放。同时,为了让每个星星的动画效果稍有不同,可以为每个星星单独设置 animation-delay 属性。

最后是 @keyframes 定义的 star-shine 动画效果,即让星星逐渐变亮、再逐渐变暗的闪烁过程。

4. 控制整个星空的暂停和继续

最后,可以使用 js 来控制整个星空是暂停还是继续播放的状态。这可以通过控制每个星星的 animation-play-state CSS 属性来实现。代码如下:

let isPlaying = true;  // 控制星空的继续或暂停

// 获取所有的星星元素
let starElements = document.querySelectorAll('.star');

// 暂停或继续触发的事件
function starToggle(){
  for(let i=0; i<starElements.length; i++){
    if(isPlaying){
      starElements[i].style.animationPlayState = 'paused';
    }else{
      starElements[i].style.animationPlayState = 'running';
    }
  }
  isPlaying = !isPlaying;  // 控制状态的变化
}

// 注册暂停或继续事件
let controlEl = document.querySelector('#control');
controlEl.addEventListener('click', starToggle);

需要注意的是,为了控制整个星空的动画状态,需要为每个星星设置相同的 animation-duration 属性。这样,所有星星的动画时长才能保持一致,从而实现整个星空的统一动画效果。

示例1:https://codepen.io/NovikovDS/pen/Vwvxyoo

示例2:https://codepen.io/Ivan989/pen/EapMrG

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现星星闪特效 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现

    要实现检测页面装载完毕的功能,可以使用Ext.onReady函数。该函数是ExtJS框架提供的,用于在页面元素完全加载之后执行给定的函数。 具体步骤如下: 引入ExtJS的库文件。在HTML页面的标签中加入以下代码: <script type="text/javascript" src="path/to/extjs/ext…

    JavaScript 2023年6月10日
    00
  • nodejs中实现阻塞实例

    实现阻塞实例需要用到Node.js中的核心模块fs和util。其中,fs模块用于读取文件内容,util模块中的promisify方法用于将回调函数转化为返回Promise对象的函数。 下面是一个完整的实现阻塞实例的攻略,包含两条示例说明: 1. 读取文件并输出内容 1.1 创建文件 首先,需要创建一个文件example.txt,并向其中写入一些内容。 ech…

    JavaScript 2023年5月28日
    00
  • Element el-tag标签图文实例详解

    Element el-tag标签图文实例详解 简介 el-tag是基于Element UI框架下的标签组件,用于展示标签或标记并进行分类,常用于项目中的文章标签或商品类别标签等。 布局样式 通过样式控制可以实现不同样式的标签展示,包括标签颜色、大小、形状等。以下是一些常用的样式: 标签颜色:el-tag默认颜色为灰色,可以通过type属性设置标签的颜色,可选…

    JavaScript 2023年6月10日
    00
  • JavaScript中Date.toSource()方法的使用教程

    JavaScript中Date.toSource()方法的使用教程 方法简介 Date.toSource() 方法返回当前对象(Date对象)的字符串表示形式,用于与eval() 方法结合使用,以重新生成该对象。这种情况对调试和分析非常有用。 语法结构 dateObj.toSource() 参数说明 该方法没有参数。 返回值 返回一个字符串,表示该对象。 示…

    JavaScript 2023年6月10日
    00
  • js分解url参数(面向对象-极简主义法应用)

    下面是关于“js分解url参数(面向对象-极简主义法应用)”的完整攻略。 1.什么是URL参数 URL参数是指在URL中传递的键值对,以“&”符号分隔。例如以下URL中的参数是name=Lucy和age=18 http://www.example.com?name=Lucy&age=18 2.为什么要分解URL参数 在Web应用程序中,处理U…

    JavaScript 2023年5月19日
    00
  • js实现简易购物车功能

    下面详细讲解如何通过JS实现简易购物车功能: 1. 功能介绍 一个简单的购物车功能需要实现以下基本功能: 能添加/删除商品到购物车 能显示购物车列表及各商品的信息(如商品名称、封面、价格等) 能统计计算出购物车列表中所有商品的总价值 针对这些功能,我们需要通过JS来实现相应的代码处理。 2. 实现步骤 在实现购物车代码前,需要先明确数据结构和界面设计。我们需…

    JavaScript 2023年6月11日
    00
  • 魔鬼字典 JavaScript 笔记 代码比较多乱

    作为网站的作者,我很高兴为您讲解“魔鬼字典JavaScript笔记代码比较多乱”的攻略。下面,我将为您分别介绍该笔记的结构和示例代码的解读。 一、笔记结构 该笔记使用了Markdown格式编写,并通过代码块对示例代码进行了展示。具体来说,其结构如下: 标题 每篇笔记的顶部都有一个标题,用于概括该笔记的主题,方便读者快速理解。 前言 在笔记主体部分之前,通常会…

    JavaScript 2023年5月19日
    00
  • 微信小程序 云开发模糊查询实现解析

    “微信小程序 云开发模糊查询实现解析” 是一篇介绍如何使用云开发实现小程序模糊查询功能的攻略。本攻略分为以下几个部分: 环境准备及项目创建 数据库集合创建并初始化数据 小程序代码实现模糊查询功能 常见问题及解决方案 环境准备及项目创建 在使用小程序云开发之前,你需要先在微信开发者工具中开启云开发功能,并创建一个新的小程序云开发项目。 数据库集合创建并初始化数…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部