摘要:中文文檔是一款功能強大的圖形可視化交互工具,可用來開發流程圖,思維導圖等復雜圖形交互應用核心概念和即畫布,圖形將在上繪制即圖形數據,可與進行綁定,對的修改會即時反映到上一個可與多個綁定和視圖元素,是的基本元素,用來處理交互圖形元素,是的基本
JointJS中文文檔
JointJS是一款功能強大的圖形可視化交互工具,可用來開發流程圖,思維導圖等復雜圖形交互應用
核心概念paper和graph
paper即畫布,圖形將在paper上繪制
graph即圖形數據,可與paper進行綁定,對graph的修改會即時反映到paper上
一個graph可與多個paper綁定
cellView和cell
cellView: 視圖元素,是paper的基本元素,用來處理UI交互
cell: 圖形元素,是graph的基本元素,用來存儲圖形元素數據
cellView可以通過.model屬性獲取它的cell
graph其實就是cell的集合
link和element
cell有兩種類型,link是連線,element是節點
他們的視圖元素對應為linkView和elementView
source和target
即連線的起點和終點
port
端口,依附于圖形節點,可以被連線連接
坐標系統
client - 相對于瀏覽器窗口
page - 相對于body
local - 圖形絕對坐標
paper - 圖形畫布坐標 (畫布是可以移動的,當畫布移動時paper坐標會改變,而local坐標不會改變)
joint.dia
模型(類)庫,包含: Paper Graph Cell CellView Element Link 等等
joint.shapes
圖形元素樣式庫,包含多個分組(basic standard custom ...)
以basic為例,其下有Circle Ellipse Rect Text等多個圖形元素
實例化參數 new joint.dia.Paper(option)
el: 圖形容器 model: 圖形數據,此處可綁定graph width: 圖形寬度 height: 圖形高度 drawGrid: 柵格參考線 gridSize: 參考線密度 background: 背景 defaultLink: 默認連線樣式 interactive: 控制元素的交互屬性(例如是否可以移動)Paper prototype method
paper實例方法
findViewByModel(model)
通過model(即cell)尋找到對應的cellView
getContentBBox()
獲取paper內圖形實體(不包含空白)的邊界(client坐標)
getContentArea()
獲取paper內圖形實體(不包含空白)的邊界(local坐標)
paperToLocalPoint(point) or (x, y)
將paper坐標的point轉換成local坐標 類似的轉換: `localToPaperPoint` `pageToLocalPoint` 等等
paperToLocalRect(rect)
將paper坐標的rect轉換成local坐標 類似的: `localToPaperRect` `pageToLocalRect` 等等
scale(scale) or (sx, sy)
將paper縮放至指定倍數 如果參數為空,將返回paper當前的縮放倍數
translate(x, y)
將paper原點移動到指定坐標(原點在左上角) 如果參數為空,將返回paper當前的位移Graph prototype method
graph實例方法
addCell(cell)
添加一個元素
addCells(cells)
添加一組元素
getCell(modelId)
獲取指定id的元素
getCells()
獲取所有元素
getElements()
獲取所有節點
getLinks()
獲取所有連線
clear()
清空所有元素
getNeighbors(element [, opt])
獲取與某節點相連的所有連線
toJSON()
導出JSON
fromJSON(json)
導入JSON
Cell模型Cell.prototype.define(type [, properties])
定義一個新的圖形元素,或繼承一個已有的元素
// Define a new Ellipse class in `joint.shapes.examples` namespace // Inherits from generic Element class var Ellipse = joint.dia.Element.define("examples.Ellipse", { // default attributes markup: [{ tagName: "ellipse", selector: "ellipse" // not necessary but faster ], attrs: { ellipse: { fill: "white", stroke: "black", strokeWidth: 4, refRx: .5, refRy: .5, refCx: .5, refCy: .5 } } }); // Instantiate an element var ellipse = (new Ellipse()).position(100, 100).size(120, 50).addTo(graph); // Define a new ColoredEllipse class // Inherits from Ellipse var ColoredEllipse = Ellipse.define("examples.ColoredEllipse", { // overridden Ellipse default attributes // other Ellipse attributes preserved attrs: { ellipse: { fill: "lightgray" } } }, { // prototype properties // accessible on `this.(...)` - as well as, more precisely, `this.prototype.(...)` // useful for custom methods that need access to this instance // shared by all instances of the class randomizeStrokeColor: function() { var randomColor = "#" + ("000000" + Math.floor(Math.random() * 16777215).toString(16)).slice(-6); return this.attr("ellipse/stroke", randomColor); } }, { // static properties // accessible on `this.constructor.(...)` // useful for custom methods and constants that do not need an instance to operate // however, a new set of static properties is generated every time the constructor is called // (try to only use static properties if absolutely necessary) createRandom: function() { return (new ColoredEllipse()).randomizeStrokeColor(); } }); // Instantiate an element var coloredEllipse = ColoredEllipse.createRandom().position(300, 100).size(120, 50).addTo(graph);
markup
markup(標簽)是用來生成svg元素的模板,可以接收XML標簽或JSON對象
markup: "" markup: [{ tagName: "rect", selector: "body" }]
attrs
attrs(屬性)用來定義svg元素的樣式,通過selector或標簽名查找對應的元素
attrs: { ellipse: { fill: "lightgray" }, body: { fill: "white" } }
Cell.prototype.attr()
設置cell的attrs屬性
Cell.prototype.prop()
設置cell的屬性,包括自定義屬性
cell.attr("body/fill", "black") cell.prop("attrs/body/fill", "black") cell.prop("attrs", {body: {fill: "black"}}) cell.prop("custom", "data")
Cell.prototype.isElement()
判斷元素是否是節點
Cell.prototype.isLink()
判斷元素是否是連線
Cell.prototype.addTo(graph)
添加到graph
Cell.prototype.remove()
移除元素Element
圖形節點模型,繼承自Cell
Element模型示例
{ id: "3d90f661-fe5f-45dc-a938-bca137691eeb",// Some randomly generated UUID. type: "basic.Rect", attrs: { "stroke": "#000" }, position: { x: 0, y: 50 }, angle: 90, size: { width: 100, height: 50 }, z: 2, embeds: [ "0c6bf4f1-d5db-4058-9e85-f2d6c74a7a30", "cdbfe073-b160-4e8f-a9a0-22853f29cc06" ], parent: "31f348fe-f5c6-4438-964e-9fc9273c02cb" // ... and some other, maybe custom, data properties }
Geometry 幾何屬性
position 坐標,可通過.position()方法設置
angle 旋轉,可通過.rotate()方法設置
size 尺寸,可通過.resize()方法設置
Presentation 外觀
attrs 同Cell,通過.attr()方法設置
z 層級
Nesting 嵌套
embeds 子節點ids
parent 父節點id
Element prototype method
getBBox() 獲取節點的bounding box(邊界,rect)
portProp(portId, path, [value]) 設置端口屬性
element.portProp("port-id", "attrs/circle/fill", "red"); element.portProp("port-id", "attrs/circle/fill"); // "red" element.portProp("port-id", "attrs/circle", { r: 10, stroke: "green" }); element.portProp("port-id", "attrs/circle"); // { r: 10, stroke: "green", fill: "red" }Ports
端口,依附于圖形節點,可以被連線連接
Port API on joint.dia.Element
以下是與port相關的Element的實例方法
hasPort / hasPorts
addPort / addPorts
removePort / removePorts
getPort / getPorts
portProp
getPortPositions
Port示例
// Single port definition var port = { // id: "abc", // generated if `id` value is not present group: "a", args: {}, // extra arguments for the port layout function, see `layout.Port` section label: { position: { name: "right", args: { y: 6 } // extra arguments for the label layout function, see `layout.PortLabel` section }, markup: "" }, attrs: { text: { text: "port1" } }, markup: " " }; // a.) add a port in constructor. var rect = new joint.shapes.standard.Rectangle({ position: { x: 50, y: 50 }, size: { width: 90, height: 90 }, ports: { groups: { "a": {} }, items: [port] } }); // b.) or add a single port using API rect.addPort(port);
Port屬性
group 類似于css的class,定義一組port的屬性
args 布局參數
label 文字
Link圖形連線模型,繼承自Cell
Link示例
var link = new joint.dia.Link(); link.source({ id: sourceId }, { anchor: defaultAnchor }); link.target({ id: targetId, port: portId }); link.addTo(graph)
Link屬性
anchor 錨點,link與element的連接點
connectionPoint 視圖鄰接點
例如,當anchor在節點元素中心時,我們并不需要把連線真的畫到中心,而只要連到節點的邊界上即可
vertices 連線上的折點
connector 線型
"normal" - 普通 "jumpover" - 連線交叉時顯示一個bridge "rounded" - 轉折處顯示為圓角 "smooth" - 貝塞爾曲線
router 路徑,設置router之后連線不再呈直線連接,而是通過一條設定的路線
"normal" - 普通線 "orthogonal" - 基礎版的正交折線 "manhattan" - 優化版的正交折線 "metro" - 另一種正交折線 "oneSide" - 單側正交折線
Link實例方法
source(source [, opt]) 設置起點
target(target [, opt]) 設置終點
// opt示例 link.source({ id: sourceId }, {anchor})
connector() 設置線型
router() 設置路徑
vertices() 設置折點
事件 Paperpointerclick
點擊事件
可以添加前綴,以區分不同的點擊區域(blank是空白區域):
cell:pointerdblclick link:pointerdblclick element:pointerdblclick blank:pointerdblclick
pointerdown
鼠標按下
pointermove
鼠標拖拽
pointerup
鼠標松開
link:connect
連線連接時觸發
Graphadd
新建圖形
remove
移除圖形
change
圖形屬性改變
change可以添加后綴,以區分不同的屬性改變:
change:position 節點位置改變
change:vertices 連線折點改變
change:custom 節點自定義屬性改變
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101494.html
摘要:在該模式下,所有的和會多一個屬性,就行中的陰影有一個屬性表示層級。為了控制哪些元素可以,需要配置。如果允許被潛入到,返回默認所有元素都可以到其他元素中當設置為的時候,用戶將不能將移動到邊界之外。 關于JointJs的介紹,有一篇比較好JointJS介紹 第一個類Paperjoint.dia.Paper 屬性 el css選擇器,Paper將在該Css選擇的Container下畫SV...
摘要:在該模式下,所有的和會多一個屬性,就行中的陰影有一個屬性表示層級。為了控制哪些元素可以,需要配置。如果允許被潛入到,返回默認所有元素都可以到其他元素中當設置為的時候,用戶將不能將移動到邊界之外。 關于JointJs的介紹,有一篇比較好JointJS介紹 第一個類Paperjoint.dia.Paper 屬性 el css選擇器,Paper將在該Css選擇的Container下畫SV...
摘要:最近由于項目需要,開始接觸,妥妥不停刷文檔模式,先寫一下對于的粗淺認識吧。我們可以使用已提供的圖元素繪圖,也可根據需求自定義一些圖元素。另外,它極易上手且操作簡單,并且支持所有的現代瀏覽器。 最近由于項目需要,開始接觸jointJS,妥妥不停刷文檔模式,先寫一下對于jointjs的粗淺認識吧。 我們可以使用JointJS已提供的圖元素繪圖,也可根據需求自定義一些圖元素。除此之外,Joi...
摘要:由于是基于的,因此對有一定的了解會對的理解和使用有較大幫助。由于是基于的,因此有視圖和模型的概念。掛載的元素關聯聲明的元素的概念,就是圖形顯示的主體,可以有各種不同的形狀,預設有常用的矩形橢圓平行四邊形等。 一、jointJS簡介 jointJS是一個基于svg的圖形化工具庫,在畫布上畫出支持拖動的svg圖形,而且可以導出JSON,也能通過JSON配置導入直接生成圖形。 可以基于joi...
摘要:在中引入的問題,之前在網上搜了很多,都沒有給出一個確切的答案,搗鼓了兩天終于弄明白了,做個記錄。通過這樣引入還不夠,可能會遇到圖可以正常加載,但無法拖拽的問題,遇到這些問題一般是和自己項目中的環境沖突了,導致無法讀取或者讀取錯誤。 在vue中引入joint.js的問題,之前在網上搜了很多,都沒有給出一個確切的答案,搗鼓了兩天終于弄明白了,做個記錄。首先,我參考了一篇來自stackove...
閱讀 3175·2021-10-14 09:42
閱讀 3569·2019-08-26 13:56
閱讀 3464·2019-08-26 11:59
閱讀 942·2019-08-23 18:00
閱讀 2208·2019-08-23 17:51
閱讀 3530·2019-08-23 17:17
閱讀 1481·2019-08-23 15:11
閱讀 5176·2019-08-23 15:05