hehedada__ 2023-01-16 17:26 采纳率: 0%
浏览 277

fabric.js添加多个线条并且都加上鼠标悬浮事件,层级原因导致不生效

fabric.js 创建多个Line(线条)对象,这些线条是连接在一起的,并设置Line(线条)的鼠标悬浮事件失效,原因是Line(线条)的层级不在最上层,只有最后一次canvas.add的Line(线条)的悬浮事件是生效的。但是如果鼠标选中一条Line(线条),这条线就会到最上层,鼠标悬浮事件就生效了。这个问题该怎么解决

官方文档实在看不懂,焦头烂额的
下方代码是添加线条以及给线条增加鼠标悬浮和鼠标移出线条的事件

this.tree = new fabric.Line([1700, 371, 180, 371], {
  shadow:shadow2,
  stroke: '#FFFFCC',
  strokeWidth: 4
});
this.canvas.add(this.tree)
this.tree.on("mouseover", (opt)=> {
  this.tree.set('stroke','black')
  // tree.set('strokeDashArray',[5, 5])
  // tree.set('stroke','black')
  this.canvas.renderAll();
})
this.tree.on("mouseout", (opt)=> {
  this.tree.set('stroke','#FFFFFF')
  this.canvas.renderAll();
})

有没有懂哥可以给解答一下,万分感谢

  • 写回答

2条回答 默认 最新

  • 流比 2023-01-16 23:12
    关注

    这个问题是由于Line对象被其他对象覆盖,导致鼠标事件无法触发。

    解决方法:

    可以使用canvas.bringToFront()方法将Line对象置于最上层。

    this.tree.on("mouseover", (opt)=> {
      this.tree.set('stroke','black')
      this.canvas.bringToFront(this.tree);
      this.canvas.renderAll();
    })
    
    

    可以使用canvas.sendToBack()方法将Line对象置于最下层。

    this.tree.on("mouseout", (opt)=> {
      this.tree.set('stroke','#FFFFFF')
      this.canvas.sendToBack(this.tree);
      this.canvas.renderAll();
    })
    
    

    使用canvas.moveTo()方法可以将线条移动到特定的层级。

    this.tree.on("mouseover", (opt)=> {
      this.tree.set('stroke','black')
      this.canvas.moveTo(this.tree, 1);
      this.canvas.renderAll();
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月16日

悬赏问题

  • ¥15 C++ 句柄后台鼠标拖动如何实现
  • ¥15 有人会SIRIUS 5.8.0这个软件吗
  • ¥30 comsol仿真等离激元
  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题