feat(core): add dragging class to pane
This commit is contained in:
@@ -88,6 +88,7 @@ export default {
|
|||||||
<NodesSelection v-if="nodesSelectionActive" :key="`nodes-selection-${id}`" />
|
<NodesSelection v-if="nodesSelectionActive" :key="`nodes-selection-${id}`" />
|
||||||
<div
|
<div
|
||||||
:key="`pane-${id}`"
|
:key="`pane-${id}`"
|
||||||
|
v-bind="$attrs"
|
||||||
class="vue-flow__pane vue-flow__container"
|
class="vue-flow__pane vue-flow__container"
|
||||||
@click="onClick"
|
@click="onClick"
|
||||||
@contextmenu="onContextMenu"
|
@contextmenu="onContextMenu"
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ const viewportEl = templateRef<HTMLDivElement>('viewport', null)
|
|||||||
|
|
||||||
let isZoomingOrPanning = $ref(false)
|
let isZoomingOrPanning = $ref(false)
|
||||||
|
|
||||||
|
let isDragging = $ref(false)
|
||||||
|
|
||||||
const viewChanged = (prevTransform: ViewpaneTransform, eventTransform: ZoomTransform): boolean =>
|
const viewChanged = (prevTransform: ViewpaneTransform, eventTransform: ZoomTransform): boolean =>
|
||||||
(prevTransform.x !== eventTransform.x && !isNaN(eventTransform.x)) ||
|
(prevTransform.x !== eventTransform.x && !isNaN(eventTransform.x)) ||
|
||||||
(prevTransform.y !== eventTransform.y && !isNaN(eventTransform.y)) ||
|
(prevTransform.y !== eventTransform.y && !isNaN(eventTransform.y)) ||
|
||||||
@@ -114,12 +116,19 @@ onMounted(() => {
|
|||||||
isZoomingOrPanning = true
|
isZoomingOrPanning = true
|
||||||
|
|
||||||
const flowTransform = eventToFlowTransform(event.transform)
|
const flowTransform = eventToFlowTransform(event.transform)
|
||||||
|
|
||||||
|
if (event.sourceEvent?.type === 'mousedown') {
|
||||||
|
isDragging = true
|
||||||
|
}
|
||||||
|
|
||||||
transform = flowTransform
|
transform = flowTransform
|
||||||
|
|
||||||
emits.moveStart({ event, flowTransform })
|
emits.moveStart({ event, flowTransform })
|
||||||
})
|
})
|
||||||
|
|
||||||
d3Zoom.on('end', (event: D3ZoomEvent<HTMLDivElement, any>) => {
|
d3Zoom.on('end', (event: D3ZoomEvent<HTMLDivElement, any>) => {
|
||||||
isZoomingOrPanning = false
|
isZoomingOrPanning = false
|
||||||
|
isDragging = false
|
||||||
|
|
||||||
if (viewChanged(transform, event.transform)) {
|
if (viewChanged(transform, event.transform)) {
|
||||||
const flowTransform = eventToFlowTransform(event.transform)
|
const flowTransform = eventToFlowTransform(event.transform)
|
||||||
@@ -177,6 +186,8 @@ onMounted(() => {
|
|||||||
const zoomScroll = zoomKeyPressed.value || zoomOnScroll
|
const zoomScroll = zoomKeyPressed.value || zoomOnScroll
|
||||||
const pinchZoom = zoomOnPinch && event.ctrlKey
|
const pinchZoom = zoomOnPinch && event.ctrlKey
|
||||||
|
|
||||||
|
if (event.button === 1 && event.type === 'mousedown' && (event.target as HTMLElement)?.closest(`.vue-flow__node`)) return true
|
||||||
|
|
||||||
// if all interactions are disabled, we prevent all zoom events
|
// if all interactions are disabled, we prevent all zoom events
|
||||||
if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) return false
|
if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) return false
|
||||||
|
|
||||||
@@ -201,7 +212,7 @@ onMounted(() => {
|
|||||||
if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) return false
|
if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) return false
|
||||||
|
|
||||||
// default filter for d3-zoom
|
// default filter for d3-zoom
|
||||||
return (!event.ctrlKey || event.type === 'wheel') && !event.button
|
return (!event.ctrlKey || event.type === 'wheel') && (!event.button || event.button <= 1)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
@@ -217,6 +228,6 @@ export default {
|
|||||||
<Transform>
|
<Transform>
|
||||||
<slot />
|
<slot />
|
||||||
</Transform>
|
</Transform>
|
||||||
<SelectionPane />
|
<SelectionPane :class="{ dragging: isDragging }" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Reference in New Issue
Block a user