js实现星星闪特效

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

  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日

相关文章

  • 解析Javascript中大括号“{}”的多义性

    解析Javascript中大括号“{}”的多义性 大括号“{}”在Javascript中有多种含义,具体如下: 对象字面量 在Javascript中,大括号“{}”表示一个对象字面量。对象字面量是一种对象的表示方法,通过大括号{ }来包含一个或多个键值对。键值对中间使用“:”分隔,键值对之间使用“,”分隔。 示例: let obj = { name: ‘To…

    JavaScript 2023年5月28日
    00
  • JavaScript中的稀疏数组与密集数组[译]

    JavaScript中的数组可以是密集的,也可以是稀疏的。密集数组即为连续的数组元素,稀疏数组表示有些元素被省略了。本文将详细讲解JavaScript中稀疏数组和密集数组的概念和行为。 什么是稀疏数组? 稀疏数组是指数组元素具有不连续性,或者说中间有空洞的数组。在稀疏数组中,一些元素是不存在的,我们可以用下标访问到的元素即表示存在的,没法访问到的元素则被视为…

    JavaScript 2023年5月27日
    00
  • JS实现倒计时(天数、时、分、秒)

    JS实现倒计时是一种常见的前端实现方式,在各类网站和应用中均有广泛应用。下面是JS实现倒计时的完整攻略: 步骤一:准备页面结构 首先需要在HTML页面中准备好倒计时所需的HTML结构,包括倒计时DOM元素的容器,每个倒计时数字占据的DOM元素等。 例如,下面是一个简单的倒计时页面结构示例: <div class="countdown-wrap…

    JavaScript 2023年5月27日
    00
  • JS操作JSON要领详细总结

    JS操作JSON要领详细总结 什么是JSON JSON是一种轻量级的数据交换格式,是JavaScript的一种子集。JSON格式具有很好的兼容性和可读性,广泛应用于前端与后端之间的数据传递及存储。 JSON语法规则 JSON数据由键值对组成,键和值使用冒号分隔,每个键值对之间使用逗号分隔,最外层需用花括号{}包裹。 { "name": &…

    JavaScript 2023年5月27日
    00
  • js使用cookie实现记住用户名功能示例

    使用cookie可以保存用户的登录状态,可以实现记住用户名的功能。下面是使用JavaScript实现记住用户名的完整攻略: 1. 创建登录表单 首先需要在页面上创建一个登录表单,包含用户名和密码的输入框、记住密码的复选框和提交按钮。 <form id="login-form"> <label>用户名:</la…

    JavaScript 2023年6月11日
    00
  • 将JSON字符串转换成Map对象的方法

    要将JSON字符串转换成Map对象,可以使用Java中的JSON库,例如FastJson、Gson等。以下是将JSON字符串转换成Map对象的详细攻略。 准备工作 首先需要引入JSON库的依赖,以FastJson为例,Maven的依赖配置如下: <dependency> <groupId>com.alibaba</groupId…

    JavaScript 2023年5月27日
    00
  • Javascript Global eval() 函数

    以下是关于JavaScript Global对象中eval()函数的完整攻略,包括两个示例说明。 JavaScript Global对象中的eval()函数 JavaScript Global对象中的eval()函数用于将一个字符串作为JavaScript代码进行执行。eval()函数可以将一个字符串解析为JavaScript代码,并执行该代码。eval()…

    JavaScript 2023年5月11日
    00
  • 微信小程序接入腾讯云验证码的方法步骤

    下面就为你详细讲解“微信小程序接入腾讯云验证码的方法步骤”的完整攻略。 一、前置准备 1.1 注册腾讯云账户 首先需要前往腾讯云官网注册一个账号,如果已有腾讯云账户则可以直接登录。 1.2 在腾讯云上开通验证码服务 在腾讯云控制台中,搜索并进入“验证码”服务,按照提示开通并配置相应的参数。 1.3 在小程序后台获取小程序 appid 在微信公众平台的小程序管…

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