iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript利用Canvas实现粒子动画倒计时
  • 676
分享到

JavaScript利用Canvas实现粒子动画倒计时

摘要

目录canvas 粒子动画介绍何为canvas粒子动画是啥canvas定义初始变量初始化canvas和数字文本创建一定数量的点倒计时倒计时文本绘画循环绘制点动画效果图canvas 粒

canvas 粒子动画介绍

何为canvas

canvas是HTML5中新增的一个标签,主要是用于网页实时生成图像并可操作图像,它是用javascript操作的bitmap。

粒子动画是啥

粒子动画就是页面上通过发射许多微小粒子来表示不规则模糊物体,比如:用小圆点来模拟下雪、下雨的效果,用模糊线条模拟黑客帝国背景效果等。

canvas

新建一个html文件,写入canvas标签用于后续展示倒计时

<canvas id="canvas-number"></canvas>
<canvas id="canvas-dots"></canvas>
  • canvas-number 是用于倒计时数字展示
  • canvas-dots 是用于全屏粒子动画展示

加点样式效果看看吧

body {
  background-color: #24282f;
  margin: 0;
  padding: 0;
}

canvas {
  position: absolute;
  top: 0;
  left: 0;
}

#canvas-number {
  width: 680px;
  height: 420px;
}

主要是定义了 canvas-number 画布大小,canvas-dots 画布大小会在JavaScript中定义

定义初始变量

在JavaScript中定义所需的变量

var numberStage,
  numberStageCtx,
  numberStageWidth = 680,
  numberStageHeight = 420,
  numberOffsetX,
  numberOffsetY,

  stage,
  stageCtx,
  stageWidth = window.innerWidth,
  stageHeight = window.innerHeight,
  stageCenterX = stageWidth / 2,
  stageCenterY = stageHeight / 2,

  countdownFrom = 3,
  countdownTimer = 2800,
  countdownRunning = true,

  number,
  dots = [],
  numberPixelCoordinates,
  circleRadius = 2,
  colors = ['61, 207, 236', '255, 244, 174', '255, 211, 218', '151, 211, 226'];
  • numberStage - stageCenterY 这一块主要是定义画布宽高和坐标
  • countdownFrom 从 10 开始倒计时
  • countdownTimer 数字显示的时长
  • countdownRunning 动起来
  • colors 页面上所有粒子颜色
  • 其他的可以自己理解一下哦~

初始化canvas和数字文本

创建一个init函数,里面会包裹初始化内容

function init() {

  // 初始化canvas-number
  numberStage = document.getElementById("canvas-number");
  numberStageCtx = numberStage.getContext('2d');
  
  // 设置文字文本的窗口大小
  numberStage.width = numberStageWidth;
  numberStage.height = numberStageHeight;

  // 初始化canvas-dots和窗口大小
  stage = document.getElementById("canvas-dots");
  stageCtx = stage.getContext('2d');
  stage.width = stageWidth;
  stage.height = stageHeight;

  // 设置一定的偏移量,让文字居中
  numberOffsetX = (stageWidth - numberStageWidth) / 2;
  numberOffsetY = (stageHeight - numberStageHeight) / 2;
}

根据代码中的注释可以了解初始化的内容哦~

初始化完成之后,我们需要直接运行方法

init();

init函数结束之后,马上就需要运行该函数了

创建一定数量的点

for (var i = 0; i < 2240; i++) {
    var dot = new Dot(randomNumber(0, stageWidth), randomNumber(0, stageHeight), colors[randomNumber(1, colors.length)], .3);
    dots.push(dot);
    tweenDots(dot, '', 'space');
}
  • 循环创建点,这里循环给的是个固定数据
  • new Dot 是创建点对象的方法
  • tweenDots 是让点动起来的第三方js
function Dot(x, y, color, alpha) {

  var _this = this;

  _this.x = x;
  _this.y = y;
  _this.color = color;
  _this.alpha = alpha;

  this.draw = function () {
    stageCtx.beginPath();
    stageCtx.arc(_this.x, _this.y, circleRadius, 0, 2 * Math.PI, false);
    stageCtx.fillStyle = 'rgba(' + _this.color + ', ' + _this.alpha + ')';
    stageCtx.fill();
  }

}
  • 通过 x、y坐标定位点
  • 通过随机颜色,让点样式更丰富
  • draw 里面的内容都是canvas画图的方法,具体可参考canvas文档

倒计时

