> 结论写在头 var oC = document.getElementById('c1'); var oGC = oC.getContext('2d'); oGC.strokeRect(50,50,100,100);//默认绘制黑色一像素的线 像这个用canvas绘制出一个方形的时候,由于设置的top值和left值是50px,所以canvas会在第50和第51个像素之间从中间开始绘制一像素的线,第50和第51个像素各占0.5像素. 计算机并不能渲染0.5个像素,所以导致第50和第51个像素都被…
我在开发中使用canvas的机会不是很多,但是第一次实际使用中就遇到了问题,"很久很久以前,我自己画了一个雷达图,线宽都是1像素,但是显示效果不如期望,这才发现canvas中的画线还是有坑的",对比一下两个图,可以发现下图比较清晰.   我们先画一个线宽为1像素的线,代码和显示效果如下: const ctx = document.getElementById(canvas).getContext("2d"); ctx.strokeStyle = "re…
让div悬浮于canvas之上   使用z-index控制层及顺序 慕课网canvas demo <div id="canvas-wrapper"> <canvas id="canvas"> 你的浏览器不支持canvas,请更换浏览器再试! </canvas> <div id="controller"> <p>在canvas中使用html元素 </p> <a href=…
HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路径. closePath() : 通过绘制一条当前点到路径起点的线段来闭合形状. fill() , stroke() : 填充形状或绘制空心形状. moveTo() : 将当前点移动到点(x,y). lineTo() : 从当前点绘制一条直线到点(x,y). arc(x,y,r,sAngle,eAn…
用 canvas 做小游戏或者特效,碰撞检测是少不了的.本文将会涉及普通的碰撞检测,以及像素级的碰撞检测.(本文的碰撞检测均以矩形为例) 普通碰撞检测 普通的矩形碰撞检测比较简单.即已知两个矩形的各顶点坐标,判断是否相交,如相交,则为碰撞. leetcode 有道题是给出两个矩形的坐标,求其相交面积(223. Rectangle Area),代码 可以直接拿过来用,如果面积大于 0,则为碰撞. 如果只需判断是否相交或者相交面积,非常简单,可以参考 这里. 为了程序的可扩展性,如果碰撞,最好还能求…
Canvas所提供的各种方法根据功能来看大致可以分为几类: 第一是以drawXXX为主的绘制方法: 第二是以clipXXX为主的裁剪方法: 第三是以scale.skew.translate和rotate组成的Canvas变换方法: 最后一类则是以saveXXX和restoreXXX构成的画布锁定和还原: 还有一些其他的就不归类了. 如果用到的不能硬件加速的方法,请务必关闭硬件加速,否则可能会产生不正确的效果. 一.clipRect(…) clipRect是将当前画布裁剪为一个矩形,以后画的图像仅…
今天很开心的收获: ItemsControl 中 ItemsPanel的重定义和 ItemContainerStyle 以及 ItemTemplate 三者的巧妙结合,在后台代码不实例化任何控件的前提下,实现标准的MVVM模式下,在前台Canvas中动态创建包含各种数据展示形态的控件. 好东西要共享,先上简化过的XAML最终解决方案: <UserControl.Resources> <Style x:Key="MyItemsControlStyle" TargetTy…
在 HTML5 Canvas 中,我们可以通过 arc 方法来绘制圆形: // context.arc(x, y, r, sAngle, eAngle, counterclockwise); var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); ctx.arc(100, 100, 50, 0, 2 * Math.PI); ctx.fill(); 但如何绘制一个扇形呢?是不是简单地修改结…
正统的HTML5 Canvas中如下代码 ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(10, 100); ctx.lineTo(300,100); ctx.stroke(); 运行结果绘制出来的并不是一个像素宽度的线 感觉怎么好粗啊,跟常常见到的网页版各种绘制线效果 很不一样,难道HTML5 Canvas就没想到搞好点嘛 其实这个根本原因在于Canvas的绘制不是从中间开始的 而是从0-1,不是从0.5-1 + 0-0.5的绘制方式,所以 导致f…
<canvas>是HTML5中新增加的一个元素,我们可以使用脚本(通常使用JavaScript)在上面绘制图形,就像个画布一样.我们可以用它来绘制图表.制作一些动画.默认大小为300px × 150px. 在<canvas>中绘制图形的方法中,isPointInPath()方法用于检测指定的点是否在绘制图形的路径中,存在返回ture,不存在返回false. 注:在代码部分,红色加粗部分是重点要注意的内容哦!  在矩形中 在画布上绘制一个空心矩形,然后指定一个点,如果这个点在矩形的路…