gpt4 book ai didi

javascript - 有没有一种添加新框并使用 javascript 重绘 Canvas 的好方法?

转载 作者:行者123 更新时间:2023-11-28 06:18:29 25 4
gpt4 key购买 nike

底层代码在 Canvas 中创建随机 block 。这是我到目前为止所取得的成就。但是我在做进一步的任务时遇到了困难。我想在 Canvas 外创建一个按钮(这很简单),点击它会在 Canvas 中添加一个新框。旧盒子的位置可能会或可能不会改变(它提供适当的空间)。如果没有足够的空间容纳新框,则增加内部容器的大小,这将增加 Canvas 的大小,并使用新 Canvas 按新 Canvas 比例重新绘制旧框。并且如果内部容器的大小增加了外部容器,则滚动条将出现在外部容器中。这是我当前的代码:

HTML:

<div class="outer-container">
<div class="inner-container">
<canvas id="canvas" style="height:100%;width:100%"></canvas>
</div>
</div>

Javascript:

function getRandomColor() {
var color = '#';
for (var i = 0; i < 6; i++) {
color += (Math.random() * 16 | 0).toString(16);
}
return color;
}

function Point(x, y) {
this.x = x;
this.y = y;
}

function Rectangle(p1, p2) {
this.p1 = p1;
this.p2 = p2;
}

Rectangle.prototype.isInside = function (r) {
function check(a, b) {
return (
a.p1.x <= b.p1.x && b.p1.x <= a.p2.x && a.p1.y <= b.p1.y && b.p1.y <= a.p2.y ||
a.p1.x <= b.p2.x && b.p2.x <= a.p2.x && a.p1.y <= b.p2.y && b.p2.y <= a.p2.y ||
a.p1.x <= b.p2.x && b.p2.x <= a.p2.x && a.p1.y <= b.p1.y && b.p1.y <= a.p2.y ||
a.p1.x <= b.p1.x && b.p1.x <= a.p2.x && a.p1.y <= b.p2.y && b.p2.y <= a.p2.y
);
}
return check(this, r) || check(r, this);
}

function generateRectangles() {
function p() { return Math.random() * 300 | 0; }
function s() { return 50 + Math.random() * 150 | 0; }

var rectangles = [],
r, size, x, y, isInside, i, counter = 0;

for (i = 0; i < 20; i++) {
counter = 0;
do {
counter++;
x = p();
y = p();
size = s();
r = new Rectangle(new Point(x, y), new Point(x + size, y + size));
isInside = rectangles.some(function (a) {
return a.isInside(r);
});
} while (isInside && counter < 1000);
counter < 1000 && rectangles.push(r);
}
return rectangles;
}

function drawRectangles(rectangles) {
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext("2d");

rectangles.forEach(function (a) {
ctx.lineWidth = 1;
ctx.strokeRect(a.p1.x + 0.5, a.p1.y + 0.5, a.p2.x - a.p1.x - 1, a.p2.y - a.p1.y - 1);
ctx.fillStyle = getRandomColor();
ctx.fillRect(a.p1.x + 0.5, a.p1.y + 0.5, a.p2.x - a.p1.x - 1, a.p2.y - a.p1.y - 1);
});
}

var rectangles = generateRectangles();
drawRectangles(rectangles);

就是不知道要怎么重绘。任何帮助将不胜感激。

最佳答案

创建按钮,使用 onclick="draw();" 属性和 javascript draw() 函数来绘制任何你想要的东西。

关于javascript - 有没有一种添加新框并使用 javascript 重绘 Canvas 的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com