canvas画图源码解析

这篇博客探讨了HTML5中的canvas元素如何在减少DOM操作的情况下提高绘图效率。对比了普通绘图方法和使用canvas绘图的区别,强调了canvas在避免频繁插入DOM节点以提升性能方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

html5中添加了canvas可以在尽量少操作dom的情况下进行绘图,这样子降低了操作dom的次数,提高了绘图的效率。

普通情况下绘图

---html---
<body>
  <div id="canvas"></div>
</body>

---css---
#canvas{
  width:100vw;
  height:100vh;
  border:1px solid black;
}

---javascript---

canvas.onmousemove=(e)=>{
  console.log(e.clientX);
  console.log(e.clientY);
  let div=document.createElement('div');
  div.style.position="absolute";
 
  div.style.left=e.clientX+'px';
  div.style.top=e.clientY+'px';
  div.style.width='6px';
  div.style.height='6px';
  div.style.marginLeft='-3px';
  div.style.marginTop='-3px';
  div.style.background="black"
  canvas.appendChild(div);  //将div加入canvas中,上面的操作只是在内存中绘制出一个矩形而已。
}

用该方法绘制图形,可以看出输出的结果,鼠标每一栋一次,就需要往DOM树插入一个节点,这样降低了渲染的效率。

使用canvas进行绘图


---html---
<body>
<canvas  id='canvas' width='100' height='100'></canvas>
</body>

注:canvas跟image很相似,他可以通过width和height指定canvas的宽高,但是如果通过css重新指定宽高,
    那么在canvas指定的宽高将会被覆盖,实质就是在css设置的宽高,就是将canvas整个元素拉伸,这样子
    会导致canvas绘制出来的图形变形;


---css---
#canvas{
  border:1px solid black;
  display:block;   /*默认下,canvas是inline元素*/
}

注:由于在css中设置宽高,将会把canvas拉伸,使得图形模糊,所以不要在css中设置canvas的宽高;


---javascript---
var canvas=document.getElementById('canvas');
canvas.width=document.documentElement.cliemtWidth;   //注意不是canvas.style.width;
canvas.height=document.documentElement.cliemtHeight;

var ctx=canvas.getContext('2d');
ctx.fillStyle='blue';
canvas.onmousemove=(e)=>{
console.log(e.clientX);
console.log(e.clientY);
ctx.fillRect(e.clientX,eclientX,10,10)

通过canvas元素,可以看出无论鼠标移动多少次,dom树只有canvas这一个节点,这样子减少了绘图时系统性能的消耗;

canvas画板预览

点击预览

点击获取原码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值