go.js簡介及執行個體示範

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

GoJS是一個JavaScript庫,讓你輕鬆建立現代Web瀏覽器的互動圖。 GoJS支援圖形化的模板和繪圖物件屬性資料模型的資料繫結。你只需要儲存和恢複模型,包括持有任何性質的應用需求,簡單的JavaScript對象。許多預定義的工具和命令執行,大部分的圖表所需要的標準的行為。外觀和行為的定製是大多設定屬性的問題。

下載地址:http://gojs.net/latest/doc/download.html

使用gojs開發的流程圖及拓撲圖執行個體:http://gojs.net/latest/samples/index.html

goJS去浮水印版:http://download.csdn.net/detail/qq_14966339/9569675

goJS執行個體示範:

function init() {    if (window.goSamples) goSamples();  // init for these samples -- you don't need to call this    var $ = go.GraphObject.make;  // for conciseness in defining templates    myDiagram =      $(go.Diagram, "myDiagramDiv",  // must name or refer to the DIV HTML element        {          initialContentAlignment: go.Spot.Center,          allowDrop: true,  // must be true to accept drops from the Palette          "LinkDrawn": showLinkLabel,  // this DiagramEvent listener is defined below          "LinkRelinked": showLinkLabel,          "animationManager.duration": 800, // slightly longer than default (600ms) animation          "undoManager.isEnabled": true  // enable undo & redo        });    // when the document is modified, add a "*" to the title and enable the "Save" button    myDiagram.addDiagramListener("Modified", function(e) {      var button = document.getElementById("SaveButton");      if (button) button.disabled = !myDiagram.isModified;      var idx = document.title.indexOf("*");      if (myDiagram.isModified) {        if (idx < 0) document.title += "*";      } else {        if (idx >= 0) document.title = document.title.substr(0, idx);      }    });    // helper definitions for node templates    function nodeStyle() {      return [        // The Node.location comes from the "loc" property of the node data,        // converted by the Point.parse static method.        // If the Node.location is changed, it updates the "loc" property of the node data,        // converting back using the Point.stringify static method.        new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),        {          // the Node.location is at the center of each node          locationSpot: go.Spot.Center,          //isShadowed: true,          //shadowColor: "#888",          // handle mouse enter/leave events to show/hide the ports          mouseEnter: function (e, obj) { showPorts(obj.part, true); },          mouseLeave: function (e, obj) { showPorts(obj.part, false); }        }      ];    }    // Define a function for creating a "port" that is normally transparent.    // The "name" is used as the GraphObject.portId, the "spot" is used to control how links connect    // and where the port is positioned on the node, and the boolean "output" and "input" arguments    // control whether the user can draw links from or to the port.    function makePort(name, spot, output, input) {      // the port is basically just a small circle that has a white stroke when it is made visible      return $(go.Shape, "Circle",               {                  fill: "transparent",                  stroke: null,  // this is changed to "white" in the showPorts function                  desiredSize: new go.Size(8, 8),                  alignment: spot, alignmentFocus: spot,  // align the port on the main Shape                  portId: name,  // declare this object to be a "port"                  fromSpot: spot, toSpot: spot,  // declare where links may connect at this port                  fromLinkable: output, toLinkable: input,  // declare whether the user may draw links to/from here                  cursor: "pointer"  // show a different cursor to indicate potential link point               });    }    // define the Node templates for regular nodes    var lightText = 'whitesmoke';    myDiagram.nodeTemplateMap.add("",  // the default category      $(go.Node, "Spot", nodeStyle(),        // the main object is a Panel that surrounds a TextBlock with a rectangular Shape        $(go.Panel, "Auto",          $(go.Shape, "Rectangle",            { fill: "#00A9C9", stroke: null },            new go.Binding("figure", "figure")),          $(go.TextBlock,            {              font: "bold 11pt Helvetica, Arial, sans-serif",              stroke: lightText,              margin: 8,              maxSize: new go.Size(160, NaN),              wrap: go.TextBlock.WrapFit,              editable: true            },            new go.Binding("text").makeTwoWay())        ),        // four named ports, one on each side:        makePort("T", go.Spot.Top, false, true),        makePort("L", go.Spot.Left, true, true),        makePort("R", go.Spot.Right, true, true),        makePort("B", go.Spot.Bottom, true, false)      ));    myDiagram.nodeTemplateMap.add("Start",      $(go.Node, "Spot", nodeStyle(),        $(go.Panel, "Auto",          $(go.Shape, "Circle",            { minSize: new go.Size(40, 40), fill: "#79C900", stroke: null }),          $(go.TextBlock, "Start",            { font: "bold 11pt Helvetica, Arial, sans-serif", stroke: lightText },            new go.Binding("text"))        ),        // three named ports, one on each side except the top, all output only:        makePort("L", go.Spot.Left, true, false),        makePort("R", go.Spot.Right, true, false),        makePort("B", go.Spot.Bottom, true, false)      ));    myDiagram.nodeTemplateMap.add("End",      $(go.Node, "Spot", nodeStyle(),        $(go.Panel, "Auto",          $(go.Shape, "Circle",            { minSize: new go.Size(40, 40), fill: "#DC3C00", stroke: null }),          $(go.TextBlock, "End",            { font: "bold 11pt Helvetica, Arial, sans-serif", stroke: lightText },            new go.Binding("text"))        ),        // three named ports, one on each side except the bottom, all input only:        makePort("T", go.Spot.Top, false, true),        makePort("L", go.Spot.Left, false, true),        makePort("R", go.Spot.Right, false, true)      ));    myDiagram.nodeTemplateMap.add("Comment",      $(go.Node, "Auto", nodeStyle(),        $(go.Shape, "File",          { fill: "#EFFAB4", stroke: null }),        $(go.TextBlock,          {            margin: 5,            maxSize: new go.Size(200, NaN),            wrap: go.TextBlock.WrapFit,            textAlign: "center",            editable: true,            font: "bold 12pt Helvetica, Arial, sans-serif",            stroke: '#454545'          },          new go.Binding("text").makeTwoWay())        // no ports, because no links are allowed to connect with a comment      ));    // replace the default Link template in the linkTemplateMap    myDiagram.linkTemplate =      $(go.Link,  // the whole link panel        {          routing: go.Link.AvoidsNodes,          curve: go.Link.JumpOver,          corner: 5, toShortLength: 4,          relinkableFrom: true,          relinkableTo: true,          reshapable: true,          resegmentable: true,          // mouse-overs subtly highlight links:          mouseEnter: function(e, link) { link.findObject("HIGHLIGHT").stroke = "rgba(30,144,255,0.2)"; },          mouseLeave: function(e, link) { link.findObject("HIGHLIGHT").stroke = "transparent"; }        },        new go.Binding("points").makeTwoWay(),        $(go.Shape,  // the highlight shape, normally transparent          { isPanelMain: true, strokeWidth: 8, stroke: "transparent", name: "HIGHLIGHT" }),        $(go.Shape,  // the link path shape          { isPanelMain: true, stroke: "gray", strokeWidth: 2 }),        $(go.Shape,  // the arrowhead          { toArrow: "standard", stroke: null, fill: "gray"}),        $(go.Panel, "Auto",  // the link label, normally not visible          { visible: false, name: "LABEL", segmentIndex: 2, segmentFraction: 0.5},          new go.Binding("visible", "visible").makeTwoWay(),          $(go.Shape, "RoundedRectangle",  // the label shape            { fill: "#F8F8F8", stroke: null }),          $(go.TextBlock, "Yes",  // the label            {              textAlign: "center",              font: "10pt helvetica, arial, sans-serif",              stroke: "#333333",              editable: true            },            new go.Binding("text").makeTwoWay())        )      );    // Make link labels visible if coming out of a "conditional" node.    // This listener is called by the "LinkDrawn" and "LinkRelinked" DiagramEvents.    function showLinkLabel(e) {      var label = e.subject.findObject("LABEL");      if (label !== null) label.visible = (e.subject.fromNode.data.figure === "Diamond");    }    // temporary links used by LinkingTool and RelinkingTool are also orthogonal:    myDiagram.toolManager.linkingTool.temporaryLink.routing = go.Link.Orthogonal;    myDiagram.toolManager.relinkingTool.temporaryLink.routing = go.Link.Orthogonal;    load();  // load an initial diagram from some JSON text    // initialize the Palette that is on the left side of the page    myPalette =      $(go.Palette, "myPaletteDiv",  // must name or refer to the DIV HTML element        {          "animationManager.duration": 800, // slightly longer than default (600ms) animation          nodeTemplateMap: myDiagram.nodeTemplateMap,  // share the templates used by myDiagram          model: new go.GraphLinksModel([  // specify the contents of the Palette            { category: "Start", text: "Start" },            { text: "Step" },            { text: "???", figure: "Diamond" },            { category: "End", text: "End" },            { category: "Comment", text: "Comment" }          ])        });    // The following code overrides GoJS focus to stop the browser from scrolling    // the page when either the Diagram or Palette are clicked or dragged onto.    function customFocus() {      var x = window.scrollX || window.pageXOffset;      var y = window.scrollY || window.pageYOffset;      go.Diagram.prototype.doFocus.call(this);      window.scrollTo(x, y);    }    myDiagram.doFocus = customFocus;    myPalette.doFocus = customFocus;  } // end init  // Make all ports on a node visible when the mouse is over the node  function showPorts(node, show) {    var diagram = node.diagram;    if (!diagram || diagram.isReadOnly || !diagram.allowLink) return;    node.ports.each(function(port) {        port.stroke = (show ? "white" : null);      });  }  // Show the diagram's model in JSON format that the user may edit  function save() {    document.getElementById("mySavedModel").value = myDiagram.model.toJson();    myDiagram.isModified = false;  }  function load() {    myDiagram.model = go.Model.fromJson(document.getElementById("mySavedModel").value);  }  // add an SVG rendering of the diagram at the end of this page  function makeSVG() {    var svg = myDiagram.makeSvg({        scale: 0.5      });    svg.style.border = "1px solid black";    obj = document.getElementById("SVGArea");    obj.appendChild(svg);    if (obj.children.length > 0) {      obj.replaceChild(svg, obj.children[0]);    }  }<div id="sample">  <div style="width:100%; white-space:nowrap;">    <span style="display: inline-block; vertical-align: top; width:100px">      <div id="myPaletteDiv" style="border: solid 1px black; height: 720px"></div>    </span>    <span style="display: inline-block; vertical-align: top; width:80%">      <div id="myDiagramDiv" style="border: solid 1px black; height: 720px"></div>    </span>  </div>  <p>  The FlowChart sample demonstrates several key features of GoJS,  namely <a href="../intro/palette.html">Palette</a>s,  <a href="../intro/links.html">Linkable nodes</a>, Drag/Drop behavior,  <a href="../intro/textBlocks.html">Text Editing</a>, and the use of  <a href="../intro/templateMaps.html">Node Template Maps</a> in Diagrams.  </p>  <p>  Mouse-over a Node to view its ports.  Drag from these ports to create new Links.  Selecting Links allows you to re-shape and re-link them.  Selecting a Node and then clicking its TextBlock will allow  you to edit text (except on the Start and End Nodes).  </p>  <button id="SaveButton" onclick="save()">Save</button>  <button onclick="load()">Load</button>  Diagram Model saved in JSON format:  <textarea id="mySavedModel" style="width:100%;height:300px">{ "class": "go.GraphLinksModel",  "linkFromPortIdProperty": "fromPort",  "linkToPortIdProperty": "toPort",  "nodeDataArray": [{"category":"Comment", "loc":"360 -10", "text":"Kookie Brittle", "key":-13},{"key":-1, "category":"Start", "loc":"175 0", "text":"Start"},{"key":0, "loc":"0 77", "text":"Preheat oven to 375 F"},{"key":1, "loc":"175 100", "text":"In a bowl, blend: 1 cup margarine, 1.5 teaspoon vanilla, 1 teaspoon salt"},{"key":2, "loc":"175 190", "text":"Gradually beat in 1 cup sugar and 2 cups sifted flour"},{"key":3, "loc":"175 270", "text":"Mix in 6 oz (1 cup) Nestle's Semi-Sweet Chocolate Morsels"},{"key":4, "loc":"175 370", "text":"Press evenly into ungreased 15x10x1 pan"},{"key":5, "loc":"352 85", "text":"Finely chop 1/2 cup of your choice of nuts"},{"key":6, "loc":"175 440", "text":"Sprinkle nuts on top"},{"key":7, "loc":"175 500", "text":"Bake for 25 minutes and let cool"},{"key":8, "loc":"175 570", "text":"Cut into rectangular grid"},{"key":-2, "category":"End", "loc":"175 640", "text":"Enjoy!"} ],  "linkDataArray": [{"from":1, "to":2, "fromPort":"B", "toPort":"T"},{"from":2, "to":3, "fromPort":"B", "toPort":"T"},{"from":3, "to":4, "fromPort":"B", "toPort":"T"},{"from":4, "to":6, "fromPort":"B", "toPort":"T"},{"from":6, "to":7, "fromPort":"B", "toPort":"T"},{"from":7, "to":8, "fromPort":"B", "toPort":"T"},{"from":8, "to":-2, "fromPort":"B", "toPort":"T"},{"from":-1, "to":0, "fromPort":"B", "toPort":"T"},{"from":-1, "to":1, "fromPort":"B", "toPort":"T"},{"from":-1, "to":5, "fromPort":"B", "toPort":"T"},{"from":5, "to":4, "fromPort":"B", "toPort":"T"},{"from":0, "to":4, "fromPort":"B", "toPort":"T"} ]}  </textarea>  <p>Click the button below to render the current GoJS Diagram into SVG at one-half scale.     The SVG is not interactive like the GoJS diagram, but can be used for printing or display.     For more information, see the page on <a href="../intro/makingSVG.html">making SVG</a>.</p>  <button onclick="makeSVG()">Render as SVG</button>  <div id="SVGArea"></div></div>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.