function countdown() {

  // 发送倒计时数字
  drawNumber(countdownFrom.toString());

  // 倒计时为 0 时停止
  if (countdownFrom === 0) {
    countdownRunning = false;
    drawNumber('蜡笔小心');
  }

  countdownFrom--;
}

倒计时结束之后,就可以想干啥干啥了,这里我重新输出了额外的文字

countdownFrom 需要做递减的操作

countdown();

我们需要在页面进入时,直接触发倒计时函数

倒计时文本绘画

每一个倒计时都需要用不同的点去绘制

这里通过循环 让每个文本都有四种颜色绘制

function drawNumber(num) {
  numberStageCtx.clearRect(0, 0, numberStageWidth, numberStageHeight);
  numberStageCtx.fillStyle = "#24282f";
  numberStageCtx.textAlign = 'center';
  numberStageCtx.font = "bold 118px Lato";
  numberStageCtx.fillText(num, 250, 300);

  var ctx = document.getElementById('canvas-number').getContext('2d');
  var imageData = ctx.getImageData(0, 0, numberStageWidth, numberStageHeight).data;
  numberPixelCoordinates = [];
  for (var i = imageData.length; i >= 0; i -= 4) {
    if (imageData[i] !== 0) {
      var x = (i / 4) % numberStageWidth;
      var y = Math.floor(Math.floor(i / numberStageWidth) / 4);
      if ((x && x % (circleRadius * 2 + 3) == 0) && (y && y % (circleRadius * 2 + 3) == 0)) {
        numberPixelCoordinates.push({
          x: x,
          y: y
        });
      }
    }
  }
  fORMNumber();
}

function formNumber() {
  for (var i = 0; i < numberPixelCoordinates.length; i++) {
    tweenDots(dots[i], numberPixelCoordinates[i], '');
  }

  if (countdownRunning && countdownFrom > 0) {
    setTimeout(function () {
      breakNumber();
    }, countdownTimer);
  }
}

function breakNumber() {
  for (var i = 0; i < numberPixelCoordinates.length; i++) {
    tweenDots(dots[i], '', 'space');
  }

  if (countdownRunning) {
    setTimeout(function () {
      countdown();
    }, countdownTimer);
  }

}

循环绘制

function loop() {
  stageCtx.clearRect(0, 0, stageWidth, stageHeight);
  for (var i = 0; i < dots.length; i++) {
    dots[i].draw(stageCtx);
  }
  requestAnimationFrame(loop);
}
loop();

循环绘制,需要进入页面即执行,所以在方法之后马上执行该函数

点动画

在倒计时文本中,我们一直会调用tweenDots方法,就是用于点动画效果的绘制

function tweenDots(dot, pos, type) {
  if (type === 'space') {
    TweenMax.to(dot, (3 + Math.round(Math.random() * 100) / 100), {
      x: randomNumber(0, stageWidth),
      y: randomNumber(0, stageHeight),
      alpha: 0.3,
      ease: Cubic.easeInOut,
      onComplete: function () {
        tweenDots(dot, '', 'space');
      }
    });
  } else {
    TweenMax.to(dot, (1.5 + Math.round(Math.random() * 100) / 100), {
      x: (pos.x + numberOffsetX),
      y: (pos.y + numberOffsetY),
      delay: 0,
      alpha: 1,
      ease: Cubic.easeInOut,
      onComplete: function () {}
    });
  }
}

function randomNumber(min, max) {
  return Math.floor(Math.random() * (max - min) + min);
}
  • 随机移动画布周围的点
  • 让点和文本内容协调展示

效果图

以上就是JavaScript利用Canvas实现粒子动画倒计时的详细内容,更多关于JavaScript Canvas粒子动画倒计时的资料请关注编程网其它相关文章!

--结束END--

本文标题: JavaScript利用Canvas实现粒子动画倒计时

