我有一個畫布,用戶可以通過在畫布上繪製形狀來選擇圖片上的東西。所以有可能在畫布上有多個形狀如何讓鼠標在畫布上形狀
現在我想要的是當鼠標懸停形狀我想要改變畫布的不透明度,除了自定義形狀(鼠標懸停)。
這就像一些jQuery插件做 http://davidlynch.org/projects/maphilight/docs/demo_simple.html如果我理解你的問題正確,你需要去同一個數據模型的方法來畫布(反向這裏效果)
感謝
我有一個畫布,用戶可以通過在畫布上繪製形狀來選擇圖片上的東西。所以有可能在畫布上有多個形狀如何讓鼠標在畫布上形狀
現在我想要的是當鼠標懸停形狀我想要改變畫布的不透明度,除了自定義形狀(鼠標懸停)。
這就像一些jQuery插件做 http://davidlynch.org/projects/maphilight/docs/demo_simple.html如果我理解你的問題正確,你需要去同一個數據模型的方法來畫布(反向這裏效果)
感謝
反向區效應。基本上,您需要存儲將出現在畫布上的信息。然後,您有一個使用該信息呈現畫布的函數。
當用戶將鼠標移動到畫布上時,您可以確定它們相對於畫布的x,y,查看數據並查看x,y處的內容。改變數據中的狀態並重新構建畫布。
這是一個非常粗略的例子,我很快就把它扔在了一起。我強烈建議更好地構建您的JavaScript,但這是一個概念證明。在實踐中,您將希望以索引格式存儲數據,並更好地執行mousemove()函數調用,因爲當用戶移動鼠標時(通常使用setTimeout
並忽略隨後的調用),該函數會被敲擊。
$(function() {
function renderCanvas() {
for(var i = 0; i < data.length; i++) {
context.fillRect(data[i].x, data[i].y, data[i].width, data[i].height);
}
}
var context = $(".myCanvas").get(0).getContext("2d");
var data = [];
data.push({ x : 25, y : 25, height : 100, width : 100 });
renderCanvas();
$(".myCanvas").mousemove(function(e) {
for(var i = 0; i < data.length; i++) {
if (e.pageX > data[i].x && e.pageX < data[i].x + data[i].width && e.pageY > data[i].y && e.pageY < data[i].y + data[i].height) {
data[i].height = 200;
renderCanvas();
}
}
});
});
在小提琴格式:http://jsfiddle.net/wUnDu/1/
執行此方法適用於自定義形狀?如何存儲畫布信息以查找? – user1531437
是的,它可以支持自定義形狀。只要你有一些算法來確定像素X,Y是否在你的形狀內。它可能會成爲一些非常複雜的數學運算,具體取決於形狀的頂點,並且在大多數情況下,形狀可以在幕後簡化。這是畫布的本質,但它與傳統的屏幕緩衝區編程非常相似。下面是一些你可以使用的算法的例子 - http://www.quora.com/Algorithms/What-are-the-algorithms-for-determining-if-a-point-is-inside-an-arbitrary-closed特別是形狀或光線投射似乎是可行的。 – Nucleon