HTML5 绘制位于顶部的文本
HTML5 draw text that stays on the top
我正在创建一个名为 functions 的文件.js其中包含不同的函数,例如:
- bgImage()
- drawImage()
- 设置文本()
问题是我的文字一直留在后面。
我想做的是,当我调用setText()时,我可以将文本放在我想要的位置。 并且文本将放在convas的顶部。 我知道我需要先调用图像绘制加载函数,让它们不覆盖我的文本。 但我在我的JS中这样做了。
因此,在绘制/设置所有图像之后,我可以根据需要多次调用函数setText()非常重要,并且文本将可见。
我希望文本在顶部。
这是我的代码:
函数.js
var canvas = "";
var context = "";
function canvasInit() {
canvas = document.getElementById('myCanvas');
context = canvas.getContext('2d');
}
function bgImage() {
var imageObj = new Image();
imageObj.onload = function() {
var pattern = context.createPattern(imageObj, 'repeat');
context.rect(0, 0, canvas.width, canvas.height);
context.fillStyle = pattern;
context.fill();
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/wood-pattern.png';
}
function drawImage() {
var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, 10, 50);
context.drawImage(imageObj, x, y, width, height);
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
}
function (text) {
context.font = 'italic 40pt Calibri';
context.fillText(text, 150, 100);
}
索引.html
<!DOCTYPE html>
<html>
<head>
<script src="functions.js"></script>
<script>
document.addEventListener('DOMContentLoaded',ready);
function ready() {
canvasInit();
bgImage();
drawImage();
setText("Yo");
setText("heyyyy");
}
</script>
</head>
<body>
<canvas id="myCanvas" width="500" height="400"></canvas>
</body>
</html>
更新了不起作用的测试:
索引.html
<!DOCTYPE html>
<html>
<head>
<script src="functions.js"></script>
<script>
document.addEventListener('DOMContentLoaded',ready);
function ready() {
canvasInit();
bgImage(function() {
setText();
});
}
</script>
</head>
<body>
<canvas id="myCanvas" width="500" height="400"></canvas>
</body>
</html>
函数.js
var canvas = "";
var context = "";
function canvasInit() {
canvas = document.getElementById('myCanvas');
context = canvas.getContext('2d');
}
function bgImage(callback) { // add parameter for function
var imageObj = new Image();
imageObj.onload = function() {
var pattern = context.createPattern(imageObj, 'repeat');
context.rect(0, 0, canvas.width, canvas.height);
context.fillStyle = pattern;
context.fill();
if (typeof callback === 'function') {
callback(); // invoke callback function
}
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/wood-pattern.png';
}
function drawImage() {
var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, 10, 50);
context.drawImage(imageObj, x, y, width, height);
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
}
function setText() {
context.font = 'italic 40pt Calibri';
context.fillText("Yoo adfa ds asd a sd", 150, 100);
}
发生这种情况是因为您的图像加载是异步的:在图像完成加载之前,您在设置源后函数退出时绘制文本。然后,当图像完成加载时,调用 onload 函数,并在之前绘制的任何内容(在本例中为文本)之上绘制图像。
您需要为函数实现一个回调处理程序才能使其正常工作 - 例如:
function bgImage(callback) { /// add parameter for function
var imageObj = new Image();
imageObj.onload = function() {
var pattern = context.createPattern(imageObj, 'repeat');
context.rect(0, 0, canvas.width, canvas.height);
context.fillStyle = pattern;
context.fill();
if (typeof callback === 'function')
callback(); /// invoke callback function
};
imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/wood-pattern.png';
}
然后你使用它:
bgImage(function() {
setText();
});
当然,您还需要使用其他图像加载功能来执行此操作。提示:如果您最终得到一个长链,最好分配非匿名函数,而不是像上一个示例那样内联它们。
更新:
为了清楚起见:重要的是提供的函数是作为引用提供的,而不是调用的结果,例如:以这种方式使用回调:
bgImage(setText); /// correct
不是这样:
bgImage(setText()); /// wrong
使用括号,只需调用setText
,其结果作为回调传递。这意味着将首先绘制文本,然后调用bgImage
。
我从来没有让我的代码工作过。 但是,我找到了一些名为"http://kineticjs.com/"的框架,并使用它解决了我的问题。
感谢您的评论肯 - Abdias 软件。 我还查看了您在个人资料描述中链接到的内容。 看起来真的很整齐;)
但是,我觉得接受解决我问题的答案是最好的,我自己解决了。
再次感谢:)
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 如何垂直淡出文本,类似于Amazon'的产品说明
- 如何在已经有图标的滚动到顶部按钮中添加文本
- jquery专注于asp.net mvc部分视图中的一个文本框
- onblur文本框生成电子邮件已存在于数据库中的警报
- 正在寻找一个类似于facebook的文本区域大小调整插件
- 滚动文本中的顶部单词
- 如何在引导程序中将输入文本框嵌入到图像的顶部
- Twitter 引导 - 点击时专注于模态内的文本区域
- 我如何完善这个Javascript代码,使其只适用于来自图像的链接(而不是来自文本的链接)
- 正在寻找类似于mircrosoft office autocorrect的jquery文本区域脚本
- 如何将文本置于拉斐尔路径的顶部
- 更改togglejquery顶部的文本
- 使用.on的多个下拉菜单选择文本仅适用于第一个下拉菜单
- 在自动重影文本区域中打字时,会将焦点集中在元素的顶部
- 如何创建 HTML 文本框,该文本框顶部有一个水平菜单选项卡可供选择
- 如何滚动到没有'不要拘泥于顶部
- 如何获得iframe相对于顶部窗口的位置's视口
- “无限scroll"代码只适用于顶部滚动
- Skrollr相对于顶部底部在chrome中较早着火