本文链接: https://www.lsjlt.com/news/174718.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript利用Canvas实现粒子动画倒计时
    目录canvas 粒子动画介绍何为canvas粒子动画是啥canvas定义初始变量初始化canvas和数字文本创建一定数量的点倒计时倒计时文本绘画循环绘制点动画效果图canvas 粒...
    99+
    2022-12-09
    JavaScript Canvas粒子动画倒计时 JavaScript  粒子动画倒计时 JavaScript Canvas 倒计时 JavaScript 倒计时
  • canvas如何实现粒子动画
    本篇内容主要讲解“ canvas如何实现粒子动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ canvas如何实现粒子动画”吧!代码如下:<!DOCTY...
    99+
    2024-04-02
  • JavaScript+Canvas实现带跳动效果的粒子动画
    目录前言实现过程运行效果总结前言 用 HTML5 的 Canvas 元素实现一个带有跳动效果的粒子动画。会用到 Canvas 的2D渲染上下文,通过 JavaScript 编写绘图代...
    99+
    2023-03-14
    JavaScript Canvas实现粒子动画 Canvas粒子动画 JavaScript Canvas
  • canvas如何实现粒子喷泉动画
    今天小编给大家分享一下canvas如何实现粒子喷泉动画的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2024-04-02
  • 怎么使用JavaScript+Canvas实现带跳动效果的粒子动画
    这篇“怎么使用JavaScript+Canvas实现带跳动效果的粒子动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使...
    99+
    2023-07-05
  • 使用canvas怎么实现一个粒子动画背景
    使用canvas怎么实现一个粒子动画背景?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建canvas首先需要在需要展示粒子背景的父元素中创建一个canvas标签, 指定wid...
    99+
    2023-06-09
  • JavaScript+Canvas实现文字粒子流特效
    目录动手前思考绘制文字获取像素点位渲染粒子简单的动画效果1、随机选择四个方向中的某一个方向,生成初始坐标2、从初始位置运动到实际位置3、点击文字炸开的特效动手前思考 首先要在特定的位...
    99+
    2023-01-14
    JavaScript Canvas文字粒子流特效 JavaScript Canvas粒子流 JavaScript Canvas
  • js实现酷炫倒计时动画
    本文实例为大家分享了js实现酷炫倒计时动画的具体代码,供大家参考,具体内容如下 前段时间和朋友去音乐餐厅吃饭,中间有个活动,然后看到他们软件公众号H5有个活动开始的倒计时的动画效果,...
    99+
    2024-04-02
  • 如何使用HTML5 Canvas创建动态粒子网格动画
    这篇文章主要为大家展示了“如何使用HTML5 Canvas创建动态粒子网格动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用HTML5 Canvas创建...
    99+
    2024-04-02
  • WPF实现倒计时转场动画效果
    代码如下 一、创建 CountdownTimer.xaml 继承ContentControl代码如下。 using System; using System.Linq; u...
    99+
    2022-11-13
    WPF倒计时动画 WPF 倒计时 WPF 转场 动画
  • css怎么实现倒计时翻页动画
    小编给大家分享一下css怎么实现倒计时翻页动画,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!css实现倒计时翻页动画的方法:首先设置外盒子和内盒子;然后内盒子的移动动画的【animation-timing-function...
    99+
    2023-06-13
  • 使用canvas怎么实现一个粒子动效
    本篇文章为大家展示了使用canvas怎么实现一个粒子动效,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。绘制刻度此例为小时刻度的绘制:表盘上共有12个小时,Math.PI为180&deg;,每...
    99+
    2023-06-09
  • web前端怎么用H5-canvas实现粒子时钟
    这篇文章主要讲解了“web前端怎么用H5-canvas实现粒子时钟”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web前端怎么用H5-canvas实现粒子时...
    99+
    2024-04-02
  • 怎样使用HTML5 Canvas创建动态粒子网格动画
    小编给大家分享一下怎样使用HTML5 Canvas创建动态粒子网格动画,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!添加一个ca...
    99+
    2024-04-02
  • js如何实现酷炫倒计时动画
    这篇“js如何实现酷炫倒计时动画”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“js如何实现酷炫倒计时动画”文章吧。<!...
    99+
    2023-07-02
  • CSS3中怎么实现粒子动画效果
    这期内容当中小编将会给大家带来有关CSS3中怎么实现粒子动画效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。按钮点击粒子动画<div class=&qu...
    99+
    2024-04-02
  • 如何利用JavaScript实现春节倒计时效果
    这篇文章给大家分享的是有关如何利用JavaScript实现春节倒计时效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果预览html部分<!DOCTYPE html><!--geya...
    99+
    2023-06-26
  • Canvas如何实现倒计时效果
    这篇文章主要介绍了Canvas如何实现倒计时效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。HTML:<canvas id...
    99+
    2024-04-02
  • JavaScript如何利用Date实现简单的倒计时
    这篇文章将为大家详细讲解有关JavaScript如何利用Date实现简单的倒计时,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。介绍Date对象,是操作日期和时间的对象。D...
    99+
    2024-04-02
  • 利用JavaScript实现春节倒计时效果(移动端和PC端)
    目录效果预览html部分移动端样式(mobile.css)pc端样式(style.css)js部分效果演示移动端pc端效果预览 html部分 <!DOCTYPE html&g...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作