美文网首页
Fabric.js 监听元素相交(重叠)

Fabric.js 监听元素相交(重叠)

作者: 德育处主任 | 来源:发表于2022-12-25 14:25 被阅读0次

本文简介

点赞 + 关注 + 收藏 = 学会了

fabric.js 提供了一个方法可以检查对象是否与另一个对象相交(也可以叫元素是否重叠)。

这个方法叫 intersectsWithObject()

本文主要想提一下 fabric.js 存在这么一个方便的方法。

检测元素是否相交有什么用呢?

这个功能在日常开发中其实很实用,在它的帮助下我们可以实现“防止对象碰撞”、“对象自动对齐贴合”等功能。

动手试试看

为了演示 intersectsWithObject() ,我打算做如下操作:

  1. 创建画布
  2. 创建矩形、圆形、三角形元素,并将它们添加到画布里
  3. 使用 canvas.on('object:moving') 监听图形元素移动
  4. 元素移动的过程中不断遍历画布当前所有元素,如果正在移动的元素和其他图形相交了,就在控制台输出被相交的元素的类型。

在“第4点”里,使用了 intersectsWithObject() 方法判断元素是否相交,如果相交就会返回 true

详情请看下方代码及注释。

file
<canvas id="c" width="500" height="500" style="border: 1px solid #ccc;"></canvas>

<script src="../js/fabric.js"></script>
<script>
  let canvas = new fabric.Canvas('c')

  // 矩形 - 亮粉色
  let rect = new fabric.Rect({
    left: 260,
    top: 110,
    width: 80,
    height: 60,
    fill: 'hotpink'
  })

  // 圆形 - 黄绿色
  let circle = new fabric.Circle({
    top: 200,
    left: 150,
    radius: 30,
    fill: 'yellowgreen'
  })

  // 三角形 - 天蓝色
  let triangle = new fabric.Triangle({
    width: 100,
    height: 100,
    left: 300,
    top: 200,
    fill: 'skyblue'
  })

  // 将矩形、圆形、三角形添加到画布中
  canvas.add(rect, circle, triangle)

  // 监听对象移动
  canvas.on('object:moving', function(options) {

    // 通过 canvas.forEachObject 遍历画布上所有元素
    canvas.forEachObject(function(obj) {

      // 排除当前正在移动的元素
      if (obj === options.target) return

      // 检查对象是否与另一个对象相交
      if (options.target.intersectsWithObject(obj)) {
        // 输出当前被接触的对象类型
        console.log(obj.type)
      }
    })
  })
</script>

以上就是 intersectsWithObject() 的基本用法。

其实 intersectsWithObject() 可以传入3个参数,用法如下:

intersectsWithObject(other, absoluteopt, calculateopt)
  • other: Object类型,要检测的对象
  • absoluteopt: Boolean类型,使用不带 viewportTransform 的坐标
  • calculateopt: Boolean类型,使用当前位置的坐标代替

代码仓库

intersectsWithObject检测对象是否相交

推荐阅读

点赞 + 关注 + 收藏 = 学会了

我最近在编写《Fabric.js 中文教程》,希望这份教程能帮到你和你的朋友~

其他推荐:

👍《Fabric.js 喷雾笔刷 从入门到放肆》

👍《Fabric.js 自定义子类,创建属于自己的图形》

👍《Fabric.js 自定义选框样式》

👍《Fabric.js 元素中心缩放》

👍《Fabric.js 动态设置字号大小》

👍《Fabric.js 橡皮擦的用法(包含恢复功能)》

本文参考了 Intersection 实例:http://fabricjs.com/intersection
代码仓库

相关文章

  • Fabric.js 监听元素相交(重叠)

    本文简介 点赞 + 关注 + 收藏 = 学会了 fabric.js 提供了一个方法可以检查对象是否与另一个对象相交...

  • Fabric.js 控制元素层级

    本文简介 点赞 + 关注 + 收藏 = 学会了 元素是 Fabric.js 的重要组成部分,如果画布上没有元素,那...

  • DOM事件委托

    使用场景 监听重复的事件===>用于节省监听数(内存小) 监听当前暂时还没有的元素===>动态监听元素 使用方法

  • 前端面试题——事件代理 delegate 的实现(一)

    当我们需要监听某个元素被点击的时候,我们会给这个元素添加事件监听器 事件监听器只会绑定到当前 DOM 中已有的元素...

  • CSS z-index

    当对多个元素同时设置定位时,定位元素可能会发生重叠。想要调整重叠定位元素的堆叠顺序,可以对定位元素应用z-inde...

  • Fabric.js IText设置指定文字的颜色和背景色

    本文简介 点赞 + 关注 + 收藏 = 学会了 IText 是 Fabric.js 提供的一个 可编辑文本 的元素...

  • 判断矩形是否相交以及求出相交的区域(含Demo)

    设计一个算法,确定两个矩形是否相交(即有重叠区域) 如果两个矩形相交,设计一个算法,画出相交的区域矩形 拖动矩形,...

  • Fabric.js 居中元素

    本文简介 点赞 + 关注 + 评论 = 学会了 在使用 Fabric.js 开发时,可能会需要将元素居中。 本文总...

  • Fabric.js 元素中心缩放

    本文简介 点赞 + 关注 + 收藏 = 学会了 使用 fabric.js 创建的图形,默认的缩放原点是元素操作点的...

  • 07-表单和Hack(补)

    盒子在与父元素重叠的时候设置padding内边距解决 table可以阻止父子元素的重叠 或者before添加 di...

网友评论

      本文标题:Fabric.js 监听元素相交(重叠)

      本文链接:https://www.haomeiwen.com/subject/zokgqdtx.html