如题,canvas 绘制完一张png图片后(注意是图片),只想在有图形的地方上响应mousemove事件改变鼠标样式,而不是透明的地方。
就是在下面这个canvas中,画了一张透明底的图片,只想在透明底图片中的黄色部分响应鼠标事件,而不想一移动到上透明底图片的透明部分就响应鼠标事件。
想知道有没有什么方法可以完成这个操作?因为在某个地方看到了这个操作,但不知道该怎么实现,是需要SVG转canvas嘛?有没有什么canvas库可以推荐一下呢?
感谢大佬们!
如题,canvas 绘制完一张png图片后(注意是图片),只想在有图形的地方上响应mousemove事件改变鼠标样式,而不是透明的地方。
就是在下面这个canvas中,画了一张透明底的图片,只想在透明底图片中的黄色部分响应鼠标事件,而不想一移动到上透明底图片的透明部分就响应鼠标事件。
想知道有没有什么方法可以完成这个操作?因为在某个地方看到了这个操作,但不知道该怎么实现,是需要SVG转canvas嘛?有没有什么canvas库可以推荐一下呢?
感谢大佬们!
憋死我了!为什么自己的问题要一个小时之后才能回答。上面的兄弟,回答错了,说了是图片不是图形啦~
stackoverflow上有人回答我了
是用getImageDate()先获取图片数据const pixel = canvas.getImageData(x, y, 1, 1).data;
然后判断鼠标下方的像素点的RGBA值中的A值为0还是为1。就可以判断是不是在图片的透明区域了。
13 回答13k 阅读
8 回答2.7k 阅读
2 回答5.2k 阅读✓ 已解决
7 回答2.1k 阅读
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
canvas没办法直接知道某一个点下面是什么,但我们可以使用空间分析去粗略的计算,对于简单图形这个计算也会比较简单,但这是有前提的。
比如你这里就需要预先知道黄色部分在canvas中的中心点位置和半径(可通过相对图片大小,图片位置,图片大小等计算),如果这个不知道,也就把下面的路堵死了。知道这个后可以通过判断鼠标是否落在圆形区域来判断。
再说个不大适用的,如果你的canvas中需要判断的地方颜色是仅有的,那么还可以通过获取canvas在该地方的颜色值进行判断,这个颜色值应该是一个区间,而不是一个固定值