HTML情人节漂浮爱心代码

技术

点击关注 | 愿 朝朝暮暮

picture.image

LIGHT SNOW

逛逛主页

写在前面

picture.image

picture.image

情人节快乐吖!

本期内容不需要任何软件,只要有个浏览器,就可以打开哦~

情人节爱心代码

0 1

完整代码

以下代码可直接复制使用,如无法运行,可在文末下载代码哦~


                
<!doctype html>
                
<html>
                

                
<head>
                
  <meta charset="utf-8">
                
  <title>情人节快乐!</title>
                

                
  <style>
                
    body {
                
      overflow: hidden;
                
      margin: 0;
                
      background: pink;
                
    }
                

                
    h1 {
                
      position: fixed;
                
      top: 40%;
                
      left: 0;
                
      width: 100%;
                
      text-align: center;
                
      transform: translateY(-50%);
                
      font-family: 'Love Ya Like A Sister', cursive;
                
      font-size: 40px;
                
      color: red;
                
      padding: 0 20px;
                
    }
                

                
    @media (min-width:1200px) {
                
      h1 {
                
        font-size: 100px;
                
      }
                
    }
                
</style>
                

                
</head>
                

                
<body>
                

                
  <canvas></canvas>
                
  <h1>情人节快乐!</h1>
                

                
  <script>
                
    var canvas = document.querySelector("canvas"),
                
      ctx = canvas.getContext("2d");
                

                
    var ww, wh;
                

                
    function onResize() {
                
      ww = canvas.width = window.innerWidth;
                
      wh = canvas.height = window.innerHeight;
                
    }
                

                
    ctx.strokeStyle = "red";
                
    ctx.shadowBlur = 25;
                
    ctx.shadowColor = "hsla(0, 100%, 60%,0.5)";
                

                
    var precision = 100;
                
    var hearts = [];
                
    var mouseMoved = false;
                
    function onMove(e) {
                
      mouseMoved = true;
                
      if (e.type === "touchmove") {
                
        hearts.push(new Heart(e.touches[0].clientX, e.touches[0].clientY));
                
        hearts.push(new Heart(e.touches[0].clientX, e.touches[0].clientY));
                
      }
                
      else {
                
        hearts.push(new Heart(e.clientX, e.clientY));
                
        hearts.push(new Heart(e.clientX, e.clientY));
                
      }
                
    }
                

                
    var Heart = function (x, y) {
                
      this.x = x || Math.random() * ww;
                
      this.y = y || Math.random() * wh;
                
      this.size = Math.random() * 2 + 1;
                
      this.shadowBlur = Math.random() * 10;
                
      this.speedX = (Math.random() + 0.2 - 0.6) * 8;
                
      this.speedY = (Math.random() + 0.2 - 0.6) * 8;
                
      this.speedSize = Math.random() * 0.05 + 0.01;
                
      this.opacity = 1;
                
      this.vertices = [];
                
      for (var i = 0; i < precision; i++) {
                
        var step = (i / precision - 0.5) * (Math.PI * 2);
                
        var vector = {
                
          x: (15 * Math.pow(Math.sin(step), 3)),
                
          y: -(13 * Math.cos(step) - 5 * Math.cos(2 * step) - 2 * Math.cos(3 * step) - Math.cos(4 * step))
                
        }
                
        this.vertices.push(vector);
                
      }
                
    }
                

                
    Heart.prototype.draw = function () {
                
      this.size -= this.speedSize;
                
      this.x += this.speedX;
                
      this.y += this.speedY;
                
      ctx.save();
                
      ctx.translate(-1000, this.y);
                
      ctx.scale(this.size, this.size);
                
      ctx.beginPath();
                
      for (var i = 0; i < precision; i++) {
                
        var vector = this.vertices[i];
                
        ctx.lineTo(vector.x, vector.y);
                
      }
                
      ctx.globalAlpha = this.size;
                
      ctx.shadowBlur = Math.round((3 - this.size) * 10);
                
      ctx.shadowColor = "hsla(0, 100%, 60%,0.5)";
                
      ctx.shadowOffsetX = this.x + 1000;
                
      ctx.globalCompositeOperation = "screen"
                
      ctx.closePath();
                
      ctx.fill()
                
      ctx.restore();
                
    };
                

                

                
    function render(a) {
                
      requestAnimationFrame(render);
                

                
      hearts.push(new Heart())
                
      ctx.clearRect(0, 0, ww, wh);
                
      for (var i = 0; i < hearts.length; i++) {
                
        hearts[i].draw();
                
        if (hearts[i].size <= 0) {
                
          hearts.splice(i, 1);
                
          i--;
                
        }
                
      }
                
    }
                

                

                
    onResize();
                
    window.addEventListener("mousemove", onMove);
                
    window.addEventListener("touchmove", onMove);
                
    window.addEventListener("resize", onResize);
                
    requestAnimationFrame(render);
                
  </script>
                

                
</body>
                

                
</html>
            

02

运行结果

picture.image

03

代码分析

该HTML文档创建了一个情人节主题的交互式网页,当用户在页面上移动鼠标或触摸屏幕时,会在粉红色背景上生成心形粒子动画。网页头部设置了标题"情人节快乐!",并使用CSS样式来固定居中显示标题,并根据屏幕宽度调整字体大小。

JavaScript代码主要实现以下功能:

  1. 初始化一个全屏canvas元素和2D渲染上下文。

  2. 设置窗口大小改变时重置canvas尺寸。

  3. 定义Heart构造函数用于创建心形粒子对象,包括其位置、大小、速度、透明度以及构成心形的顶点数组。

  4. Heart.prototype.draw方法负责每帧绘制心形粒子,更新其位置、大小和透明度,并利用阴影效果增强视觉表现。

  5. onMove函数监听鼠标或触摸事件,在用户移动时创建新的心形粒子。

  6. render函数是一个动画循环,它清除画布内容,遍历所有心形粒子进行绘制,并移除已超出预设大小的心形粒子,确保动画流畅运行。

通过这些代码,网页在用户交互时会产生浪漫而动态的心形飘落效果,营造出浓厚的情人节氛围。

推荐文章

picture.image

picture.image

浪漫的HTML跳动爱心代码(满屏飘字)

炫酷的Html动态爱心代码

C语言实现跳动的爱心完整代码

Python李峋同款跳动的爱心代码(可写字版)

如何用Java实现一个可以写字的动态爱心

一起用C语言画个爱心吧!

HTML超好看的蓝色爱心

"愿得一人心,白首不分离"

是谁的心啊~

写在后面

我是一只有趣的兔子,感 谢你的喜欢!

picture.image

LIGHT SNOW

:如需下载代码,可以在公众号回复关键词:

html006 ,然后输入提取码: h8xc 下载哦~

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
边缘云原生操作系统设计与思考
《火山引擎边缘云原生操作系统设计与思考》 徐广治 | 火山引擎边缘云资深架构师
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论