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架构localStorage特殊场景下二次封装操作

    那么以下是对JavaScript架构localStorage特殊场景下二次封装操作的具体攻略: 什么是localStorage? localStorage 是一种可以在浏览器本地存储数据的 API。它可以通过 key-value 对的形式保存数据,每个 key-value 对都会被浏览器独立存储,并且不受域名和浏览器限制。 为什么需要二次封装操作? loca…

    JavaScript 2023年6月11日
    00
  • javascript实现最长公共子序列实例代码

    下面是关于“javascript实现最长公共子序列实例代码”的完整攻略。 完整任务说明 本任务要求实现一个javascript代码,用于寻找两个字符串的最长公共子序列。 功能要求 输入两个字符串,比如”abcdfg”和”abdfg”,程序需要输出它们的最长公共子序列。 实现的算法需要支持对长度为m和n的字符串进行快速计算,时间复杂度需要为 O(m*n)。 背…

    JavaScript 2023年5月28日
    00
  • javascript常用正则表达式汇总

    Javascript常用正则表达式汇总 正则表达式是一种强大的工具,可以用来匹配、查找和替换文本中的模式。在JavaScript中,也可以通过正则表达式来完成字符串的相关操作。这里汇总了JavaScript中常用的正则表达式,希望能够帮助大家更好地处理字符串。 匹配数字 要匹配数字,可以使用\d来表示数字字符,加上一个可选的+或*表示匹配一次或者多次。下面是…

    JavaScript 2023年6月1日
    00
  • 基于JS脚本语言的基础语法详解

    基于JS脚本语言的基础语法详解 介绍 JavaScript(简称JS)是一种脚本语言,常用于在Web浏览器中编程,用于处理交互式的前端逻辑。随着Node.js的流行,JS也在后端得到了广泛应用。本文将详细讲解JS的基础语法,包括变量、运算符、控制流、函数、对象等内容。 变量 在JS中,可以使用关键词var、let、const声明变量。其中,var是ES5引入…

    JavaScript 2023年5月27日
    00
  • js通过八个点 拖动改变div大小的实现方法

    下面是“JS通过八个点拖动改变div大小的实现方法”的完整攻略。 1. 需求分析 我们需要实现一个可以通过拖动八个点来改变一个 div 元素的大小的功能。最好的做法是使用原生 JavaScript 实现,而不是使用第三方类库,这样我们可以更好地理解背后的实现原理。 2. HTML 结构 首先,我们需要准备一个 div 元素,用于展示效果。具体的实现方法是通过…

    JavaScript 2023年6月11日
    00
  • vue中路由跳转的方式有哪些你知道吗

    当我们使用Vue.js来构建单页面应用程序时,路由跳转是不可避免的。Vue.js提供了多种方式来实现路由跳转,下面是其中几种常用的方式: 1. 基于vue-router的声明式导航 为了使用vue-router,我们首先需要将其安装到我们的应用程序中,并且创建一个router实例,来管理我们的路由。然后,我们可以在Vue组件中使用声明式导航来实现路由跳转。 …

    JavaScript 2023年6月11日
    00
  • JavaScript流程控制(分支)

    好的!首先,让我们先确定一下“JavaScript流程控制(分支)”的范畴。在JavaScript中,流程控制主要有三种,分别是分支结构、循环结构和跳转结构。而“JavaScript流程控制(分支)”指的是通过条件判断,执行不同代码路径的流程控制方式。 在JavaScript中,常用的条件判断有if…else和switch两种。下面我们将介绍这两种方法的…

    JavaScript 2023年5月27日
    00
  • 浅谈Vue单页面做SEO的四种方案

    方案一:使用预渲染 预渲染是一种将 SPA 应用在服务器端对页面进行完全渲染,然后将渲染好的 HTML 文件返回给客户端的技术。适用于 SEO 需求比较简单的情况。具体步骤如下: 安装插件 prerender-spa-plugin ,并在 webpack 配置中进行设置; 对于每个需要预渲染的路由,设置它们对应的 meta 信息,这些 meta 熟悉在 he…

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