JsPlumb在react的使用方法及介紹

来源:https://www.cnblogs.com/wangyongping/archive/2020/06/30/13213179.html
-Advertisement-
Play Games

JsPlumb在react的使用方法及介紹 一.相關資料來源: 1.https://bitqiang.gitbooks.io/jsplumb/content/Chapter1_IMPORTS_AND_SETUP/ ——— 一個翻譯一半就不能打開的文檔 2.https://github.com/wan ...


JsPlumbreact的使用方法及介紹

一.相關資料來源:

1.https://bitqiang.gitbooks.io/jsplumb/content/Chapter1_IMPORTS_AND_SETUP/           ———    一個翻譯一半就不能打開的文檔

2.https://github.com/wangduanduan/jsplumb-chinese-tutorial          ———    一個事件方法很全的網站(推薦)

3.https://wdd.js.org/jsplumb-chinese-tutorial/#/                                 ———    一個事件方法很全的網站(同上)

4.https://www.cnblogs.com/Bryran/p/3950122.html        —————    jq ui 拖動

二.引用庫:

版本:2.13.3

庫:https://github.com/jsplumb/jsplumb

鏈接:https://pan.baidu.com/s/1EvftCI5gXRvoL6pNRenSpQ 

提取碼:z2t4

React  vue :    npm   i   jsplumb

註意:低版本需要引用jq 以及jq-ui,此版本不需要

三.React使用方法:

  1. 在我的react項目中,分菜單欄和畫布,菜單欄是可拖動子菜單,將菜單拖到畫布上,在畫布上進行對子菜單項目的操作,大概是這樣:

  2. 在使用過程中,應為拖動事件,和畫圖事件都是要先有dom節點,所以,一定要有節點的時候再註冊相應的監聽事件:

        a.    React項目中要在 componentDidMount() 生命周期後開始操作,因為是單頁面應用,要保證當前頁面渲染完成後註冊jsplumb實例,離開後要銷毀實例所以

let idePageJsPlumstance=’’;
    //初始化
    componentDidMount() {
        idePageJsPlumstance = jsPlumb.getInstance() //關鍵函數 註冊jsplumb實例
        idePageJsPlumstance.setContainer ('flow-main')//設置面板
    },
    //離開
    componentWillUnmount() {
        if (idePageJsPlumstance) {
            idePageJsPlumstance.clear() //清空
        }
},

         b.     在左側子菜單渲染完後要註冊拖拽事件,這裡用的是jq ui 拖動 不熟悉的可以搜下jq ui  這裡這樣寫的:

//給span註冊拖動事件
$('#flow-btns').find('span').draggable({
                helper: 'clone',//拖動樣式
                zIndex: 11,
                scope: 'flowMainCanvas',//關鍵參數
            })

      Scope  //關鍵參數,被拖動子菜單和拖動到面板要對應相同

         c.   在面板中,要獲取位置生成新的dom 對新dom註冊事件, (此處以簡寫,具體方式根據實際項目來做)

 

