HTML之2022新年快乐虎年大吉给对象的不一样礼物

Posted AI悦创

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTML之2022新年快乐虎年大吉给对象的不一样礼物相关的知识,希望对你有一定的参考价值。

你好,我是悦创。

个人博客首发:https://www.aiyc.top/2128.html

效果截图:

在线体验:

https://github.aiyc.top/YearTiger2022/

源码:

https://github.com/AndersonHJB/YearTiger2022

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  <style>
    body 
      margin: 0;
      padding: 0;
      overflow: hidden;
    

    .city 
      width: 100%;
      position: fixed;
      bottom: 0px;
      z-index: 100;
    

    .city img 
      width: 100%;
    
  </style>
  <title>2022虎年快乐</title>
</head>
<body onselectstart="return false">
<canvas id='cas' style="background-color:rgba(0,5,24,1)">浏览器不支持canvas</canvas>
<div class="city"><img src="city.png" alt=""/></div>
<img src="moon.png" alt="" id="moon" style="visibility: hidden;"/>
<div style="display:none">
  <div class="shape">2022新年快乐</div>
  <div class="shape">虎年大吉</div>
  <div class="shape">ヾ(^∀^)ノ</div>
</div>
<audio src="boom.mp3" preload="auto"></audio>
<audio src="boom.mp3" preload="auto"></audio>
<audio src="boom.mp3" preload="auto"></audio>
<audio src="boom.mp3" preload="auto"></audio>
<audio src="boom.mp3" preload="auto"></audio>
<audio src="boom.mp3" preload="auto"></audio>
<audio src="shotfire.mp3" preload="auto"></audio>
<audio src="shotfire.mp3" preload="auto"></audio>
<audio src="shotfire.mp3" preload="auto"></audio>
<script>
  var canvas = document.getElementById("cas");
  var ocas = document.createElement("canvas");
  var octx = ocas.getContext("2d");
  var ctx = canvas.getContext("2d");
  ocas.width = canvas.width = window.innerWidth;
  ocas.height = canvas.height = window.innerHeight;
  var bigbooms = [];

  window.onload = function() 
    initAnimate()
  

  function initAnimate() 
    drawBg();

    lastTime = new Date();
    animate();
  

  var lastTime;
  function animate() 
    ctx.save();
    ctx.globalCompositeOperation = 'destination-out';
    ctx.globalAlpha = 0.1;
    ctx.fillRect(0, 0, canvas.width, canvas.height);
    ctx.restore();

    var newTime = new Date();
    if (newTime - lastTime > 200 + (window.innerHeight - 767) / 2) 
      var random = Math.random() * 100 > 2 ? true : false;
      var x = getRandom(canvas.width / 5, canvas.width * 4 / 5);
      var y = getRandom(50, 200);
      if (random) 
        var bigboom = new Boom(getRandom(canvas.width / 3, canvas.width * 2 / 3), 2, "#FFF", x: x, y: y);
        bigbooms.push(bigboom)
      
      else 
        var bigboom = new Boom(getRandom(canvas.width / 3, canvas.width * 2 / 3), 2, "#FFF", 
          x: canvas.width / 2,
          y: 200
        , document.querySelectorAll(".shape")[parseInt(getRandom(0, document.querySelectorAll(".shape").length))]);
        bigbooms.push(bigboom)
      
      lastTime = newTime;
    

    stars.foreach(function() 
      this.paint();
    )

    drawMoon();

    bigbooms.foreach(function(index) 
      var that = this;
      if (!this.dead) 
        this._move();
        this._drawLight();
      
      else 
        this.booms.foreach(function(index) 
          if (!this.dead) 
            this.moveTo(index);
          
          else if (index === that.booms.length - 1) 
            bigbooms.splice(bigbooms.indexOf(that), 1);
          
        )
      
    );

    raf(animate);
  

  function drawMoon() 
    var moon = document.getElementById("moon");
    var centerX = canvas.width - 200, centerY = 100, width = 80;
    if (moon.complete) 
      ctx.drawImage(moon, centerX, centerY, width, width)
    
    else 
      moon.onload = function() 
        ctx.drawImage(moon, centerX, centerY, width, width)
      
    
    var index = 0;
    for (var i = 0; i < 10; i++) 
      ctx.save();
      ctx.beginPath();
      ctx.arc(centerX + width / 2, centerY + width / 2, width / 2 + index, 0, 2 * Math.PI);
      ctx.fillStyle = "rgba(240,219,120,0.005)";
      index += 2;
      ctx.fill();
      ctx.restore();
    

  

  Array.prototype.foreach = function(callback) 
    for (var i = 0; i < this.length; i++) 
      if (this[i] !== null) callback.apply(this[i], [i])
    
  

  var raf = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) 
        window.setTimeout(callback, 1000 / 10);
      ;

  canvas.onclick = function() 
    var x = event.clientX;
    var y = event.clientY;
    var bigboom = new Boom(getRandom(canvas.width / 3, canvas.width * 2 / 3), 2, "#FFF", x: x, y: y);
    bigbooms.push(bigboom)
  

  var Boom = function(x, r, c, boomArea, shape) 
    this.booms = [];
    this.x = x;
    this.y = (canvas.height + r);
    this.r = r;
    this.c = c;
    this.shape = shape || false;
    this.boomArea = boomArea;
    this.theta = 0;
    this.dead = false;
    this.ba = parseInt(getRandom(80, 200));

    var audio = document.getElementsByTagName("audio");
    for (var i = 0; i < audio.length; i++) 
      if (audio[i].src.indexOf("shotfire") >= 0 && (audio[i].paused || audio[i].ended)) 
        audio[i].play();
        break;
      
    
  
  Boom.prototype = 
    _paint: function() 
      ctx.save();
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.r, 0, 2 * Math.PI);
      ctx.fillStyle = this.c;
      ctx.fill();
      ctx.restore();
    ,
    _move: function() 
      var dx = this.boomArea.x - this.x, dy = this.boomArea.y - this.y;
      this.x = this.x + dx * 0.01;
      this.y = this.y + dy * 0.01;

      if (Math.abs(dx) <= this.ba && Math.abs(dy) <= this.ba) 
        if (this.shape) 
          this._shapBoom();
        
        else this._boom();
        this.dead = true;
      
      else 
        this._paint();
      
    ,
    _drawLight: function() 
      ctx.save();
      ctx.fillStyle = "rgba(255,228,150,0.3)";
      ctx.beginPath();
      ctx.arc(this.x, this.y, this.r + 3 * Math.random() + 1, 0, 2 * Math.PI);
      ctx.fill();
      ctx.restore();
    ,
    _boom: function() 
      var fragNum = getRandom(100, 300);
      var style = getRandom(0, 10) >= 5 ? 1 : 2;
      var color;
      if (style === 1) 
        color = 
          a: parseInt(getRandom(128, 255)),
          b: parseInt(getRandom(128, 255)),
          c: parseInt(getRandom(128, 255))
        
      

      var fanwei = fragNum;
      var audio = document.getElementsByTagName("audio");
      for (var i = 0; i < audio.length; i++) 
        if (audio[i].src.indexOf("boom") <

以上是关于HTML之2022新年快乐虎年大吉给对象的不一样礼物的主要内容,如果未能解决你的问题,请参考以下文章

虎年开工大吉

新年来到,特此制作一款烟花特效,预祝大家 虎虎生威,虎年大吉,生龙活虎

AI贺新年,开发者的虎年这样过才有意思

2022虎年大吉

春节快到了,来写个烟花动效吧

2022虎年的期望和新年Flag