2
A
回答
3
嘗試使用現有的畫布庫(或創建自己的),在選擇形狀時發生事件。
下面的示例使用Kinetic JS library,並且下面的例子是從HTML5 Canvas Region Events Example:
var triangle = new Kinetic.Shape(function(){
var context = this.getContext();
context.beginPath();
context.lineWidth = 4;
context.strokeStyle = "black";
context.fillStyle = "#00D2FF";
context.moveTo(120, 50);
context.lineTo(250, 80);
context.lineTo(150, 170);
context.closePath();
context.fill();
context.stroke();
});
triangle.on("mouseout", function(){
writeMessage(messageLayer, "Mouseout triangle");
});
triangle.on("mousemove", function(){
var mousePos = stage.getMousePosition();
var x = mousePos.x - 120;
var y = mousePos.y - 50;
writeMessage(messageLayer, "x: " + x + ", y: " + y);
});
shapesLayer.add(triangle);
var circle = new Kinetic.Shape(function(){
var canvas = this.getCanvas();
var context = this.getContext();
context.beginPath();
context.arc(380, canvas.height/2, 70, 0, Math.PI * 2, true);
context.fillStyle = "red";
context.fill();
context.lineWidth = 4;
context.stroke();
});
circle.on("mouseover", function(){
writeMessage(messageLayer, "Mouseover circle");
});
circle.on("mouseout", function(){
writeMessage(messageLayer, "Mouseout circle");
});
circle.on("mousedown", function(){
writeMessage(messageLayer, "Mousedown circle");
});
circle.on("mouseup", function(){
writeMessage(messageLayer, "Mouseup circle");
});
shapesLayer.add(circle);
stage.add(shapesLayer);
stage.add(messageLayer);
此外,我已經包括一些小鼠中檢測如果光標在形狀內,不使用任何JavaScript庫。
矩形基於鼠標在檢測:
function isCursorWithinRectangle(x, y, width, height, mouseX, mouseY) {
if(mouseX > x && mouseX < x + width && mouseY > y && mouseY < y + height) {
return true;
}
return false;
}
圈爲基礎的鼠標在檢測:
function isCursorWithinCircle(x, y, r, mouseX, mouseY) {
var distSqr = Math.pow(x - mouseX, 2) + Math.pow(y - mouseY, 2);
if(distSqr < r * r) {
return true;
}
return false;
}
2
畫布不具有用於該元件的界面它就像DOM上的一樣。它僅用於繪圖。
您需要將資產創建爲對象並使用繪圖循環來繪製它們。然後您忘記了canvas
元素,您可以使用它們的對象以及它們的偏移量等。
0
有一種非常簡單的方法可以選擇不包含邊界矩形或數學計算的像素精度的複雜形狀。
想法是,您將所有形狀複製到隱藏的輔助畫布上,在其中爲每個形狀分配唯一的顏色。在原始畫布上執行鼠標懸停或單擊事件時,將鼠標的(x,y)座標與可見畫布相關聯,然後使用相同的座標查找隱藏畫布上的像素顏色。由於每個形狀在隱藏畫布上都有獨特的顏色,因此該顏色對應於用戶選擇的確切形狀。
請注意,這隻支持大約1670萬個形狀,因爲RGB只有24位顏色,但這應該是綽綽有餘。
下面是使用D3和Canvas一個簡單的例子:http://bl.ocks.org/syntagmatic/6645345
相關問題
- 1. html5畫布形狀填充
- 2. HTML5 - 畫布形狀描邊
- 3. HTML5畫布:從形狀到物體?
- 4. HTML5實時視頻畫布形狀
- 5. 如何選擇畫布上的形狀並返回其名稱?
- 6. 如何在Android上選擇畫布上的形狀
- 7. html5 - 如何檢查在畫布上繪製的形狀?
- 8. 如何在HTML5畫布上交互繪製形狀?
- 9. 如何在HTML5畫布中繪製雲形狀?
- 10. 如何在html5畫布標記中創建相交形狀
- 11. 如何在HTML5畫布中製作此形狀?
- 12. 如何修復HTML5畫布中的模糊形狀邊緣?
- 13. 如何使HTML5畫布形狀可調整大小
- 14. 如何normlize路徑(形狀),以填補其在HTML5畫布
- 15. HTML5/Javascript - 如何獲取畫布上形狀/圖像的座標?
- 16. HTML5畫布合併到矩形以形成新形狀
- 17. 如何緩衝HTML5畫布的圖形
- 18. 選擇和移動形狀在HTML5
- 19. HTML5畫布時使用的ID選擇
- 20. html5畫布包含顏色選擇
- 21. HTML5帆布扇貝形狀
- 22. 繪製矩形形狀阻力和圖像的降HTML5畫布
- 23. HTML5畫布上的部分楔形形狀
- 24. 撤消畫布上的選定形狀
- 25. 如何識別畫布中的形狀?
- 26. 在Windows應用商店中爲畫布選擇形狀
- 27. 如何禁用選擇HTML5畫布元素
- 28. 如何防止文字在HTML5畫布外雙擊選擇?
- 29. html5帆布選擇?
- 30. 如何在HTML5畫布上繪畫時檢查鍵盤狀態?
您可以使用畫布庫像[fabric.js(http://fabricjs.com)了點。 – kangax 2012-01-21 17:05:58
這個lib不錯,比... – 2012-01-23 05:41:30