我想在HTML5画布上画一些虚线。但我找不到有这样的功能。画布路径只能绘制实线。人们试图在CSS中使用一些边框特征(虚线,虚线)来绘制虚线,但它们只能是水平或垂直的。所以我陷入了这个问题。我还找到一个名为RGraph的图书馆,它可以绘制虚线。但使用外部库会使绘图非常慢。那么任何机构都有一个想法如何实现这一点?任何帮助将不胜感激。在HTML5画布上绘制虚线?
回答
绘图虚线上帆布
线I提供这种向上不作为一个完整的解决方案,但作为简单的方法来绘制任意2点之间的点线(任意角度的线)。它吸引得非常快。
您可以修改它以适合您的虚线需求。绘制破折号不应明显减慢绘图速度。
这里是代码和一个小提琴:http://jsfiddle.net/m1erickson/pW4De/
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
DrawDottedLine(300,400,7,7,7,20,"green");
function DrawDottedLine(x1,y1,x2,y2,dotRadius,dotCount,dotColor){
var dx=x2-x1;
var dy=y2-y1;
var spaceX=dx/(dotCount-1);
var spaceY=dy/(dotCount-1);
var newX=x1;
var newY=y1;
for (var i=0;i<dotCount;i++){
drawDot(newX,newY,dotRadius,dotColor);
newX+=spaceX;
newY+=spaceY;
}
drawDot(x1,y1,3,"red");
drawDot(x2,y2,3,"red");
}
function drawDot(x,y,dotRadius,dotColor){
ctx.beginPath();
ctx.arc(x,y, dotRadius, 0, 2 * Math.PI, false);
ctx.fillStyle = dotColor;
ctx.fill();
}
嗨@markE,非常感谢您展示此解决方案。但是,我们需要尝试的线条不一定是直线。所以我认为这个解决方案可能行不通。但是,谢谢你们一样! – 2013-03-27 02:05:20
仅供参考 - 点线和虚线是一些新的画布功能 ,现在是在规范中一部分 - 在Chrome中已经实现:
http://www.rgraph.net/blog/2013/january/html5-canvas-dashed-lines.html
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.setLineDash([5, 3]);/*dashes are 5px and spaces are 3px*/
ctx.beginPath();
ctx.moveTo(0,100);
ctx.lineTo(400, 100);
ctx.stroke();
thx这个伟大的作品。 – louisinhongkong 2013-11-12 12:55:56
对于将来的读者,下面的javadeveloper的答案有较低的分数,但不需要定义任何函数 - 它使用内置的setLineDash()方法。 – Seb 2016-03-03 17:28:19
这需要被接受的答案 – 2017-08-12 02:59:12
这是创建虚线更简单的方法:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.setLineDash([5, 15]);
ctx.beginPath();
ctx.moveTo(0,100);
ctx.lineTo(400, 100);
ctx.stroke();
希望有所帮助。
以下是关于setLineDash方法的API参考:https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash。很明显,它支持IE 11以及其他所有浏览器 – thenickdude 2016-02-29 01:38:03
您可以使用setLineDash()
方法。
context.setLineDash([2,3]);
http://www.rgraph.net/blog/2013/january/html5-canvas-dashed-lines.html
- 1. 在画布上绘制虚线
- 2. 动画逐步绘制虚线HTML5画布和Jquery
- 3. 在控制台上绘制HTML5画布
- 4. HTML5画布绘制
- 5. HTML5 - 超时后在画布上绘制
- 6. HTML5画布绘制多彩线
- 7. 绘制单个像素线HTML5画布
- 8. 在画布上绘制GOOD LOOKING(如Flash)线条(HTML5) - 可能吗?
- 9. HTML5画布绘制图像
- 10. 如何在画布上绘制虚线矩形?
- 11. 在QML画布上绘制线段
- 12. 在画布上绘制曲线路径?
- 13. html5动画画布已绘制元素
- 14. HTML5动画虚线
- 15. 画布html5绘画到上下文中
- 16. Html5画布上的虚线曲线贝塞尔
- 17. 通过虚拟帧缓冲设备绘制到HTML5画布
- 18. 在画布上绘制ArcTo
- 19. 绘制在画布上
- 20. 在画布上绘制
- 21. 在子画布上绘制
- 22. 在Scala.js上绘制画布
- 23. 在画布上绘制SVG
- 24. Bezier曲线绘制拉伸椭圆在HTML5画布
- 25. 在触摸位置在HTML5画布上绘制圆形
- 26. HTML5画布绘制地形设置
- 27. 使用HTML5画布绘制方程
- 28. HTML5和画布绘制饼图
- 29. 触摸绘制事件和HTML5画布
- 30. HTML5画布DrawImage没有绘制图像
“使用外部库将使图纸很慢” - 是什么让你说呢? – 2013-03-13 21:44:16
我的队友已经试图用库来绘制这些虚线。画布上有大约20条线条,但对表现有很大的影响。当用户与画布进行交互时,如果拖动画布,则会看到相当明显的延迟。重绘它们需要更长的时间。 – 2013-03-13 22:21:57
http://en.wikipedia.org/wiki/Correlation_does_not_imply_causation - 这很可能是库所使用的导致延迟的技术,而不是它被打包到库中的事实。 – 2013-03-13 22:27:16