vue-editify 0.2.9 → 0.2.11

Sign up to get free protection for your applications and to get access to all the features.
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 +456 -386
  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 +4 -4
  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 +94 -89
  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,15 +1,17 @@
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
- import { computed, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, ref } from 'vue'
14
+ import { computed, getCurrentInstance, nextTick, onMounted, ref } from 'vue'
13
15
  import { element as DapElement, event as DapEvent } from 'dap-util'
14
16
  import Triangle from '@/components/triangle/triangle.vue'
15
17
  import { TrianglePlacementType } from '@/components/triangle/props'
@@ -44,6 +46,7 @@ const triPlacement = computed<TrianglePlacementType>(() => {
44
46
  }
45
47
  return 'top'
46
48
  })
49
+ //浮层主体样式
47
50
  const wrapStyle = computed<ObjectType>(() => {
48
51
  return {
49
52
  borderColor: props.border ? props.borderColor || '' : '',
@@ -58,9 +61,19 @@ const getNode = () => {
58
61
  return null
59
62
  }
60
63
  if (DapElement.isElement(props.node)) {
61
- return <HTMLElement>props.node
64
+ return props.node as HTMLElement
62
65
  }
63
- return <HTMLElement>document.body.querySelector(<string>props.node)
66
+ return document.body.querySelector(props.node as string) as HTMLElement
67
+ }
68
+ //获取滚动容器元素
69
+ const getScrollNode = () => {
70
+ if (!props.scrollNode) {
71
+ return null
72
+ }
73
+ if (DapElement.isElement(props.scrollNode)) {
74
+ return props.scrollNode as HTMLElement
75
+ }
76
+ return document.body.querySelector(props.scrollNode as string) as HTMLElement
64
77
  }
65
78
  //根据range设置三角形位置
66
79
  const setTrianglePositionByRange = () => {
@@ -168,23 +181,23 @@ const setPositionByRange = () => {
168
181
  const firstRect = rects[0]
169
182
  //range的最后一个位置
170
183
  const lastRect = rects[rects.length - 1]
171
- //定位父元素的位置
172
- const parentRect = DapElement.getElementBounding(<HTMLElement>elRef.value!.offsetParent)
173
184
  //可视窗口高度
174
185
  const documentHeight = document.documentElement.clientHeight || window.innerHeight
175
186
  //可视窗口宽度
176
187
  const documentWidth = document.documentElement.clientWidth || window.innerWidth
188
+ //滚动容器位置
189
+ const scrollRect = DapElement.getElementBounding(getScrollNode() || document.documentElement)
177
190
 
178
191
  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) {
192
+ if (firstRect.top >= scrollRect.top && firstRect.top >= elRef.value!.offsetHeight) {
180
193
  realPlacement.value = props.placement
181
- } else if (documentHeight - lastRect.bottom >= 0 && documentHeight - lastRect.bottom >= parentRect.bottom && documentHeight - lastRect.bottom >= elRef.value!.offsetHeight) {
194
+ } else if (documentHeight - lastRect.bottom >= scrollRect.bottom && documentHeight - lastRect.bottom >= elRef.value!.offsetHeight) {
182
195
  realPlacement.value = props.placement == 'top' ? 'bottom' : props.placement == 'top-start' ? 'bottom-start' : 'bottom-end'
183
196
  }
184
197
  } 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) {
198
+ if (documentHeight - lastRect.bottom >= scrollRect.bottom && documentHeight - lastRect.bottom >= elRef.value!.offsetHeight) {
186
199
  realPlacement.value = props.placement
187
- } else if (firstRect.top >= 0 && firstRect.top >= parentRect.top && firstRect.top >= elRef.value!.offsetHeight) {
200
+ } else if (firstRect.top >= scrollRect.top && firstRect.top >= elRef.value!.offsetHeight) {
188
201
  realPlacement.value = props.placement == 'bottom' ? 'top' : props.placement == 'bottom-start' ? 'top-start' : 'top-end'
189
202
  }
190
203
  }
@@ -238,141 +251,141 @@ const setPositionByRange = () => {
238
251
  nextTick(() => {
239
252
  //设置位置对应的样式
240
253
  if (realPlacement.value == 'top') {
241
- elRef.value!.style.left = firstRect.left - parentRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
254
+ elRef.value!.style.left = firstRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
242
255
  elRef.value!.style.right = 'auto'
243
- elRef.value!.style.top = firstRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
256
+ elRef.value!.style.top = firstRect.top - elRef.value!.offsetHeight + 'px'
244
257
  elRef.value!.style.bottom = 'auto'
245
258
  } else if (realPlacement.value == 'top-start') {
246
- elRef.value!.style.left = firstRect.left - parentRect.left + 'px'
259
+ elRef.value!.style.left = firstRect.left + 'px'
247
260
  elRef.value!.style.right = 'auto'
248
- elRef.value!.style.top = firstRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
261
+ elRef.value!.style.top = firstRect.top - elRef.value!.offsetHeight + 'px'
249
262
  elRef.value!.style.bottom = 'auto'
250
263
  } else if (realPlacement.value == 'top-end') {
251
264
  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'
265
+ elRef.value!.style.right = documentWidth - firstRect.right + 'px'
266
+ elRef.value!.style.top = firstRect.top - elRef.value!.offsetHeight + 'px'
254
267
  elRef.value!.style.bottom = 'auto'
255
268
  } else if (realPlacement.value == 'bottom') {
256
- elRef.value!.style.left = lastRect.left - parentRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
269
+ elRef.value!.style.left = lastRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
257
270
  elRef.value!.style.right = 'auto'
258
271
  elRef.value!.style.top = 'auto'
259
- elRef.value!.style.bottom = documentHeight - lastRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
272
+ elRef.value!.style.bottom = documentHeight - lastRect.bottom - elRef.value!.offsetHeight + 'px'
260
273
  } else if (realPlacement.value == 'bottom-start') {
261
- elRef.value!.style.left = lastRect.left - parentRect.left + 'px'
274
+ elRef.value!.style.left = lastRect.left + 'px'
262
275
  elRef.value!.style.right = 'auto'
263
276
  elRef.value!.style.top = 'auto'
264
- elRef.value!.style.bottom = documentHeight - lastRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
277
+ elRef.value!.style.bottom = documentHeight - lastRect.bottom - elRef.value!.offsetHeight + 'px'
265
278
  } else if (realPlacement.value == 'bottom-end') {
266
279
  elRef.value!.style.left = 'auto'
267
- elRef.value!.style.right = documentWidth - lastRect.right - parentRect.right + 'px'
280
+ elRef.value!.style.right = documentWidth - lastRect.right + 'px'
268
281
  elRef.value!.style.top = 'auto'
269
- elRef.value!.style.bottom = documentHeight - lastRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
282
+ elRef.value!.style.bottom = documentHeight - lastRect.bottom - elRef.value!.offsetHeight + 'px'
270
283
  } else {
271
284
  elRef.value!.style.top = 'auto'
272
- elRef.value!.style.bottom = (parentRect.bottom < 0 ? -parentRect.bottom : 0) + 'px'
285
+ elRef.value!.style.bottom = Math.max(scrollRect.bottom, 0) + 'px'
273
286
  if (props.placement == 'top') {
274
287
  //top-end
275
288
  if (documentWidth - firstRect.right + firstRect.width / 2 < elRef.value!.offsetWidth / 2) {
276
289
  elRef.value!.style.left = 'auto'
277
- elRef.value!.style.right = documentWidth - firstRect.right - parentRect.right + 'px'
290
+ elRef.value!.style.right = documentWidth - firstRect.right + 'px'
278
291
  }
279
292
  //top-start
280
293
  else if (firstRect.left + firstRect.width / 2 < elRef.value!.offsetWidth / 2) {
281
- elRef.value!.style.left = firstRect.left - parentRect.left + 'px'
294
+ elRef.value!.style.left = firstRect.left + 'px'
282
295
  elRef.value!.style.right = 'auto'
283
296
  }
284
297
  //top
285
298
  else {
286
- elRef.value!.style.left = firstRect.left - parentRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
299
+ elRef.value!.style.left = firstRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
287
300
  elRef.value!.style.right = 'auto'
288
301
  }
289
302
  } else if (props.placement == 'bottom') {
290
303
  //bottom-end
291
304
  if (documentWidth - lastRect.right + lastRect.width / 2 < elRef.value!.offsetWidth / 2) {
292
305
  elRef.value!.style.left = 'auto'
293
- elRef.value!.style.right = documentWidth - lastRect.right - parentRect.right + 'px'
306
+ elRef.value!.style.right = documentWidth - lastRect.right + 'px'
294
307
  }
295
308
  //bottom-start
296
309
  else if (lastRect.left + lastRect.width / 2 < elRef.value!.offsetWidth / 2) {
297
- elRef.value!.style.left = lastRect.left - parentRect.left + 'px'
310
+ elRef.value!.style.left = lastRect.left + 'px'
298
311
  elRef.value!.style.right = 'auto'
299
312
  }
300
313
  //bottom
301
314
  else {
302
- elRef.value!.style.left = lastRect.left - parentRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
315
+ elRef.value!.style.left = lastRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
303
316
  elRef.value!.style.right = 'auto'
304
317
  }
305
318
  } else if (props.placement == 'top-start') {
306
319
  if (documentWidth - firstRect.right + firstRect.width < elRef.value!.offsetWidth) {
307
320
  //top
308
321
  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'
322
+ elRef.value!.style.left = firstRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
310
323
  elRef.value!.style.right = 'auto'
311
324
  }
312
325
  //top-end
313
326
  else {
314
327
  elRef.value!.style.left = 'auto'
315
- elRef.value!.style.right = documentWidth - firstRect.right - parentRect.right + 'px'
328
+ elRef.value!.style.right = documentWidth - firstRect.right + 'px'
316
329
  }
317
330
  }
318
331
  //top-start
319
332
  else {
320
- elRef.value!.style.left = firstRect.left - parentRect.left + 'px'
333
+ elRef.value!.style.left = firstRect.left + 'px'
321
334
  elRef.value!.style.right = 'auto'
322
335
  }
323
336
  } else if (props.placement == 'bottom-start') {
324
337
  if (documentWidth - lastRect.right + lastRect.width < elRef.value!.offsetWidth) {
325
338
  //bottom
326
339
  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'
340
+ elRef.value!.style.left = lastRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
328
341
  elRef.value!.style.right = 'auto'
329
342
  }
330
343
  //bottom-end
331
344
  else {
332
345
  elRef.value!.style.left = 'auto'
333
- elRef.value!.style.right = documentWidth - lastRect.right - parentRect.right + 'px'
346
+ elRef.value!.style.right = documentWidth - lastRect.right + 'px'
334
347
  }
335
348
  }
336
349
  //bottom-start
337
350
  else {
338
- elRef.value!.style.left = lastRect.left - parentRect.left + 'px'
351
+ elRef.value!.style.left = lastRect.left + 'px'
339
352
  elRef.value!.style.right = 'auto'
340
353
  }
341
354
  } else if (props.placement == 'top-end') {
342
355
  if (firstRect.left + firstRect.width < elRef.value!.offsetWidth) {
343
356
  //top
344
357
  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'
358
+ elRef.value!.style.left = firstRect.left + firstRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
346
359
  elRef.value!.style.right = 'auto'
347
360
  }
348
361
  //top-start
349
362
  else {
350
- elRef.value!.style.left = firstRect.left - parentRect.left + 'px'
363
+ elRef.value!.style.left = firstRect.left + 'px'
351
364
  elRef.value!.style.right = 'auto'
352
365
  }
353
366
  }
354
367
  //top-end
355
368
  else {
356
369
  elRef.value!.style.left = 'auto'
357
- elRef.value!.style.right = documentWidth - firstRect.right - parentRect.right + 'px'
370
+ elRef.value!.style.right = documentWidth - firstRect.right + 'px'
358
371
  }
359
372
  } else if (props.placement == 'bottom-end') {
360
373
  if (lastRect.left + lastRect.width < elRef.value!.offsetWidth) {
361
374
  //bottom
362
375
  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'
376
+ elRef.value!.style.left = lastRect.left + lastRect.width / 2 - elRef.value!.offsetWidth / 2 + 'px'
364
377
  elRef.value!.style.right = 'auto'
365
378
  }
366
379
  //bottom-start
367
380
  else {
368
- elRef.value!.style.left = lastRect.left - parentRect.left + 'px'
381
+ elRef.value!.style.left = lastRect.left + 'px'
369
382
  elRef.value!.style.right = 'auto'
370
383
  }
371
384
  }
372
385
  //bottom-end
373
386
  else {
374
387
  elRef.value!.style.left = 'auto'
375
- elRef.value!.style.right = documentWidth - lastRect.right - parentRect.right + 'px'
388
+ elRef.value!.style.right = documentWidth - lastRect.right + 'px'
376
389
  }
377
390
  }
378
391
  }
@@ -394,19 +407,19 @@ const setPositionByNode = () => {
394
407
  realPlacement.value = null
395
408
  //关联元素位置
396
409
  const nodeRect = DapElement.getElementBounding(node)
397
- //定位父元素位置
398
- const parentRect = DapElement.getElementBounding(<HTMLElement>elRef.value!.offsetParent)
410
+ //滚动容器位置
411
+ const scrollRect = DapElement.getElementBounding(getScrollNode() || document.documentElement)
399
412
  //设置真实的位置
400
413
  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) {
414
+ if (nodeRect.top >= scrollRect.top && nodeRect.top >= elRef.value!.offsetHeight) {
402
415
  realPlacement.value = props.placement
403
- } else if (nodeRect.bottom >= 0 && nodeRect.bottom >= parentRect.bottom && nodeRect.bottom >= elRef.value!.offsetHeight) {
416
+ } else if (nodeRect.bottom >= scrollRect.bottom && nodeRect.bottom >= elRef.value!.offsetHeight) {
404
417
  realPlacement.value = props.placement == 'top' ? 'bottom' : props.placement == 'top-start' ? 'bottom-start' : 'bottom-end'
405
418
  }
406
419
  } 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) {
420
+ if (nodeRect.bottom >= scrollRect.bottom && nodeRect.bottom >= elRef.value!.offsetHeight) {
408
421
  realPlacement.value = props.placement
409
- } else if (nodeRect.top >= 0 && nodeRect.top >= parentRect.top && nodeRect.top >= elRef.value!.offsetHeight) {
422
+ } else if (nodeRect.top >= scrollRect.top && nodeRect.top >= elRef.value!.offsetHeight) {
410
423
  realPlacement.value = props.placement == 'bottom' ? 'top' : props.placement == 'bottom-start' ? 'top-start' : 'top-end'
411
424
  }
412
425
  }
