前端流程圖之JointJS(一)

JointJS是一個開源的前端流程圖框架,基于SVG進(jìn)行繪制策治,目前的版本是2.2.1,同時該項目已經(jīng)開始了商業(yè)化運作兰吟,商業(yè)產(chǎn)品名稱是Rappid通惫,因此開源代碼實際上功能更新已經(jīng)比較少了,只是在維護(hù)bug混蔼,新的功能都被添加到了商業(yè)產(chǎn)品中了履腋。

從今天一天的研究來看,這個框架的擴(kuò)展性還是非常強(qiáng)的惭嚣,但是由于商業(yè)化的考慮遵湖,基本上有價值的擴(kuò)展都需要自己來開發(fā),但對于免費的項目來說晚吞,你還能要求什么呢延旧?

好了,廢話少說槽地,先上個圖垄潮,描述一下業(yè)務(wù)需求烹卒,然后看看如何實現(xiàn)吧。

基本的流程圖

業(yè)務(wù)需求包括:

  1. 自動布局
  2. 上下文菜單(空白/對象)
  3. 裝飾(動態(tài)修改屬性)
  4. 點選對象(click事件)
  5. 對象的moveover事件顯示擴(kuò)展工具

自動布局已經(jīng)被集成到2.2.1版本中了弯洗,只需要執(zhí)行下面這行代碼就可以了

joint.layout.DirectedGraph.layout(graph, { rankDir: "LR", setLinkVertices: false });

屬性rankDir定義了布局的方向,缺省是TB(從上至下)逢勾,這里設(shè)置為LR(從左至右)牡整。

點選對象的實現(xiàn)過程有點曲折,最后發(fā)現(xiàn)是用的jQuery版本問題溺拱,需要使用jQuery 3.3.1以上版本逃贝。

定義對cell:pointerclick事件的回調(diào)

paper.on('cell:pointerclick', function(cellView) {
    var isElement = cellView.model.isElement();
    var message = (isElement ? 'Element' : 'Link') + ' clicked';
    console.log(message);
    cellView.trigger((isElement ? 'element' : 'link') + ":pointerclick", cellView);
});

在這里可以對cell的類型進(jìn)行識別,并分別觸發(fā)對應(yīng)的事件迫摔。按道理沐扳,這個功能應(yīng)該集成在框架里,但看來維護(hù)團(tuán)隊也懶得弄了句占,回頭有時間沪摄,我提交一個PR看看,不知道有沒有用纱烘。

我在element:pointerclick事件中設(shè)置了對象的背景色和邊框顏色杨拐,在blank:pointerclick事件中重置了所有對象的顏色,這樣就實現(xiàn)了點選的外在表現(xiàn)擂啥,實際上還需要在內(nèi)部保存當(dāng)前選中對象的id哄陶,這個在這里就不多說了。

paper.on('element:pointerclick', function(elementView) {
    resetAll(this);
    var currentElement = elementView.model;
    currentElement.attr('rect/stroke', 'orange')
    currentElement.attr('rect/fill', 'orange')
});
paper.on('blank:pointerclick', function() {
    resetAll(this);
});

今天先弄了這兩個功能哺壶,明天繼續(xù)屋吨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市山宾,隨后出現(xiàn)的幾起案子至扰,更是在濱河造成了極大的恐慌,老刑警劉巖塌碌,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渊胸,死亡現(xiàn)場離奇詭異,居然都是意外死亡台妆,警方通過查閱死者的電腦和手機(jī)翎猛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來接剩,“玉大人切厘,你說我怎么就攤上這事“萌保” “怎么了疫稿?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵培他,是天一觀的道長。 經(jīng)常有香客問我遗座,道長舀凛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任途蒋,我火速辦了婚禮猛遍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘号坡。我一直安慰自己懊烤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布宽堆。 她就那樣靜靜地躺著腌紧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜隶。 梳的紋絲不亂的頭發(fā)上壁肋,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音代箭,去河邊找鬼墩划。 笑死,一個胖子當(dāng)著我的面吹牛嗡综,可吹牛的內(nèi)容都是我干的乙帮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼极景,長吁一口氣:“原來是場噩夢啊……” “哼察净!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盼樟,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤氢卡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晨缴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體译秦,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年击碗,在試婚紗的時候發(fā)現(xiàn)自己被綠了筑悴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡稍途,死狀恐怖阁吝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情械拍,我是刑警寧澤突勇,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布装盯,位于F島的核電站,受9級特大地震影響甲馋,放射性物質(zhì)發(fā)生泄漏埂奈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一摔刁、第九天 我趴在偏房一處隱蔽的房頂上張望挥转。 院中可真熱鬧,春花似錦共屈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幌衣,卻和暖如春矾削,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豁护。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工哼凯, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楚里。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓断部,卻偏偏與公主長得像,于是被迫代替她去往敵國和親班缎。 傳聞我的和親對象是個殘疾皇子蝴光,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348