基于vueflow可拖拽元素的示例(基于官網示例的單文件示例)

效果圖

在這里插入圖片描述

代碼

<template><div style="width: 100%;height: calc(100vh - 84px)"><VueFlow :nodes="nodes" :edges="edges" @drop="onDrop" @dragover="onDragOver" @dragleave="onDragLeave"><div class="dropzone-background"><Background pattern-color="#aaa" :gap="8" :style="{backgroundColor: isDragOver ? '#e7f3ff' : 'transparent',transition: 'background-color 0.2s ease',}"></Background><div class="overlay"><p v-if="isDragOver">Drop here</p></div></div></VueFlow><Panel position="top-right" class="process-panel"><div class="description">You can drag these nodes to the pane.</div><div class="nodes"><div class="vue-flow__node-input" :draggable="true" @dragstart="onDragStart($event, 'input')">Input Node</div><div class="vue-flow__node-default" :draggable="true" @dragstart="onDragStart($event, 'default')">Default Node</div><div class="vue-flow__node-output" :draggable="true" @dragstart="onDragStart($event, 'output')">Output Node</div></div></Panel></div>
</template><script setup name="Index">
import {ref} from 'vue'
import {VueFlow, Panel, useVueFlow} from '@vue-flow/core'
import {Background} from '@vue-flow/background'
import {MiniMap} from '@vue-flow/minimap'const {onConnect, addEdges, addNodes, toObject, screenToFlowCoordinate, onNodesInitialized, updateNode} = useVueFlow()
const instance = useVueFlow()
const {proxy} = getCurrentInstance();const nodes = ref([]);
const edges = ref([]);
const draggedType = ref(null);
const isDragOver = ref(false);
const isDragging = ref(false);/*** 開始拖拽選項的事件* @param event* @param type*/
function onDragStart(event, type) {if (event.dataTransfer) {event.dataTransfer.setData('application/vueflow', type)event.dataTransfer.effectAllowed = 'move'}draggedType.value = typeisDragging.value = truedocument.addEventListener('drop', onDragEnd)
}/*** 拖拽到畫布vueflow的事件* @param event*/
function onDragOver(event) {event.preventDefault()if (draggedType.value) {isDragOver.value = trueif (event.dataTransfer) {event.dataTransfer.dropEffect = 'move'}}
}/*** 拖拽放下的事件* @param event*/
function onDrop(event) {const position = screenToFlowCoordinate({x: event.clientX,y: event.clientY,})const nodeId = Math.random() + "id";const newNode = {id: nodeId,type: draggedType.value,position,data: {label: nodeId},}// 更新位置到鼠標中心const {off} = onNodesInitialized(() => {updateNode(nodeId, (node) => ({position: {x: node.position.x - node.dimensions.width / 2, y: node.position.y - node.dimensions.height / 2},}))off()})addNodes(newNode)
}/*** 拖拽到畫布外面的的事件*/
function onDragLeave() {isDragOver.value = false
}/*** 拖拽結束*/
function onDragEnd() {isDragging.value = falseisDragOver.value = falsedraggedType.value = nulldocument.removeEventListener('drop', onDragEnd)
}onConnect(addEdges)
</script><style>
/* import the necessary styles for Vue VueFlow to work */
@import '@vue-flow/core/dist/style.css';/* import the default theme, this is optional but generally recommended */
@import '@vue-flow/core/dist/theme-default.css';.process-panel {background-color: #EBEEF5;padding: 10px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);display: flex;flex-direction: column;
}.dropzone-background {position: relative;height: 100%;width: 100%
}.dropzone-background .overlay {position: absolute;top: 0;left: 0;height: 100%;width: 100%;display: flex;align-items: center;justify-content: center;z-index: 1;pointer-events: none
}
</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79996.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79996.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

筆試專題(十六)

文章目錄 相差不超過k的最多數題解代碼 最長公共子序列&#xff08;一&#xff09;題解代碼 小紅的口罩題解代碼 春游題解代碼 相差不超過k的最多數 題目鏈接 題解 1. 排序 滑動窗口 2. 為什么使用滑動窗口&#xff1f; 因為max-min < k&#xff0c;求這個區間內的數最…