@@ -460,74 +473,74 @@ const setPositionByNode = () => {
460
473
  nextTick(() => {
461
474
  //设置位置对应的样式
462
475
  if (realPlacement.value == 'top') {
463
- elRef.value!.style.left = nodeRect.left - parentRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
476
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
464
477
  elRef.value!.style.right = 'auto'
465
- elRef.value!.style.top = nodeRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
478
+ elRef.value!.style.top = nodeRect.top - elRef.value!.offsetHeight + 'px'
466
479
  elRef.value!.style.bottom = 'auto'
467
480
  } else if (realPlacement.value == 'top-start') {
468
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
481
+ elRef.value!.style.left = nodeRect.left + 'px'
469
482
  elRef.value!.style.right = 'auto'
470
- elRef.value!.style.top = nodeRect.top - parentRect.top - elRef.value!.offsetHeight + 'px'
483
+ elRef.value!.style.top = nodeRect.top - elRef.value!.offsetHeight + 'px'
471
484
  elRef.value!.style.bottom = 'auto'
472
485
  } else if (realPlacement.value == 'top-end') {
473
486
  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'
487
+ elRef.value!.style.right = nodeRect.right + 'px'
488
+ elRef.value!.style.top = nodeRect.top - elRef.value!.offsetHeight + 'px'
476
489
  elRef.value!.style.bottom = 'auto'
477
490
  } else if (realPlacement.value == 'bottom') {
478
- elRef.value!.style.left = nodeRect.left - parentRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
491
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
479
492
  elRef.value!.style.right = 'auto'
480
493
  elRef.value!.style.top = 'auto'
481
- elRef.value!.style.bottom = nodeRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
494
+ elRef.value!.style.bottom = nodeRect.bottom - elRef.value!.offsetHeight + 'px'
482
495
  } else if (realPlacement.value == 'bottom-start') {
483
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
496
+ elRef.value!.style.left = nodeRect.left + 'px'
484
497
  elRef.value!.style.right = 'auto'
485
498
  elRef.value!.style.top = 'auto'
486
- elRef.value!.style.bottom = nodeRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
499
+ elRef.value!.style.bottom = nodeRect.bottom - elRef.value!.offsetHeight + 'px'
487
500
  } else if (realPlacement.value == 'bottom-end') {
488
501
  elRef.value!.style.left = 'auto'
489
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
502
+ elRef.value!.style.right = nodeRect.right + 'px'
490
503
  elRef.value!.style.top = 'auto'
491
- elRef.value!.style.bottom = nodeRect.bottom - parentRect.bottom - elRef.value!.offsetHeight + 'px'
504
+ elRef.value!.style.bottom = nodeRect.bottom - elRef.value!.offsetHeight + 'px'
492
505
  } else {
493
506
  elRef.value!.style.top = 'auto'
494
- elRef.value!.style.bottom = (parentRect.bottom < 0 ? -parentRect.bottom : 0) + 'px'
507
+ elRef.value!.style.bottom = Math.max(scrollRect.bottom, 0) + 'px'
495
508
  if (props.placement == 'top' || props.placement == 'bottom') {
496
509
  if (nodeRect.right + node.offsetWidth / 2 < elRef.value!.offsetWidth / 2) {
497
510
  elRef.value!.style.left = 'auto'
498
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
511
+ elRef.value!.style.right = nodeRect.right + 'px'
499
512
  } else if (nodeRect.left + node.offsetWidth / 2 < elRef.value!.offsetWidth / 2) {
500
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
513
+ elRef.value!.style.left = nodeRect.left + 'px'
501
514
  elRef.value!.style.right = 'auto'
502
515
  } else {
503
- elRef.value!.style.left = nodeRect.left - parentRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
516
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
504
517
  elRef.value!.style.right = 'auto'
505
518
  }
506
519
  } else if (props.placement == 'top-start' || props.placement == 'bottom-start') {
507
520
  if (nodeRect.right + node.offsetWidth < elRef.value!.offsetWidth) {
508
521
  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'
522
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
510
523
  elRef.value!.style.right = 'auto'
511
524
  } else {
512
525
  elRef.value!.style.left = 'auto'
513
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
526
+ elRef.value!.style.right = nodeRect.right + 'px'
514
527
  }
515
528
  } else {
516
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
529
+ elRef.value!.style.left = nodeRect.left + 'px'
517
530
  elRef.value!.style.right = 'auto'
518
531
  }
519
532
  } else if (props.placement == 'top-end' || props.placement == 'bottom-end') {
520
533
  if (nodeRect.left + node.offsetWidth < elRef.value!.offsetWidth) {
521
534
  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'
535
+ elRef.value!.style.left = nodeRect.left + node.offsetWidth / 2 - elRef.value!.offsetWidth / 2 + 'px'
523
536
  elRef.value!.style.right = 'auto'
524
537
  } else {
525
- elRef.value!.style.left = nodeRect.left - parentRect.left + 'px'
538
+ elRef.value!.style.left = nodeRect.left + 'px'
526
539
  elRef.value!.style.right = 'auto'
527
540
  }
528
541
  } else {
529
542
  elRef.value!.style.left = 'auto'
530
- elRef.value!.style.right = nodeRect.right - parentRect.right + 'px'
543
+ elRef.value!.style.right = nodeRect.right + 'px'
531
544
  }
532
545
  }
533
546
  }
@@ -553,26 +566,21 @@ const handleEnter = (el: Element) => {
553
566
  setPosition()
554
567
  emits('show', el)
555
568
  }
556
- //完全显示后
557
- const handleAfterEnter = (el: Element) => {
558
- emits('shown', el)
559
- }
560
- //完全隐藏后
561
- const handleAfterLeave = (el: Element) => {
562
- emits('hidden', el)
563
- }
564
569
  //窗口尺寸改动
565
570
  const handleResize = () => {
566
571
  if (props.modelValue) {
567
572
  emits('update:modelValue', false)
568
573
  }
569
574
  }
570
- //点击定位父元素外的元素关闭浮层
575
+ //点击定位元素和自身以外的元素关闭浮层
571
576
  const handleClick = (e: Event) => {
572
577
  if (!DapElement.isElement(elRef.value)) {
573
578
  return
574
579
  }
575
- if (DapElement.isContains(<HTMLElement>elRef.value!.offsetParent, <HTMLElement>e.target)) {
580
+ if (DapElement.isContains(elRef.value!, e.target as HTMLElement)) {
581
+ return
582
+ }
583
+ if (!props.useRange && getNode()! && DapElement.isContains(getNode()!, e.target as HTMLElement)) {
576
584
  return
577
585
  }
578
586
  if (props.modelValue) {
@@ -584,12 +592,9 @@ onMounted(() => {
584
592
  if (props.modelValue) {
585
593
  setPosition()
586
594
  }
587
- DapEvent.on(window, `click.editify_layer_${instance.uid}`, handleClick)
595
+ DapEvent.on(window, `mousedown.editify_layer_${instance.uid}`, handleClick)
588
596
  DapEvent.on(window, `resize.editify_layer_${instance.uid}`, handleResize)
589
597
  })
590
- onBeforeUnmount(() => {
591
- DapEvent.off(window, `click.editify_layer_${instance.uid} resize.editify_layer_${instance.uid}`)
592
- })
593
598
 
594
599
  defineExpose({
595
600
  setPosition
@@ -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'] {