Tôi muốn vẽ một số đường nét đứt trên canvas HTML5. Nhưng tôi không thể tìm thấy có một tính năng như vậy. đường dẫn canvas chỉ có thể vẽ các đường liền nét. Và mọi người đã cố gắng sử dụng một số tính năng biên giới (chấm, gạch ngang) trong CSS để vẽ các đường đứt nét, nhưng chúng chỉ có thể nằm ngang hoặc dọc. Vì vậy, tôi đã bị mắc kẹt về điều này. Tôi cũng tìm thấy một thư viện có tên là RGraph và nó có thể vẽ các đường đứt nét. Nhưng sử dụng một thư viện bên ngoài sẽ làm cho bản vẽ thực sự chậm. Vậy cơ thể nào cũng có ý tưởng làm thế nào để thực hiện điều này? Bất kỳ trợ giúp sẽ được đánh giá cao.Vẽ các đường nét đứt trên Canvas HTML5?
Trả lời
Vẽ nét đứt trên vải
tôi cung cấp này lên không như một giải pháp hoàn chỉnh, nhưng là một cách đơn giản để vẽ một đường nét đứt giữa bất kỳ 2 điểm (một dòng ở bất kỳ góc). Nó rút ra rất nhanh.
Bạn có thể sửa đổi nó để phù hợp với nhu cầu của một đường đứt nét. Vẽ dấu gạch ngang không nên làm chậm bản vẽ.
Đây là mã và một Fiddle: 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();
}
Hi @markE, cảm ơn bạn rất nhiều vì đã hiển thị giải pháp này. Tuy nhiên, các dòng chúng ta cần phải thử không nhất thiết phải là đường thẳng. Vì vậy, tôi nghĩ rằng giải pháp này có thể không hoạt động. Nhưng cảm ơn tất cả các bạn giống nhau !! –
FYI - chấm và đứt nét là một phần của một số tính năng vải mới mà bây giờ là trong spec - và đã được thực hiện trong 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 này hoạt động tuyệt vời. – louisinhongkong
Đối với người đọc trong tương lai, câu trả lời của javadeveloper dưới đây có điểm số thấp hơn nhưng không yêu cầu xác định bất kỳ chức năng nào - nó sử dụng phương thức setin setLineDash(). – Seb
Điều này cần phải là câu trả lời được chấp nhận –
Đây là một cách dễ dàng hơn để tạo đường đứt nét:
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();
Hy vọng rằng sẽ giúp.
Đây là tham chiếu API về phương thức setLineDash: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash. Dường như nó được hỗ trợ từ IE 11 trở đi và trong tất cả các trình duyệt hiện đại khác – thenickdude
Bạn có thể sử dụng phương thức setLineDash()
.
context.setLineDash([2,3]);
http://www.rgraph.net/blog/2013/january/html5-canvas-dashed-lines.html
- 1. Đường cong bị đứt trên Html5 Canvas Bezier
- 2. Làm sống động dòng gạch đứt nét HTML5 Canvas & Jquery
- 3. Làm cách nào để vẽ hình chữ nhật có đường nét đứt trong canvas?
- 4. Vẽ văn bản bằng nét ngoài với canvas của HTML5
- 5. ggplot2: Đường đứt nét trong chú thích
- 6. Vẽ hình chữ nhật với các đường đứt nét bằng cách sử dụng Rafael.js
- 7. Vẽ các đường cong đầu mũi tên trong HTML5 Canvas
- 8. JavaFx 2.x: Làm thế nào để vẽ các đường đứt nét hoặc chấm chấm?
- 9. Cách vẽ đa giác trên canvas HTML5?
- 10. Xóa các đường kẻ được vẽ trước đây trên canvas HTML5
- 11. Tạo một đường đứt nét một phần trong ggplot2
- 12. Làm cách nào để tạo đường viền đứt nét với các góc tròn trong WPF?
- 13. Vẽ đường gạch ngang trên Canvas
- 14. HTML5 Canvas chậm lại theo từng nét và rõ ràng
- 15. Vẽ mũi tên trên Canvas HTML5 giữa hai đối tượng
- 16. khung hình ba.js chỉ có hình dạng với các cạnh ẩn như các đường đứt nét
- 17. Canvas không vẽ các đường trơn mịn
- 18. HTML5 Canvas - Làm thế nào để vẽ một đường trên nền hình ảnh?
- 19. Đột quỵ đường đôi trong html5 canvas
- 20. Đường lởm chởm được vẽ bởi người dùng trong ứng dụng canvas HTML5?
- 21. Vẽ đường cong bezier đứt quãng trong QML
- 22. HTML5 Canvas - Strokes khác nhau
- 23. Đặt blendmode để vẽ nét?
- 24. "Xóa" trong html5 canvas
- 25. Làm thế nào để vẽ đường lưới trên WPF Canvas?
- 26. Đường kẻ mịn được vẽ trong canvas
- 27. clearRect không xóa canvas khi vẽ các đường thẳng đứng
- 28. HTML5 Xóa đối tượng được vẽ trước đó trong canvas
- 29. Làm thế nào để vẽ một đường dẫn một phần trong canvas của HTML5?
- 30. iOS Quartz/CoreGraphics vẽ nét vẽ lông
"sử dụng một thư viện bên ngoài sẽ làm cho các bản vẽ rất chậm" - những gì làm cho bạn lại nói thế? –
Đồng đội của tôi đã cố gắng sử dụng một thư viện để vẽ những đường nét đứt quãng đó. Có khoảng 20 dòng trên canvas, nhưng tạo sự khác biệt lớn về hiệu suất. Khi người dùng tương tác với canvas, bạn có thể thấy sự chậm trễ khá rõ ràng nếu bạn kéo canvas. Mất nhiều thời gian hơn để vẽ lại chúng. –
http://en.wikipedia.org/wiki/Correlation_does_not_imply_causation - Đó có thể là kỹ thuật mà thư viện đã sử dụng gây ra sự chậm trễ, thay vì thực tế là nó được đóng gói vào thư viện. –