技術視界 | 青龍機器人訓練地形詳解(三):復雜地形精講之臺階

在前兩篇中&#xff0c;我們依次講解了“如何創建一個地形”以及“如何將地形添加到訓練環境中”。從基礎出發&#xff0c;逐步構建機器人可交互的三維仿真環境。在機器人強化學習訓練中&#xff0c;地形的復雜度決定了策略的泛化能力&#xff0c;僅靠 jump_plat 和 jump_pit 等…

MYSQL之索引結構,為何要用B+樹

索引的目的就是為了提高查詢效率 索引的結構是B樹&#xff0c;那么說到B樹&#xff0c;必須提一下其他三種結構&#xff0c;分別是&#xff1a;二叉查找樹、平衡二叉樹、B樹 我們來看看各自的結構特征 二叉查找樹 特點:任何節點的左子節點的值都小于當前節點的值&#xff0c;右…

3.2.3 掌握RDD轉換算子 - 2. 過濾算子 - filter()

在本節課中&#xff0c;我們深入學習了Spark RDD的過濾算子filter()。filter()算子能夠通過指定的函數對RDD中的元素進行篩選&#xff0c;返回一個滿足條件的新RDD&#xff0c;通常新RDD的元素個數會比源RDD少。通過案例演示&#xff0c;我們掌握了如何使用filter()來過濾列表中…

vue3使用輪播圖組件swiper

一、在swiper的官網源碼下載地址 下載Swiper - Swiper中文網 二、官網瀏覽輪播圖類型地址 Swiper演示 - Swiper中文網 三、swiper配置參數地址 中文api - Swiper中文網 四、在vue3項目引入swiper npm install swiper 五、在vue3中使用 官網vue3中使用&#xff1a;Swiper…

MySQL優化-MySQL故障排查與監控

MySQL優化-MySQL故障排查與監控 一、MySQL監控 實時了解數據庫的運行狀態&#xff0c;通過不同的監控指標&#xff0c;識別潛在問題并進行預防。常見得到MySQL監控指標包括&#xff1a;連接數、緩存池命中率、磁盤I/O、查詢執行情況等。 1、監控數據庫狀態變量 MySQL的狀態…

【MongoDB篇】MongoDB的分片操作!

目錄 引言第一節&#xff1a;分片核心概念&#xff1a;為什么要分片&#xff1f;它是什么&#xff1f; &#x1f914;&#x1f4a5;&#x1f680;第二節&#xff1a;分片架構的“三大金剛”&#xff1a;核心組件解析 &#x1f9f1;&#x1f9e0;&#x1f6e3;?第三節&#xff…

C++ 函數類型及實用例題

請各位大佬一鍵三連支持一下 目錄 請各位大佬一鍵三連支持一下 1. 無參數無返回值函數 2. 有參數無返回值函數 3. 無參數有返回值函數 4. 有參數有返回值函數 5. 函數重載 6. 遞歸函數 7. 帶默認參數的函數 8. 內聯函數 下面我將介紹 C 中不同類型的函數&#xff0c;…

AtCoder Beginner Contest 404 A-E 題解

還是ABC好打~比ARC好打多了&#xff08; 題解部分 A - Not Found 給定你一個長度最大25的字符串&#xff0c;任意輸出一個未出現過的小寫字母 簽到題&#xff0c;map或者數組下標查詢一下就好 #include<bits/stdc.h>using namespace std;#define int long long #def…

trae ai編程工具

Trae&#xff0c;致力于成為真正的 AI 工程師&#xff08;The Real Al Engineer&#xff09;。Trae 旗下的 AI IDE 產品&#xff0c;以智能生產力為核心&#xff0c;無縫融入你的開發流程&#xff0c;與你默契配合&#xff0c;更高質量、高效率完成每一個任務。 版本差異 國內…

Web 架構之前后端分離

文章目錄 思維導圖一、引言二、前后端分離的概念代碼示例&#xff08;簡單的前后端分離交互&#xff09;后端&#xff08;使用 Python Flask 框架&#xff09;前端&#xff08;使用 JavaScript 和 jQuery&#xff09; 三、前后端分離的優勢3.1 提高開發效率3.2 代碼可維護性增強…

