我在與CanvasRenderingContext2D.addHitRegion()
一起工作時偶然發現了這個問題,並且我正在努力解決它是否是預期的行爲,如果是的話,這是什麼原因。爲什麼fillRect命令不允許創建一個命中區域,而rect和fill的組合呢?
這是我的工作JSFIDDLE在那裏我創建了一個帶有命中區域的畫布,並且可以顯示點擊區域的ID。
這是我如何加入災區:
ctx.beginPath();
ctx.rect(0, i, canvasWidth, itemHeight);
ctx.fill();
ctx.addHitRegion({'id': count, 'cursor': 'pointer'});
這裏是只用一個小的變化同樣的例子(,這就是我如何試圖做到這一點最初 - 爲什麼要用2個命令時,我可以使用一個做同樣的?)
ctx.fillRect(0, i, canvasWidth, itemHeight);
ctx.addHitRegion({'id': count, 'cursor': 'pointer'});
不幸的是,這是行不通的,如本JSFIDDLE
控制檯顯示以下錯誤:
Uncaught NotSupportedError: Failed to execute 'addHitRegion' on 'CanvasRenderingContext2D': The specified path has no pixels.
因此它似乎以創建嚴重的地區,不能使用fillRect
命令 - 我無法找到任何解釋這種行爲。
很高興聽到任何想法!
非常感謝,我不知道Context2D有間接和直接的命令!現在我意識到rect會創建一個路徑,fillRect不會。希望這篇文章能夠節省一些人的時間。 – williwaw
Upvote for fillRect vs path命令的一個很好的解釋。你可能會提到'isPointInPath'可以用作「窮人」addHitRegion並且'isPointInPath'得到很好的支持。 – markE