如果我有一個帶圓圈的畫布,點擊它就會改變顏色,我可以在畫布元素上使用單擊事件並處理數學運算(距離公式計算< =半徑)。但是如果我有兩個重疊的圓圈(如廂式車圖),並且假設只有頂部圓圈應該改變顏色,我會在兩個圓圈中間點擊一下?如果在這種情況下應用第一個圓的數學運算,則兩個圓都會改變顏色。重疊對象上的HTML畫布事件?
我將如何處理畫布中的事件,如上例中的重疊對象?希望有一個快速/高效的算法?
如果我有一個帶圓圈的畫布,點擊它就會改變顏色,我可以在畫布元素上使用單擊事件並處理數學運算(距離公式計算< =半徑)。但是如果我有兩個重疊的圓圈(如廂式車圖),並且假設只有頂部圓圈應該改變顏色,我會在兩個圓圈中間點擊一下?如果在這種情況下應用第一個圓的數學運算,則兩個圓都會改變顏色。重疊對象上的HTML畫布事件?
我將如何處理畫布中的事件,如上例中的重疊對象?希望有一個快速/高效的算法?
你可能需要一個工作
上面的迴應也提到某種列表來表示圖層。我認爲這個實現不會很困難,只是另一個需要檢查半徑的條件。
畫布不是真的像Flash一樣,或者像一棵DOM樹,因爲事物有排序順序或z索引。它有點像一個平坦的光柵圖像,你必須依靠你的javascript中的其他邏輯來記住你繪製的東西的順序堆棧順序。
如果您需要這種交互方式,我總是會發現最好使用第三方庫(除非它真的只是一個或兩個圓圈沒有做太多的情況)。
對於基於交互式'形狀'的JavaScript圖形,我會獲取Raphael.js或D3,它們實際上比畫布上的更多的SVG工具,所以也許它不適合你,但它們很簡單並且跨瀏覽器。
還有processing.js(處理Java lib的js端口),它感覺有點像flash,可以跟蹤所有的級別和對象。 Theres噸其他噸,但多數民衆贊成在另一個話題。
如果它是超級簡單的選項可能是:
我認爲這是一個好主意,去一個JavaScript庫,認爲我會嘗試kinetic.js – Derek