理解 Elasticsearch 的評分機制和 Explain API

作者&#xff1a;來自 Elastic Kofi Bartlett 深入了解 Elasticsearch 的評分機制并探索 Explain API。 想獲得 Elastic 認證嗎&#xff1f;查看下一期 Elasticsearch Engineer 培訓的時間&#xff01; Elasticsearch 擁有大量新功能&#xff0c;幫助你為你的使用場景構建最佳…

Jupyter Notebook / Lab 疑難雜癥記:從命令找不到到環境沖突與網絡阻塞的排查實錄

Jupyter Notebook / Lab 疑難雜癥記&#xff1a;從命令找不到到環境沖突與網絡阻塞的排查實錄 摘要&#xff1a; 本文記錄了一次復雜的 Jupyter Notebook / Lab 故障排查過程。從最初的“command not found”錯誤出發&#xff0c;我們深入挖掘了可執行文件存在的矛盾、conda 環…

C++之set和map的運用

目錄 序列式容器和關聯式容器 熟識set 在STL中的底層結構&#xff1a; set的構造和迭代器 set的增刪查 multiset和set的差異 練習題&#xff1a; 熟識map map類的介紹 pair類型介紹 map的構造 map的增刪查 map的數據修改 測試樣例&#xff1a; multimap和map的差…

【Bluedroid】藍牙 SDP(服務發現協議)模塊代碼解析與流程梳理

本文深入剖析Bluedroid藍牙協議棧中 SDP&#xff08;服務發現協議&#xff09;服務記錄的全生命周期管理流程&#xff0c;涵蓋初始化、記錄創建、服務搜索、記錄刪除等核心環節。通過解析代碼邏輯與數據結構&#xff0c;揭示各模塊間的協作機制&#xff0c;包括線程安全設計、回…

【實戰項目】簡易版的 QQ 音樂:一

> 作者&#xff1a;?舊言~ > 座右銘&#xff1a;松樹千年終是朽&#xff0c;槿花一日自為榮。 > 目標&#xff1a;能自我實現簡易版的 QQ 音樂。 > 毒雞湯&#xff1a;有些事情&#xff0c;總是不明白&#xff0c;所以我不會堅持。早安! > 專欄選自&#xff1a…

Linux_進程退出與進程等待

一、進程退出 ?退出場景? ?正常終止?&#xff1a;代碼執行完畢且結果符合預期&#xff08;退出碼為 0&#xff09;。?異常終止?&#xff1a;運行結果錯誤&#xff08;退出碼非 0&#xff09;或進程被信號強制終止。&#xff08;如 SIGINT 或 SIGSEGV&#xff09;。 ?退…

GD32F407單片機開發入門(二十八)USB口介紹及CDC類虛擬串口通訊詳解及源碼

文章目錄 一.概要二.USB2.0基本介紹及虛擬串口介紹三.GD32單片機USB模塊框圖四.GD32單片機USB設備模式五.GD32F407VET6 USB設備CDC類六.配置一個USB虛擬串口收發例程七.工程源代碼下載八.小結 一.概要 GD32F407VET6USB虛擬串口是一種采用GD32F407VET6單片機&#xff0c;通過US…

MySQL 主從配置超詳細教程

文章目錄 前言一、安裝 MySQL二、主服務器&#xff08;Master&#xff09;配置三、從服務器&#xff08;Slave&#xff09;配置四、測試主從復制五、注意事項 前言 MySQL 主從配置是一種實用的數據庫架構&#xff0c;主服務器處理寫入操作&#xff0c;從服務器負責只讀操作&am…

Python爬蟲實戰:獲取百度學術專題文獻數據并分析,為讀者課題研究做參考

一、引言 在信息爆炸的當下,學術研究需要大量相關資料支撐。百度學術作為重要學術資源平臺,蘊含豐富學術文獻。利用爬蟲技術獲取百度學術特定主題文章數據,能為學術研究提供全面、及時信息。本研究旨在用 Python 實現對百度學術 “主題爬蟲” 相關文章的爬取,并對數據深入…