javascript - 下载动态创建的画布是空白的
问题描述
我无法下载动态创建的画布。我希望用户能够创建 SVG 图像并将其作为位图下载。为此,我创建了一个画布并将我的 SVG 图像绘制到上面。然后我想下载它。但是,画布是空白的。现在我知道这可能是因为画布尚未完全加载,但附加一个onload
监听器canvas
并没有工作,因为它从未触发过。
再次单击该链接会下载正确的图像,这是对我的另一个提示,即这是一个时间问题。有人能告诉我为什么onload
永远不会被解雇吗?也许我误解了事件的处理方式或原因。
document.getElementById('downloadDirectly').addEventListener('click', function () {
downloadDirectly();
});
document.getElementById('downloadOnLoad').addEventListener('click', function () {
downloadOnLoad();
});
function createCanvas() {
var img = new Image();
img.src = 'data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000"><line x1="0" y1="0" x2="500" y2="500" stroke="black" stroke-width="5"/></svg>';
var canvas = document.createElement('canvas');
canvas.width = 1000;
canvas.height = 1000;
canvas.getContext('2d').drawImage(img, 0, 0, 1000, 1000, 0, 0, 1000, 1000);
return canvas;
}
function downloadDirectly() {
let canvas = {};
canvas = createCanvas();
let el = document.getElementById('downloadDirectly');
el.href = canvas.toDataURL();
console.log('This downloads, but canvas is not ready');
el.download = name + ".png";
}
function downloadOnLoad() {
let canvas = {};
canvas = createCanvas();
canvas.onload = function() {
console.log('This is never reached :(');
let el = document.getElementById('downloadOnLoad');
el.href = canvas.toDataURL();
el.download = name + ".png";
};
}
<p><a id="downloadDirectly">Download directly</a></p>
<p><a id="downloadOnLoad">Download using onLoad</a></p>
解决方案
推荐阅读
- linux - 如何防止某些值在 linux 内核调试中被优化掉?
- datastax-astra - 与 Datastax Astra DB 连接后如何维护响应中的数据类型?
- excel - Excel宏删除一个文件夹中所有现有工作表中的第一行
- android - 检测不工作的加速度计、陀螺仪或地磁传感器
- ipfs - 我可以托管共享文件夹并需要权限才能上传到 IPFS 吗?
- express - 重新加载页面时,req.session.cookies 和 req.session.user 对象消失(Nextjs/Expressjs)
- python - 使用令牌连接到 MySQL
- c# - 尝试更改玩家的方向时出错
- reactjs - 在自动完成之外单击时,Material-UI 自动完成输入重置
- r - 我有二进制数据(不同森林中存在/不存在鸟类)并且想知道是否存在包含随机效应的模型