//樣式
let endAllPointStyle={
        endpoint: 'Dot', //端點的形狀
        isSource: true, //是否可以拖動(作為連線起點)
        isTarget: true, //是否可以放置(連線終點)
}
//畫圖 $(
'#flow-main').droppable ({ scope: 'flowMainCanvas', drop: function ( event, ui ) { let left = parseInt ( ui.offset.left) let top = parseInt ( ui.offset.top) let id = ‘node12’ let dom = “<span id=’+id+’ >’+ui.helper.context.dataset.text+’</span>” $ (this).append (dom) dom.css ('left', left).css ('top', top) idePageJsPlumstance.addEndpoint ( id, { anchor:"LeftMiddle" }, endAllPointStyle) //註冊端點拖桶 idePageJsPlumstance.draggable ( id) //註冊節點拖動 $ ('#' + id).draggable ({ containment:"parent", }) } })

 

         d.     同時要對線做一些事件,這裡有

//連接線的右鍵單擊事件
 idePageJsPlumstance.bind ('contextmenu', function ( conn, e ) {
      e.preventDefault ()
      e.stopPropagation ()
     ///// ....
})

//連接線的單擊事件
idePageJsPlumstance.bind ('mousedown', function ( conn, e ) {
///// ....
})

//開始拖動新連接時
idePageJsPlumstance.bind ('beforeDrag', function ( info )  {
///// ....
})
// 結束拖動新連接時
idePageJsPlumstance.bind ('beforeDrop', function ( info )  {
///// ....
}

// 連接事件 註冊線的參數
idePageJsPlumstance.bind ('connection', function ( info ) {
///// ...
})

// 開始拖動現有連接
idePageJsPlumstance.bind('beforeStartDetach',function (conn)  {
///// ....
})

//頁麵線的dom
const connectors =idePageJsPlumstance.getAllConnections ()

//刪除點,線 節點
idePageJsPlumstance.detach(con)
idePageJsPlumstance.remove(id)
idePageJsPlumstance.removeAllEndpoints(id)

 

3.  儲存和 回顯 重新代碼生成操作

  a .  儲存的話,先將拖動的新增節點信息保存,比如left 、id、 top 固定信息保存

 再將線保存 線有五個參數 通過遍歷idePageJsPlumstance.getAllConnections() //線數據獲取,保存線的id、 sourceId、targetId 還有點錨點的起止位置參數

  b .  重新代碼生成    還原節點後

 

idePageJsPlumstance.ready (function () {
     idePageJsPlumstance.connect ({
            source: startKey,
            target:endKe,
            anchors: [sourcepoint, item.targetpoint ],
            endpoint: 'Dot',
            isSource: true,
            isTarget: true,
     })
})

 

 再註冊相應的拖拽事件

四.總結:

  1. 代碼回顯時候顯示連接線 jsPlumb.connect()
  2. 在項目中每個錨點是層級關係,層級疊加要處理好,
  3. 在拖拽事件中,生成點,再連線,註意好相關順序,順序不一樣,影響不一樣,
  4. 有些事件參數不起作用,需要代碼控制。
  5. 自帶zoom 要和位置等相結合使用,避免冒泡

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Web前端作為開發團隊中不可或缺的一部分,需要按照相關規定進行合理編寫(一部分不良習慣可能給自己和他人造成不必要的麻煩)。不同公司不同團隊具有不同的規範和文檔。下麵是根據不同企業和團隊的要求進行全面詳細的整理結果。備註:實際開發請以本公司的規範為標準。 A.基本原則 符合web標準(UTF-8,HT ...
  • 1.格式化金錢值 const ThousandNum = num => num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const money = ThousandNum(20190214); // money => "20,190,214 ...
  • 摘要 近期在優化團隊代碼,發現Redux重覆使用的代碼過多。 經過調研發現了Rematch庫:Redux是一個出色的狀態管理工具,並且有著健全的中間件生態以及出色的開發工具;Rematch是沒有boilerplate的Redux最佳實踐。移除了聲明action類型、action創建函數、thunks ...
  • safari瀏覽器字體不能自動隨網頁縮放調整大小 -webkit-text-size-adjust:100% 點擊<button><input>有灰色透明背景 -webkit-tap-highlight-color:rgba(0,0,0,0); 微信、QQ內置瀏覽器視頻自動全屏 非騰訊功能變數名稱的視頻地址 ...
  • 在日常的項目中,有時候還是不可避免的會維護一些jq官網項目等。面對此類需求,很多還是以前的老套路,前端寫頁面交給後端去套數據。很煩有木有~~而改動之後還得交給後端再次修改,時間和溝通都是個麻煩。同時開發中,寫靜態頁面也很麻煩,不能復用,不能使用現在的工具,心累有木有~~當然了,解決辦法很多 自己寫個 ...
  • 核心思路 採用CSS3的transition(過渡效果),給定需要旋轉的元素設置transform的rotate屬性的結束角度,同時添加transition-timing-function來控制旋轉的速率包括起始速率和結束速率,代碼如下(瀏覽器首碼可自行添加): #pointer { transit ...
  • 多年web前端從業者,說下這個問題 首先,這個問題主要問:自學web前端技術,如果才能找到一份web前端的工作。 按照現在的招聘標準來看,無論你去哪個公司面試,你只需要滿足他們公司的需求就可以。 目前企業招聘前端工程師的基本需求: 1.精通DIV+CSS網頁框架佈局的HTML代碼編寫,熟悉W3C標準 ...
  • 不用說我也知道,此類文章太多太多了,常見的譬如: viewport、強制瀏覽器全屏、IOS的Web APP模式、可點擊元素出現陰影(這個我覺得真沒必要去掉,用戶點擊是需要反饋的,而這個背景色剛剛好提供了一種反饋)等等,太多啦,這些相信大家百度一下就可以查到很多資料😂 本篇文章主要是講一些其他的或者 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...