vue-editify 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/examples/App.vue +11 -6
  2. package/lib/components/button/button.vue.d.ts +271 -0
  3. package/lib/components/button/props.d.ts +4 -0
  4. package/lib/components/checkbox/checkbox.vue.d.ts +2 -2
  5. package/lib/components/layer/layer.vue.d.ts +12 -3
  6. package/lib/components/layer/props.d.ts +4 -0
  7. package/lib/components/menu/menu.vue.d.ts +12 -0
  8. package/lib/components/menu/props.d.ts +4 -0
  9. package/lib/components/toolbar/props.d.ts +8 -0
  10. package/lib/components/toolbar/toolbar.vue.d.ts +18 -0
  11. package/lib/components/tooltip/props.d.ts +4 -0
  12. package/lib/components/tooltip/tooltip.vue.d.ts +9 -0
  13. package/lib/core/tool.d.ts +7 -0
  14. package/lib/editify/editify.vue.d.ts +89 -28
  15. package/lib/editify/props.d.ts +8 -0
  16. package/lib/editify.es.js +472 -382
  17. package/lib/editify.umd.js +2 -2
  18. package/lib/hljs/index.d.ts +7 -4
  19. package/lib/index.d.ts +90 -29
  20. package/package.json +6 -6
  21. package/src/components/button/button.less +48 -48
  22. package/src/components/button/button.vue +4 -3
  23. package/src/components/button/props.ts +5 -0
  24. package/src/components/layer/layer.less +1 -1
  25. package/src/components/layer/layer.vue +111 -84
  26. package/src/components/layer/props.ts +6 -1
  27. package/src/components/menu/menu.less +0 -1
  28. package/src/components/menu/menu.vue +46 -70
  29. package/src/components/menu/props.ts +5 -0
  30. package/src/components/toolbar/props.ts +10 -0
  31. package/src/components/toolbar/toolbar.vue +49 -49
  32. package/src/components/tooltip/props.ts +5 -0
  33. package/src/components/tooltip/tooltip.less +7 -15
  34. package/src/components/tooltip/tooltip.vue +5 -7
  35. package/src/core/tool.ts +27 -1
  36. package/src/editify/editify.less +0 -5
  37. package/src/editify/editify.vue +10 -6
  38. package/src/editify/props.ts +10 -0
  39. package/src/hljs/index.ts +34 -28
  40. package/src/index.ts +1 -1
@@ -1,12 +1,14 @@
1
1
  <template>
2
- <Transition :name="animation ? 'editify-layer-' + animation : 'editify-layer'" @enter="handleEnter" @after-enter="handleAfterEnter" @after-leave="handleAfterLeave">
3
- <div v-if="modelValue" class="editify-layer" :data-editify-placement="realPlacement || null" :style="{ zIndex: zIndex }" ref="elRef">
4
- <Triangle v-if="showTriangle" :color="border && borderColor ? borderColor : background" :background="background" :placement="triPlacement" ref="triangleRef" />
5
- <div ref="wrapRef" class="editify-layer-wrap" :class="{ 'editify-border': border }" :style="wrapStyle">
6
- <slot></slot>
2
+ <Teleport to="body">
3
+ <Transition :name="animation ? 'editify-layer-' + animation : 'editify-layer'" @enter="handleEnter" @after-enter="el => emits('shown', el)" @after-leave="el => emits('hidden', el)">
4
+ <div v-if="modelValue" class="editify-layer" :data-editify-placement="realPlacement || null" :style="{ zIndex: zIndex }" ref="elRef">
5
+ <Triangle v-if="showTriangle" :color="border && borderColor ? borderColor : background" :background="background" :placement="triPlacement" ref="triangleRef" />
6
+ <div ref="wrapRef" class="editify-layer-wrap" :class="{ 'editify-border': border }" :style="wrapStyle">
7
+ <slot></slot>
8
+ </div>
7
9
  </div>
8
- </div>
9
- </Transition>
10
+ </Transition>
11
+ </Teleport>
10
12
  </template>
11
13
  <script setup lang="ts">
12
14
  import { computed, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref } from 'vue'
@@ -27,6 +29,8 @@ const realPlacement = ref<LayerPlacementType | null>(null)
27
29
  const wrapRef = ref<HTMLElement | null>(null)
