gpt4 book ai didi

javascript - 为什么canvas不能在本地工作但在TRYIT上工作

转载 作者:行者123 更新时间:2023-11-28 03:07:16 24 4
gpt4 key购买 nike

我已经构建了一些与 Canvas 相关的代码,但代码正在 TRYIT 上运行但是当我将所有代码复制到文件并尝试运行它时,代码无法在本地工作。

这就是这段代码正在做的事情,它获取一个图像并设置 Canvas 相对于该图像的宽度和高度,并在该图像( Canvas )上绘制一个带有文本的实心圆。

这是代码

      <head>
<meta charset=utf-8 />
<title>Draw a circle</title>
</head>
<body onload="draw();">
<canvas id="circle"></canvas>
</body>
<script>

var canvas = document.getElementById('circle'),
context = canvas.getContext('2d');

function draw()
{

base_image = new Image();
base_image.src = 'http://sst-system.com/old/Planos/C21E34.JPG';


var canvas = document.getElementById('circle');
if (canvas.getContext)
{
base_image = new Image();
base_image.src = 'http://sst-system.com/old/Planos/C21E34.JPG';
var ctx = canvas.getContext('2d');
ctx.beginPath();

ctx.canvas.width = base_image.width;
ctx.canvas.height = base_image.height;
var X = 500;
var Y = 229;
var R = 6.4;
ctx.font = "15px Arial bold";
ctx.beginPath();
ctx.arc(X, Y, R, 0, 2 * Math.PI, false);
ctx.lineWidth = 12;
ctx.strokeStyle = '#FF0000';
ctx.drawImage(base_image, 0, 0)
ctx.stroke();
ctx.fillText("TT", X-9, Y+5);

}
}
</script>

控制台上没有错误,但它在控制台中显示以下警告: enter image description here

最佳答案

正如 @DBS 提到的,这是一个速度问题。您无需等待图像加载即可使用它。

修复方法是将监听器附加到图像的 load 事件,使用 image.addEventListener('load', () => { 或已弃用的-but-still-works 风格的 image.onload = () => {,我在下面使用过。

它在 TryIt 示例中起作用的原因是,图像从第二次加载开始就被浏览器缓存,因此它立即可用,您无需等待它加载。

我怀疑当您在本地运行它时,如果您打开了 Devtools,则由于 Devtools 设置中名为“禁用缓存(当 DevTools 打开时)”的选项,缓存被禁用。所以它永远不会从缓存中提取,因此永远不会工作。

以下代码有效:

<html>

<head>
<meta charset=utf-8 />
<title>Draw a circle</title>
</head>

<body onload="draw();">
<canvas id="circle"></canvas>
</body>
<script>
var canvas = document.getElementById('circle'),
context = canvas.getContext('2d');

function draw() {

base_image = new Image();
base_image.src = 'http://sst-system.com/old/Planos/C21E34.JPG';


var canvas = document.getElementById('circle');
if (canvas.getContext) {
base_image = new Image();
base_image.src = 'http://sst-system.com/old/Planos/C21E34.JPG';
// The key change: put the rest of the code inside the onload callback
// to wait for the image to load before using it.
base_image.onload = function() {
var ctx = canvas.getContext('2d');
ctx.beginPath();

ctx.canvas.width = base_image.width;
ctx.canvas.height = base_image.height;
var X = 500;
var Y = 229;
var R = 6.4;
ctx.font = "15px Arial bold";
ctx.beginPath();
ctx.arc(X, Y, R, 0, 2 * Math.PI, false);
ctx.lineWidth = 12;
ctx.strokeStyle = '#FF0000';
ctx.drawImage(base_image, 0, 0)
ctx.stroke();
ctx.fillText("TT", X - 9, Y + 5);
};

}
}
</script>

</html>

关于javascript - 为什么canvas不能在本地工作但在TRYIT上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60493810/

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