输出一段使用canvas绘制心形的代码
时间: 2024-06-10 08:07:22 浏览: 100
好的,以下是使用Canvas绘制心形的代码:
```
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(150, 75);
ctx.bezierCurveTo(150, 37, 120, 25, 75, 25);
ctx.bezierCurveTo(30, 25, 0, 37, 0, 75);
ctx.bezierCurveTo(0, 112, 75, 200, 150, 275);
ctx.bezierCurveTo(225, 200, 300, 112, 300, 75);
ctx.bezierCurveTo(300, 37, 270, 25, 225, 25);
ctx.bezierCurveTo(180, 25, 150, 37, 150, 75);
ctx.closePath();
ctx.fillStyle = 'red';
ctx.fill();
```
希望对您有所帮助。
相关问题
写一段js代码 生成心形动画
以下是一个简单的 JavaScript 代码,用于在 HTML5 canvas 中生成心形图案动画:
```html
<canvas id="myCanvas" width="400" height="400"></canvas>
```
```javascript
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
const width = canvas.width;
const height = canvas.height;
let time = 0;
let animation;
function draw() {
ctx.clearRect(0, 0, width, height);
ctx.fillStyle = "red";
ctx.beginPath();
let x = 16 * Math.pow(Math.sin(time), 3);
let y =
13 * Math.cos(time) -
5 * Math.cos(2 * time) -
2 * Math.cos(3 * time) -
Math.cos(4 * time);
x = (x * width) / 30 + width / 2;
y = (y * height) / 30 + height / 2;
ctx.arc(x, y, 5, 0, 2 * Math.PI);
ctx.fill();
time += 0.05;
animation = requestAnimationFrame(draw);
}
animation = requestAnimationFrame(draw);
```
该代码使用了数学公式绘制心形曲线,随着时间的推移,通过改变曲线上的点的位置,可以创建一个心形图案动画。这段代码首先获取一个 HTML5 canvas 元素,并获取其上下文。然后,它在画布上绘制一个红色的小圆点,其位置由心形曲线计算而来。最后,它使用 requestAnimationFrame() 函数来递归调用 draw() 函数,从而创建一个连续的动画效果。
写一段js代码 生成心形动画,动画路径内部填充渐变色
以下是一个用纯JS和HTML5 Canvas实现的生成心形动画的代码,路径内部填充渐变色:
```html
<canvas id="myCanvas"></canvas>
<script>
const canvas = document.getElementById("myCanvas");
const context = canvas.getContext("2d");
// 设置画布大小
canvas.width = 500;
canvas.height = 500;
// 定义心形路径
const path = new Path2D();
path.moveTo(250, 100);
path.bezierCurveTo(250, 50, 200, 0, 150, 0);
path.bezierCurveTo(50, 0, 0, 50, 0, 150);
path.bezierCurveTo(0, 250, 250, 450, 250, 450);
path.bezierCurveTo(250, 450, 500, 250, 500, 150);
path.bezierCurveTo(500, 50, 450, 0, 350, 0);
path.bezierCurveTo(300, 0, 250, 50, 250, 100);
// 创建渐变色
const gradient = context.createLinearGradient(0, 0, 500, 500);
gradient.addColorStop(0, "red");
gradient.addColorStop(1, "white");
// 定义动画函数
function animate() {
// 清除画布
context.clearRect(0, 0, canvas.width, canvas.height);
// 填充渐变色
context.fillStyle = gradient;
context.fill(path);
// 改变心形大小
path.scale(0.98, 0.98);
// 循环动画
if (path.currentTransform.a > 0.01) {
window.requestAnimationFrame(animate);
}
}
// 启动动画
animate();
</script>
```
这个代码创建了一个HTML5 Canvas元素,然后使用纯JS和Canvas API在画布上绘制一个心形路径,并通过填充渐变色创建了一个动画效果。动画效果是通过反复缩小心形路径来实现的,当心形路径的大小几乎变为0时,动画停止。这个代码还使用了window.requestAnimationFrame()方法来实现平滑的动画效果。
阅读全文