当前位置:首页 > JavaScript

js实现爱心

2026-04-05 22:46:27JavaScript

使用Canvas绘制爱心

在HTML中创建一个Canvas元素,通过JavaScript绘制爱心形状。以下代码展示如何动态生成一个红色爱心:

const canvas = document.createElement('canvas');
canvas.width = 200;
canvas.height = 200;
document.body.appendChild(canvas);

const ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(100, 40);
ctx.bezierCurveTo(40, 40, 30, 100, 100, 150);
ctx.bezierCurveTo(170, 100, 160, 40, 100, 40);
ctx.fillStyle = 'red';
ctx.fill();

使用CSS和HTML创建爱心

通过伪元素和CSS transform实现纯CSS爱心效果:

<style>
.heart {
  width: 100px;
  height: 100px;
  position: relative;
  transform: rotate(45deg);
  background-color: red;
}
.heart:before, .heart:after {
  content: '';
  width: 100px;
  height: 100px;
  border-radius: 50%;
  background-color: red;
  position: absolute;
}
.heart:before {
  top: -50px;
  left: 0;
}
.heart:after {
  top: 0;
  left: -50px;
}
</style>
<div class="heart"></div>

使用SVG绘制爱心

SVG矢量图形方案,适合需要缩放的情况:

<svg width="200" height="200" viewBox="0 0 200 200">
  <path d="M100,30 C60,10 20,50 50,90 C70,120 100,150 100,150 C100,150 130,120 150,90 C180,50 140,10 100,30 Z" fill="red"/>
</svg>

动态跳动爱心动画

结合CSS动画实现跳动效果:

const heart = document.createElement('div');
heart.style.width = '50px';
heart.style.height = '50px';
heart.style.backgroundColor = 'red';
heart.style.position = 'absolute';
heart.style.borderRadius = '50%';
heart.style.transform = 'rotate(45deg)';
heart.style.animation = 'beat 1s infinite';

document.body.appendChild(heart);

const style = document.createElement('style');
style.textContent = `
@keyframes beat {
  0% { transform: rotate(45deg) scale(1); }
  50% { transform: rotate(45deg) scale(1.3); }
  100% { transform: rotate(45deg) scale(1); }
}
`;
document.head.appendChild(style);

使用数学函数绘制爱心曲线

基于爱心曲线数学方程的实现:

js实现爱心

const canvas = document.createElement('canvas');
canvas.width = 400;
canvas.height = 400;
document.body.appendChild(canvas);

const ctx = canvas.getContext('2d');
ctx.translate(200, 200);

for (let t = 0; t < 2 * Math.PI; t += 0.01) {
  const x = 16 * Math.pow(Math.sin(t), 3);
  const y = 13 * Math.cos(t) - 5 * Math.cos(2*t) - 2 * Math.cos(3*t) - Math.cos(4*t);
  ctx.fillRect(x * 10, -y * 10, 4, 4);
}

每种方法适用于不同场景,Canvas方案适合需要动态交互的情况,CSS方案性能最佳,SVG方案保持清晰度,数学函数方案可精确控制爱心形状。

标签: 爱心js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…