@@ -48,10 +48,11 @@ export class SnaplineModel {
48
48
const item = nodes [ i ]
49
49
// 排除当前节点
50
50
if ( item . id !== draggingNode . id ) {
51
- if ( x === item . x ) {
51
+ const epsilon = 1
52
+ if ( equal ( x , item . x , epsilon ) ) {
52
53
isShowVertical = true
53
54
}
54
- if ( y === item . y ) {
55
+ if ( equal ( y , item . y , epsilon ) ) {
55
56
isShowHorizontal = true
56
57
}
57
58
// 如果水平垂直都显示,则停止循环。减少不必要的遍历
@@ -95,19 +96,21 @@ export class SnaplineModel {
95
96
// 排除当前节点
96
97
if ( item . id !== draggingNode . id ) {
97
98
const itemData = getNodeBBox ( item )
99
+
98
100
// 如果节点的最大最小Y轴坐标与节点的最大最小Y轴坐标相等,展示水平线
101
+ const epsilon = 1
99
102
if (
100
- itemData . minY === draggingData ?. minY ||
101
- itemData . maxY === draggingData ?. minY
103
+ equal ( itemData . minY , draggingData ?. minY , epsilon ) ||
104
+ equal ( itemData . maxY , draggingData ?. minY , epsilon )
102
105
) {
103
106
// 找到则停止循环。减少不必要的遍历
104
107
isShowHorizontal = true
105
108
horizontalY = draggingData . minY
106
109
break
107
110
}
108
111
if (
109
- itemData . minY === draggingData ?. maxY ||
110
- itemData . maxY === draggingData ?. maxY
112
+ equal ( itemData . minY , draggingData ?. maxY , epsilon ) ||
113
+ equal ( itemData . maxY , draggingData ?. maxY , epsilon )
111
114
) {
112
115
isShowHorizontal = true
113
116
horizontalY = draggingData . maxY
@@ -151,18 +154,19 @@ export class SnaplineModel {
151
154
if ( item . id !== draggingNode . id ) {
152
155
const itemData = getNodeBBox ( item )
153
156
// 如果节点的最大最小X轴坐标与节点的最大最小X轴坐标相等,展示垂直线
157
+ const epsilon = 1
154
158
if (
155
- itemData . minX === draggingData ?. minX ||
156
- itemData . maxX === draggingData ?. minX
159
+ equal ( itemData . minX , draggingData ?. minX , epsilon ) ||
160
+ equal ( itemData . maxX , draggingData ?. minX , epsilon )
157
161
) {
158
162
// 找到则停止循环。减少不必要的遍历
159
163
isShowVertical = true
160
164
verticalX = draggingData . minX
161
165
break
162
166
}
163
167
if (
164
- itemData . minX === draggingData ?. maxX ||
165
- itemData . maxX === draggingData ?. maxX
168
+ equal ( itemData . minX , draggingData ?. maxX , epsilon ) ||
169
+ equal ( itemData . maxX , draggingData ?. maxX , epsilon )
166
170
) {
167
171
isShowVertical = true
168
172
verticalX = draggingData . maxX
@@ -235,4 +239,12 @@ export class SnaplineModel {
235
239
}
236
240
}
237
241
242
+ function equal ( num1 : number , num2 : number , epsilon : number ) {
243
+ if ( Math . abs ( num1 - num2 ) <= epsilon ) {
244
+ return true
245
+ } else {
246
+ return false
247
+ }
248
+ }
249
+
238
250
export default SnaplineModel
0 commit comments