28
30
  const elRef = ref<HTMLElement | null>(null)
29
31
  const triangleRef = ref<InstanceType<typeof Triangle> | null>(null)
32
+ const MOUSEDOWN = ref<boolean>(false)
33
+ const MOUSEMOVE = ref<boolean>(false)
30
34
 
31
35
  //三角形位置
32
36
  const triPlacement = computed<TrianglePlacementType>(() => {
@@ -44,6 +48,7 @@ const triPlacement = computed<TrianglePlacementType>(() => {
44
48
  }
45
49
  return 'top'
46
50
  })
51
+ //浮层主体样式
47
52
  const wrapStyle = computed<ObjectType>(() => {
48
53
  return {
49
54
  borderColor: props.border ? props.borderColor || '' : '',
@@ -58,9 +63,19 @@ const getNode = () => {
58
63
  return null
59
64
  }
60
65
  if (DapElement.isElement(props.node)) {
61
- return <HTMLElement>props.node
66
+ return props.node as HTMLElement
62
67
  }
63
- return <HTMLElement>document.body.querySelector(<string>props.node)
68
+ return document.body.querySelector(props.node as string) as HTMLElement
69
+ }
70
+ //获取滚动容器元素
71
+ const getScrollNode = () => {
72
+ if (!props.scrollNode) {
73
+ return null
74
+ }
75
+ if (DapElement.isElement(props.scrollNode)) {
76
+ return props.scrollNode as HTMLElement
77
+ }
78
+ return document.body.querySelector(props.scrollNode as string) as HTMLElement
64
79
  }
65
80
  //根据range设置三角形位置
66
81
  const setTrianglePositionByRange = () => {
@@ -168,23 +183,23 @@ const setPositionByRange = () => {
168
183
  const firstRect = rects[0]
169
184
  //range的最后一个位置
170
185
  const lastRect = rects[rects.length - 1]
171
- //定位父元素的位置
172
- const parentRect = DapElement.getElementBounding(<HTMLElement>elRef.value!.offsetParent)
173
186
  //可视窗口高度
174
187
  const documentHeight = document.documentElement.clientHeight || window.innerHeight
175
188
  //可视窗口宽度
176
189
  const documentWidth = document.documentElement.clientWidth || window.innerWidth
190
+ //滚动容器位置
191
+ const scrollRect = DapElement.getElementBounding(getScrollNode() || document.documentElement)
177
192
 
178
193
  if (props.placement == 'top' || props.placement == 'top-start' || props.placement == 'top-end') {
179
- if (firstRect.top >= 0 && firstRect.top >= parentRect.top && firstRect.top >= elRef.value!.offsetHeight) {
194
+ if (firstRect.top >= scrollRect.top && firstRect.top >= elRef.value!.offsetHeight) {
180
195
  realPlacement.value = props.placement
181
- } else if (documentHeight - lastRect.bottom >= 0 && documentHeight - lastRect.bottom >= parentRect.bottom && documentHeight - lastRect.bottom >= elRef.value!.offsetHeight) {
196
+ } else if (documentHeight - lastRect.bottom >= scrollRect.bottom && documentHeight - lastRect.bottom >= elRef.value!.offsetHeight) {
182
197
  realPlacement.value = props.placement == 'top' ? 'bottom' : props.placement == 'top-start' ? 'bottom-start' : 'bottom-end'
183
198
  }
184
199
  } else if (props.placement == 'bottom' || props.placement == 'bottom-start' || props.placement == 'bottom-end') {
185
- if (documentHeight - lastRect.bottom >= 0 && documentHeight - lastRect.bottom >= parentRect.bottom && documentHeight - lastRect.bottom >= elRef.value!.offsetHeight) {
200
+ if (documentHeight - lastRect.bottom >= scrollRect.bottom && documentHeight - lastRect.bottom >= elRef.value!.offsetHeight) {
186
201
  realPlacement.value = props.placement
187
- } else if (firstRect.top >= 0 && firstRect.top >= parentRect.top && firstRect.top >= elRef.value!.offsetHeight) {
202
+ } else if (firstRect.top >= scrollRect.top && firstRect.top >= elRef.value!.offsetHeight) {
188
203
  realPlacement.value = props.placement == 'bottom' ? 'top' : props.placement == 'bottom-start' ? 'top-start' : 'top-end'
189
204
  }
190
205
  }
@@ -238,141 +253,141 @@ const setPositionByRange = () => {
238
253
  nextTick(() => {
239
254
  //设置位置对应的样式
240
255
  if (realPlacement.value == 'top') {
241
- elRef.value!.style.left = firstRect.left - parentRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
256
+ elRef.value!.style.left = firstRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
242
257
  elRef.value!.style.right = 'auto'
243
- elRef.value!.style.top = firstRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
258
+ elRef.value!.style.top = firstRect.top - elRef.value!.offsetHeight + 'px'
244
259
  elRef.value!.style.bottom = 'auto'
245
260
  } else if (realPlacement.value == 'top-start') {
246
- elRef.value!.style.left = firstRect.left - parentRect.left + 'px'
261
+ elRef.value!.style.left = firstRect.left + 'px'
247
262
  elRef.value!.style.right = 'auto'
248
- elRef.value!.style.top = firstRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
263
+ elRef.value!.style.top = firstRect.top - elRef.value!.offsetHeight + 'px'
249
264
  elRef.value!.style.bottom = 'auto'
250
265
  } else if (realPlacement.value == 'top-end') {
251
266
  elRef.value!.style.left = 'auto'
252
- elRef.value!.style.right = documentWidth - firstRect.right - parentRect.right + 'px'
253
- elRef.value!.style.top = firstRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
267
+ elRef.value!.style.right = documentWidth - firstRect.right + 'px'
268
+ elRef.value!.style.top = firstRect.top - elRef.value!.offsetHeight + 'px'
254
269
  elRef.value!.style.bottom = 'auto'
255
270
  } else if (realPlacement.value == 'bottom') {
256
- elRef.value!.style.left = lastRect.left - parentRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
271
+ elRef.value!.style.left = lastRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
257
272
  elRef.value!.style.right = 'auto'
258
273
  elRef.value!.style.top = 'auto'
259
- elRef.value!.style.bottom = documentHeight - lastRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
274
+ elRef.value!.style.bottom = documentHeight - lastRect.bottom - elRef.value!.offsetHeight + 'px'
260
275
  } else if (realPlacement.value == 'bottom-start') {
261
- elRef.value!.style.left = lastRect.left - parentRect.left + 'px'
276
+ elRef.value!.style.left = lastRect.left + 'px'
262
277
  elRef.value!.style.right = 'auto'
263
278
  elRef.value!.style.top = 'auto'
264
- elRef.value!.style.bottom = documentHeight - lastRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
279
+ elRef.value!.style.bottom = documentHeight - lastRect.bottom - elRef.value!.offsetHeight + 'px'
265
280
  } else if (realPlacement.value == 'bottom-end') {
266
281
  elRef.value!.style.left = 'auto'
267
- elRef.value!.style.right = documentWidth - lastRect.right - parentRect.right + 'px'
282
+ elRef.value!.style.right = documentWidth - lastRect.right + 'px'
268
283
  elRef.value!.style.top = 'auto'
269
- elRef.value!.style.bottom = documentHeight - lastRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
284
+ elRef.value!.style.bottom = documentHeight - lastRect.bottom - elRef.value!.offsetHeight + 'px'
270
285
  } else {
271
286
  elRef.value!.style.top = 'auto'
272
- elRef.value!.style.bottom = (parentRect.bottom < 0 ? -parentRect.bottom : 0) + 'px'
287
+ elRef.value!.style.bottom = Math.max(scrollRect.bottom, 0) + 'px'
273
288
  if (props.placement == 'top') {
274
289
  //top-end
275
290
  if (documentWidth - firstRect.right + firstRect.width / 2 < elRef.value!.offsetWidth / 2) {
276
291
  elRef.value!.style.left = 'auto'
277
- elRef.value!.style.right = documentWidth - firstRect.right - parentRect.right + 'px'
292
+ elRef.value!.style.right = documentWidth - firstRect.right + 'px'
278
293
  }
279
294
  //top-start
280
295
  else if (firstRect.left + firstRect.width / 2 < elRef.value!.offsetWidth / 2) {
281
- elRef.value!.style.left = firstRect.left - parentRect.left + 'px'
296
+ elRef.value!.style.left = firstRect.left + 'px'
282
297
  elRef.value!.style.right = 'auto'
283
298
  }
284
299
  //top
285
300
  else {
286
- elRef.value!.style.left = firstRect.left - parentRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
301
+ elRef.value!.style.left = firstRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
287
302
  elRef.value!.style.right = 'auto'
288
303
  }
289
304
  } else if (props.placement == 'bottom') {
290
305
  //bottom-end
291
306
  if (documentWidth - lastRect.right + lastRect.width / 2 < elRef.value!.offsetWidth / 2) {
292
307
  elRef.value!.style.left = 'auto'
293
- elRef.value!.style.right = documentWidth - lastRect.right - parentRect.right + 'px'
308
+ elRef.value!.style.right = documentWidth - lastRect.right + 'px'
294
309
  }
295
310
  //bottom-start
296
311
  else if (lastRect.left + lastRect.width / 2 < elRef.value!.offsetWidth / 2) {
297
- elRef.value!.style.left = lastRect.left - parentRect.left + 'px'
312
+ elRef.value!.style.left = lastRect.left + 'px'
298
313
  elRef.value!.style.right = 'auto'
299
314
  }
300
315
  //bottom
301
316
  else {
302
- elRef.value!.style.left = lastRect.left - parentRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
317
+ elRef.value!.style.left = lastRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
303
318
  elRef.value!.style.right = 'auto'
304
319
  }
305
320
  } else if (props.placement == 'top-start') {
306
321
  if (documentWidth - firstRect.right + firstRect.width < elRef.value!.offsetWidth) {
307
322
  //top
308
323
  if (documentWidth - firstRect.right + firstRect.width / 2 >= elRef.value!.offsetWidth / 2) {
309
- elRef.value!.style.left = firstRect.left - parentRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
324
+ elRef.value!.style.left = firstRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
310
325
  elRef.value!.style.right = 'auto'
311
326
  }
312
327
  //top-end
313
328
  else {
314
329
  elRef.value!.style.left = 'auto'
315
- elRef.value!.style.right = documentWidth - firstRect.right - parentRect.right + 'px'
330
+ elRef.value!.style.right = documentWidth - firstRect.right + 'px'
316
331
  }
317
332
  }
318
333
  //top-start
319
334
  else {
320
- elRef.value!.style.left = firstRect.left - parentRect.left + 'px'
335
+ elRef.value!.style.left = firstRect.left + 'px'
321
336
  elRef.value!.style.right = 'auto'
322
337
  }
323
338
  } else if (props.placement == 'bottom-start') {
324
339
  if (documentWidth - lastRect.right + lastRect.width < elRef.value!.offsetWidth) {
325
340
  //bottom
326
341
  if (documentWidth - lastRect.right + lastRect.width / 2 >= elRef.value!.offsetWidth / 2) {
327
- elRef.value!.style.left = lastRect.left - parentRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
342
+ elRef.value!.style.left = lastRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
328
343
  elRef.value!.style.right = 'auto'
329
344
  }
330
345
  //bottom-end
331
346
  else {
332
347
  elRef.value!.style.left = 'auto'
333
- elRef.value!.style.right = documentWidth - lastRect.right - parentRect.right + 'px'
348
+ elRef.value!.style.right = documentWidth - lastRect.right + 'px'
334
349
  }
335
350
  }
336
351
  //bottom-start
337
352
  else {
338
- elRef.value!.style.left = lastRect.left - parentRect.left + 'px'
353
+ elRef.value!.style.left = lastRect.left + 'px'
339
354
  elRef.value!.style.right = 'auto'
340
355
  }
341
356
  } else if (props.placement == 'top-end') {
342
357
  if (firstRect.left + firstRect.width < elRef.value!.offsetWidth) {
343
358
  //top
344
359
  if (firstRect.left + firstRect.width / 2 >= elRef.value!.offsetWidth / 2) {
345
- elRef.value!.style.left = firstRect.left - parentRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
360
+ elRef.value!.style.left = firstRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
346
361
  elRef.value!.style.right = 'auto'
347
362
  }
348
363
  //top-start
349
364
  else {
350
- elRef.value!.style.left = firstRect.left - parentRect.left + 'px'
365
+ elRef.value!.style.left = firstRect.left + 'px'
351
366
  elRef.value!.style.right = 'auto'
352
367
  }
353
368
  }
354
369
  //top-end
355
370
  else {
356
371
  elRef.value!.style.left = 'auto'
357
- elRef.value!.style.right = documentWidth - firstRect.right - parentRect.right + 'px'
372
+ elRef.value!.style.right = documentWidth - firstRect.right + 'px'
358
373
  }
359
374
  } else if (props.placement == 'bottom-end') {
360
375
  if (lastRect.left + lastRect.width < elRef.value!.offsetWidth) {
361
376
  //bottom
362
377
  if (lastRect.left + lastRect.width / 2 >= elRef.value!.offsetWidth / 2) {
363
- elRef.value!.style.left = lastRect.left - parentRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
378
+ elRef.value!.style.left = lastRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
364
379
  elRef.value!.style.right = 'auto'
365
380
  }
366
381
  //bottom-start
367
382
  else {
368
- elRef.value!.style.left = lastRect.left - parentRect.left + 'px'
383
+ elRef.value!.style.left = lastRect.left + 'px'
369
384
  elRef.value!.style.right = 'auto'
370
385
  }
371
386
  }
372
387
  //bottom-end
373
388
  else {
374
389
  elRef.value!.style.left = 'auto'
375
- elRef.value!.style.right = documentWidth - lastRect.right - parentRect.right + 'px'
390
+ elRef.value!.style.right = documentWidth - lastRect.right + 'px'
376
391
  }
377
392
  }
378
393
  }
@@ -394,19 +409,19 @@ const setPositionByNode = () => {
394
409
  realPlacement.value = null
395
410
  //关联元素位置
396
411
  const nodeRect = DapElement.getElementBounding(node)
397
- //定位父元素位置
398
- const parentRect = DapElement.getElementBounding(<HTMLElement>elRef.value!.offsetParent)
412
+ //滚动容器位置
413
+ const scrollRect = DapElement.getElementBounding(getScrollNode() || document.documentElement)
399
414
  //设置真实的位置
400
415
  if (props.placement == 'top' || props.placement == 'top-start' || props.placement == 'top-end') {
401
- if (nodeRect.top >= 0 && nodeRect.top >= parentRect.top && nodeRect.top >= elRef.value!.offsetHeight) {
416
+ if (nodeRect.top >= scrollRect.top && nodeRect.top >= elRef.value!.offsetHeight) {
402
417
  realPlacement.value = props.placement
403
- } else if (nodeRect.bottom >= 0 && nodeRect.bottom >= parentRect.bottom && nodeRect.bottom >= elRef.value!.offsetHeight) {
418
+ } else if (nodeRect.bottom >= scrollRect.bottom && nodeRect.bottom >= elRef.value!.offsetHeight) {
404
419
  realPlacement.value = props.placement == 'top' ? 'bottom' : props.placement == 'top-start' ? 'bottom-start' : 'bottom-end'
405
420
  }
406
421
  } else if (props.placement == 'bottom' || props.placement == 'bottom-start' || props.placement == 'bottom-end') {
407
- if (nodeRect.bottom >= 0 && nodeRect.bottom >= parentRect.bottom && nodeRect.bottom >= elRef.value!.offsetHeight) {
422
+ if (nodeRect.bottom >= scrollRect.bottom && nodeRect.bottom >= elRef.value!.offsetHeight) {
408
423
  realPlacement.value = props.placement
409
- } else if (nodeRect.top >= 0 && nodeRect.top >= parentRect.top && nodeRect.top >= elRef.value!.offsetHeight) {
424
+ } else if (nodeRect.top >= scrollRect.top && nodeRect.top >= elRef.value!.offsetHeight) {
410
425
  realPlacement.value = props.placement == 'bottom' ? 'top' : props.placement == 'bottom-start' ? 'top-start' : 'top-end'
411
426
  }
412
427
  }
@@ -460,74 +475,74 @@ const setPositionByNode = () => {
460
475
  nextTick(() => {
461
476
  //设置位置对应的样式
462
477
  if (realPlacement.value == 'top') {
463
- elRef.value!.style.left = nodeRect.left - parentRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
478
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
464
479
  elRef.value!.style.right = 'auto'
465
- elRef.value!.style.top = nodeRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
480
+ elRef.value!.style.top = nodeRect.top - elRef.value!.offsetHeight + 'px'
466
481
  elRef.value!.style.bottom = 'auto'
467
482
  } else if (realPlacement.value == 'top-start') {
468
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
483
+ elRef.value!.style.left = nodeRect.left + 'px'
469
484
  elRef.value!.style.right = 'auto'
470
- elRef.value!.style.top = nodeRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
485
+ elRef.value!.style.top = nodeRect.top - elRef.value!.offsetHeight + 'px'
471
486
  elRef.value!.style.bottom = 'auto'
472
487
  } else if (realPlacement.value == 'top-end') {
473
488
  elRef.value!.style.left = 'auto'
474
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
475
- elRef.value!.style.top = nodeRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
489
+ elRef.value!.style.right = nodeRect.right + 'px'
490
+ elRef.value!.style.top = nodeRect.top - elRef.value!.offsetHeight + 'px'
476
491
  elRef.value!.style.bottom = 'auto'
477
492
  } else if (realPlacement.value == 'bottom') {
478
- elRef.value!.style.left = nodeRect.left - parentRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
493
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
479
494
  elRef.value!.style.right = 'auto'
480
495
  elRef.value!.style.top = 'auto'
481
- elRef.value!.style.bottom = nodeRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
496
+ elRef.value!.style.bottom = nodeRect.bottom - elRef.value!.offsetHeight + 'px'
482
497
  } else if (realPlacement.value == 'bottom-start') {
483
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
498
+ elRef.value!.style.left = nodeRect.left + 'px'
484
499
  elRef.value!.style.right = 'auto'
485
500
  elRef.value!.style.top = 'auto'
486
- elRef.value!.style.bottom = nodeRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
501
+ elRef.value!.style.bottom = nodeRect.bottom - elRef.value!.offsetHeight + 'px'
487
502
  } else if (realPlacement.value == 'bottom-end') {
488
503
  elRef.value!.style.left = 'auto'
489
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
504
+ elRef.value!.style.right = nodeRect.right + 'px'
490
505
  elRef.value!.style.top = 'auto'
491
- elRef.value!.style.bottom = nodeRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
506
+ elRef.value!.style.bottom = nodeRect.bottom - elRef.value!.offsetHeight + 'px'
492
507
  } else {
493
508
  elRef.value!.style.top = 'auto'
494
- elRef.value!.style.bottom = (parentRect.bottom < 0 ? -parentRect.bottom : 0) + 'px'
509
+ elRef.value!.style.bottom = Math.max(scrollRect.bottom, 0) + 'px'
495
510
  if (props.placement == 'top' || props.placement == 'bottom') {
496
511
  if (nodeRect.right + node.offsetWidth / 2 < elRef.value!.offsetWidth / 2) {
497
512
  elRef.value!.style.left = 'auto'
498
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
513
+ elRef.value!.style.right = nodeRect.right + 'px'
499
514
  } else if (nodeRect.left + node.offsetWidth / 2 < elRef.value!.offsetWidth / 2) {
500
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
515
+ elRef.value!.style.left = nodeRect.left + 'px'
501
516
  elRef.value!.style.right = 'auto'
502
517
  } else {
503
- elRef.value!.style.left = nodeRect.left - parentRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
518
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
504
519
  elRef.value!.style.right = 'auto'
505
520
  }
506
521
  } else if (props.placement == 'top-start' || props.placement == 'bottom-start') {
507
522
  if (nodeRect.right + node.offsetWidth < elRef.value!.offsetWidth) {
508
523
  if (nodeRect.right + node.offsetWidth / 2 >= elRef.value!.offsetWidth / 2) {
509
- elRef.value!.style.left = nodeRect.left - parentRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
524
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
510
525
  elRef.value!.style.right = 'auto'
511
526
  } else {
512
527
  elRef.value!.style.left = 'auto'
513
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
528
+ elRef.value!.style.right = nodeRect.right + 'px'
514
529
  }
515
530
  } else {
516
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
531
+ elRef.value!.style.left = nodeRect.left + 'px'
517
532
  elRef.value!.style.right = 'auto'
518
533
  }
519
534
  } else if (props.placement == 'top-end' || props.placement == 'bottom-end') {
520
535
  if (nodeRect.left + node.offsetWidth < elRef.value!.offsetWidth) {
521
536
  if (nodeRect.left + node.offsetWidth / 2 >= elRef.value!.offsetWidth / 2) {
522
- elRef.value!.style.left = nodeRect.left - parentRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
537
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
523
538
  elRef.value!.style.right = 'auto'
524
539
  } else {
525
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
540
+ elRef.value!.style.left = nodeRect.left + 'px'
526
541
  elRef.value!.style.right = 'auto'
527
542
  }
528
543
  } else {
529
544
  elRef.value!.style.left = 'auto'
530
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
545
+ elRef.value!.style.right = nodeRect.right + 'px'
531
546
  }
532
547
  }
533
548
  }
@@ -553,26 +568,25 @@ const handleEnter = (el: Element) => {
553
568
  setPosition()
554
569
  emits('show', el)
555
570
  }
556
- //完全显示后
557
- const handleAfterEnter = (el: Element) => {
558
- emits('shown', el)
559
- }
560
- //完全隐藏后
561
- const handleAfterLeave = (el: Element) => {
562
- emits('hidden', el)
563
- }
564
571
  //窗口尺寸改动
565
572
  const handleResize = () => {
566
573
  if (props.modelValue) {
567
574
  emits('update:modelValue', false)
568
575
  }
569
576
  }
570
- //点击定位父元素外的元素关闭浮层
577
+ //点击定位元素和自身以外的元素关闭浮层
571
578
  const handleClick = (e: Event) => {
579
+ //如果鼠标移动了则不是点击事件
580
+ if (MOUSEMOVE.value) {
581
+ return
582
+ }
572
583
  if (!DapElement.isElement(elRef.value)) {
573
584
  return
574
585
  }
575
- if (DapElement.isContains(<HTMLElement>elRef.value!.offsetParent, <HTMLElement>e.target)) {
586
+ if (DapElement.isContains(elRef.value!, e.target as HTMLElement)) {
587
+ return
588
+ }
589
+ if (!props.useRange && getNode()! && DapElement.isContains(getNode()!, e.target as HTMLElement)) {
576
590
  return
577
591
  }
578
592
  if (props.modelValue) {
@@ -584,6 +598,19 @@ onMounted(() => {
584
598
  if (props.modelValue) {
585
599
  setPosition()
586
600
  }
601
+ DapEvent.on(window, `mousedown.editify_layer_${instance.uid} mousemove.editify_layer_${instance.uid} mouseup.editify_layer_${instance.uid}`, e => {
602
+ if (e.type == 'mousedown') {
603
+ MOUSEDOWN.value = true
604
+ MOUSEMOVE.value = false
605
+ } else if (e.type == 'mousemove') {
606
+ if (MOUSEDOWN.value) {
607
+ MOUSEMOVE.value = true
608
+ }
609
+ } else if (e.type == 'mouseup') {
610
+ MOUSEDOWN.value = false
611
+ }
612
+ })
613
+
587
614
  DapEvent.on(window, `click.editify_layer_${instance.uid}`, handleClick)
588
615
  DapEvent.on(window, `resize.editify_layer_${instance.uid}`, handleResize)
589
616
  })
@@ -15,6 +15,11 @@ export const LayerProps = {
15
15
  type: [String, HTMLElement] as PropType<string | HTMLElement | null>,
16
16
  default: null
17
17
  },
18
+ //关联滚动容器元素,为toolbar设计使用的属性
19
+ scrollNode: {
20
+ type: [String, HTMLElement] as PropType<string | HTMLElement | null>,
21
+ default: null
22
+ },
18
23
  //是否显示边框
19
24
  border: {
20
25
  type: Boolean,
@@ -51,7 +56,7 @@ export const LayerProps = {
51
56
  //层级
52
57
  zIndex: {
53
58
  type: Number,
54
- default: 10
59
+ default: 1
55
60
  },
56
61
  //动画
57
62
  animation: {
@@ -5,7 +5,6 @@
5
5
  width: 100%;
6
6
  background-color: var(--editify-background);
7
7
  position: relative;
8
- z-index: 2;
9
8
 
10
9
  //默认菜单模式
11
10
  &[data-editify-mode='default'] {