Fabric.js?監(jiān)聽元素是否相交重疊
正文
fabric.js 提供了一個方法可以檢查對象是否與另一個對象相交(也可以叫元素是否重疊)。
這個方法叫 intersectsWithObject()。
本文主要想提一下 fabric.js 存在這么一個方便的方法。
檢測元素是否相交有什么用呢?
這個功能在日常開發(fā)中其實很實用,在它的幫助下我們可以實現(xiàn)“防止對象碰撞”、“對象自動對齊貼合”等功能。
動手試試看
為了演示 intersectsWithObject() ,我打算做如下操作:
- 創(chuàng)建畫布
- 創(chuàng)建矩形、圓形、三角形元素,并將它們添加到畫布里
- 使用
canvas.on('object:moving')監(jiān)聽圖形元素移動 - 元素移動的過程中不斷遍歷畫布當前所有元素,如果正在移動的元素和其他圖形相交了,就在控制臺輸出被相交的元素的類型。
在“第4點”里,使用了 intersectsWithObject() 方法判斷元素是否相交,如果相交就會返回 true。
詳情請看下方代碼及注釋。

<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)
// 監(jiān)聽對象移動
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個參數(shù),用法如下:
intersectsWithObject(other, absoluteopt, calculateopt)
other: Object類型,要檢測的對象absoluteopt: Boolean類型,使用不帶viewportTransform的坐標calculateopt: Boolean類型,使用當前位置的坐標代替
代碼倉庫
? intersectsWithObject檢測對象是否相交
以上就是Fabric.js 監(jiān)聽元素是否相交重疊的詳細內(nèi)容,更多關(guān)于Fabric.js 監(jiān)聽元素的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript深拷貝方法structuredClone使用
這篇文章主要為大家介紹了JavaScript深拷貝方法structuredClone使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
umi插件開發(fā)仿dumi項目實現(xiàn)markdown文件轉(zhuǎn)為頁面
這篇文章主要介紹了umi插件開發(fā)仿dumi項目實現(xiàn)markdown文件轉(zhuǎn)為頁面方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
javascript使用btoa和atob來進行Base64轉(zhuǎn)碼和解碼
javascript原生的api本來就支持,Base64,但是由于之前的javascript局限性,導致Base64基本中看不中用。當前html5標準正式化之際,Base64將有較大的轉(zhuǎn)型空間,對于Html5 Api中出現(xiàn)的如FileReader Api, 拖拽上傳,甚至是Canvas,Video截圖都可以實現(xiàn)2017-03-03
TypeScript新語法之infer?extends示例詳解
這篇文章主要為大家介紹了TypeScript新語法之infer?extends示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
lodash內(nèi)部方法getData和setData實例解析
本篇章我們將了解lodash里內(nèi)部關(guān)于Data的操作方法,重點關(guān)注getData、setData兩個內(nèi)部方法,同時由實現(xiàn)上引申其他內(nèi)部封裝的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

