let canvas = document.querySelector('canvas');
时间: 2023-08-25 13:14:40 浏览: 43
这一个JavaScript语句,意思是从文档中获取一个canvas元素,并将其赋值给一个名为canvas的变量。在Web开发中,Canvas是一个HTML5元素,它提供了一种基于JavaScript的绘图机制,可以使用JavaScript代码在网页上绘制图形、动画和其他视觉效果。在这里,我们使用document对象的querySelector()方法来获取文档中的canvas元素,该方法接收一个CSS选择器作为参数,返回匹配该选择器的第一个元素。如果文档中没有匹配的元素,则返回null。通过将canvas元素赋值给一个变量,我们可以在后续的代码中使用该变量来操作canvas元素,例如获取其上下文对象并进行绘图操作。
相关问题
<div class="box"> <canvas id="clock" width="400px" height="400px"></canvas> </div> <script> let obj=document.querySelector('#clock') let canvas=obj.getContext('2d') for(let j=0;j<4;j++){ for(let i=0;i<4;i++){ canvas.fillRect(i*80,j*80,40,40); canvas.fillRect(i*80+40,j*80+40,40,40); canvas.strokeRect(i*80+40,j*80,40,40); canvas.strokeRect(i*80,j*80+40,40,40); } } </script>
这段代码实现了一个 4x4 的棋盘,其中黑色方格用 fillRect 方法绘制,白色方格用 strokeRect 方法绘制。以下是代码的解释:
```html
<div class="box">
<canvas id="clock" width="400px" height="400px"></canvas>
</div>
<script>
// 获取 canvas 元素
let obj = document.querySelector('#clock')
let canvas = obj.getContext('2d')
// 绘制棋盘
for (let j = 0; j < 4; j++) {
for (let i = 0; i < 4; i++) {
// 绘制黑色方格
canvas.fillRect(i * 80, j * 80, 40, 40);
canvas.fillRect(i * 80 + 40, j * 80 + 40, 40, 40);
// 绘制白色方格
canvas.strokeRect(i * 80 + 40, j * 80, 40, 40);
canvas.strokeRect(i * 80, j * 80 + 40, 40, 40);
}
}
</script>
```
代码中通过 canvas.getContext('2d') 获取了 canvas 的 2D 上下文,然后使用 fillRect 和 strokeRect 方法分别绘制了黑色方格和白色方格,并使用 for 循环绘制了整个棋盘。
let can = document.createElement('canvas') can.width = 300 can.height = 350 var str1 = window.xyjVue.$waterStr; let cans = can.getContext('2d') cans.rotate(-25 * Math.PI / 180) const fontSize = 16; const opacity = 0.4; document.fonts.ready.then(() => { // 设置字体 const font = new FontFace('CustomFont', 'url(http://hnxyjwork.kmdns.net:15002/wenYi/DIN-Light.woff)'); font.load().then(() => { cans.fillStyle = `rgba(216, 216, 216, ${opacity})`; // 设置文本颜色和透明度 cans.font = `16px CustomFont`;// 设置字体大小和名称 cans.fillText(str1, 0, 300) cans.fillText(str1, 0, 130) let div = document.createElement('div') div.id = id div.style.pointerEvents = 'none' div.style.top = '0' div.style.left = '0' div.style.right = '0' div.style.bottom = '0' div.style.opacity = '1' div.style.position = 'absolute' div.style.zIndex = 7 div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat fixed' let img = new Image(); img.src = can.toDataURL('image/png'); img.onload = function () { div.style.background = `url(${img.src}) left top repeat fixed`; if (parentName) { document.querySelector(parentName).appendChild(div); } else { document.body.appendChild(div); } }; }); });字体文件虽然引入了 但是页面并不生效
这个问题可能是由于字体文件加载时还未完成,就已经开始绘制文字导致的。你可以尝试在字体文件加载完成后再进行绘制,或者在绘制之前先判断字体文件是否已经加载完成。
你可以修改代码如下:
```
let can = document.createElement('canvas');
can.width = 300;
can.height = 350;
var str1 = window.xyjVue.$waterStr;
let cans = can.getContext('2d');
cans.rotate(-25 * Math.PI / 180);
const fontSize = 16;
const opacity = 0.4;
// 设置字体
const font = new FontFace('CustomFont', 'url(http://hnxyjwork.kmdns.net:15002/wenYi/DIN-Light.woff)');
font.load().then(() => {
document.fonts.add(font); // 添加字体
cans.fillStyle = `rgba(216, 216, 216, ${opacity})`; // 设置文本颜色和透明度
cans.font = `${fontSize}px CustomFont`; // 设置字体大小和名称
cans.fillText(str1, 0, 300);
cans.fillText(str1, 0, 130);
let div = document.createElement('div');
div.id = id;
div.style.pointerEvents = 'none';
div.style.top = '0';
div.style.left = '0';
div.style.right = '0';
div.style.bottom = '0';
div.style.opacity = '1';
div.style.position = 'absolute';
div.style.zIndex = 7;
div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat fixed';
let img = new Image();
img.src = can.toDataURL('image/png');
img.onload = function () {
div.style.background = `url(${img.src}) left top repeat fixed`;
if (parentName) {
document.querySelector(parentName).appendChild(div);
} else {
document.body.appendChild(div);
}
};
});
```
这样就可以在字体加载完成后再进行绘制,确保绘制出的文字使用的是正确的字体。