彩票走势图

轻量级流程图控件GoJS示例连载(二):流程图

翻译|使用教程|编辑:黄竹雯|2018-11-16 14:36:28.000|阅读 1552 次

概述:轻量级流程图控件GoJS流程图示例

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和 HTML5 Canvas程序中创建流程图,且极大地简化你的JavaScript / Canvas 程序。

点击查看产品详情 | 最新试用版下载

FlowChart示例演示了GoJS的几个关键功能,即, ,拖放行为, 以及图表中的使用 。

鼠标悬停在节点上以查看其端口。从这些端口拖动以创建新的链接。选择“链接”可以重新整形和重新链接它们。选择节点然后单击其TextBlock将允许您编辑文本(开始和结束节点除外)。

在页面中查看此示例页面的源代码

function  init () { 
    if(window.goSamples)goSamples();  //这些样本的init  - 你不需要调用这个
    var $ = go.GraphObject.make;  //为了简洁定义模板

    myDiagram =
      $(go.Diagram,“myDiagramDiv”,   //必须命名或引用DIV HTML元素
        {
          initialContentAlignment:go.Spot.Center,
          allowDrop:true,   //必须为true才能接受来自Palette 
          “LinkDrawn”的 drop:showLinkLabel,   //这个DiagramEvent监听器定义在
          “LinkRelinked” 下面:showLinkLabel,
          scrollsPageOnFocus:false,
           “undoManager.isEnabled”:true   //启用undo&redo
        });

    //修改文档时,在标题中添加“*”并启用“保存”按钮 
    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);
      }
    });

    //节点模板的帮助程序定义

    function  nodeStyle () { 
      return [
         // Node.location来自节点数据的“loc”属性,
        //由Point.parse静态方法转换。
        //如果更改了Node.location,它将更新节点数据的“loc”属性,
        //使用Point.stringify静态方法转换回来。
        new go.Binding( “location”, “loc”,go.Point.parse).makeTwoWay(go.Point.stringify),
        {
          // Node.location位于每个节点的中心
          locationSpot:go.Spot.Center
        }
      ]。
    }

    //定义用于创建通常透明的“端口”的函数。
    //“name”用作GraphObject.portId,
    //“align”用于确定端口相对于节点主体的位置,
    //“spot”用于控制链接的连接方式使用端口以及端口
    // 
    是否沿节点一侧延伸,//布尔“输出”和“输入”参数控制用户是否可以从端口绘制链接或从端口绘制链接。
    function  makePort (name,align,spot,output,input) { 
      var horizo​​ntal = align.equals(go.Spot.Top)|| align.equals(go.Spot.Bottom);
      
      //当鼠标经过它时变成彩色
      返回 $(go.Shape,
        {
          fill:“transparent”,   //更改为mouseEnter事件处理程序中的颜色 
          strokeWidth:0,   //没有笔画 
          宽度:水平?NaN:8,   //如果不是水平拉伸,只有8个宽度 
          :水平?NaN:8,   //如果不垂直拉伸,只需8个高 
          对齐:对齐,   //对齐主形状上的端口
          stretch :(水平?go.GraphObject.Horizo​​ntal:go.GraphObject.Vertical),
          portId:name,   //声明此对象是 
          来自Spot 的“端口”:spot,   //声明链接可以在此端口连接的 
          地址fromLinkable:output,   //声明用户是否可以从此处绘制链接到 
          Spot:spot,   //声明链接可以在此端口连接到链接的 
          位置:input,   //声明用户是否可以在此处绘制链接 
          :“指针”,   //显示不同的光标以指示潜在的链接点 
          mouseEnter:function (e,port) {   / / PORT参数将是这个Shape 
            if(!e.diagram.isReadOnly)port.fill = “rgba(255,0,255,0.5)” ;
          },
          mouseLeave:function (e,port) { 
            port.fill = “transparent” ;
          }
        });
    }

    function  textStyle () { 
      return {
        字体:“bold 11pt Helvetica,Arial,sans-serif”,
        中风:“whitesmoke”
      }
    }

    //定义常规节点的节点模板

    myDiagram.nodeTemplateMap.add(“”,   //默认类别 
      $(go.Node,“Table”,nodeStyle(),
         //主要对象是一个围绕TextBlock的面板,其形状 
        为矩形 $(go.Panel,“自动”,
          $(go.Shape,“矩形”,
            {fill:“#00A9C9”,strokeWidth:0 },
             new go.Binding(“figure”,“figure”)),
          $(go.TextBlock,textStyle(),
            {
              保证金:8,
              maxSize:new go.Size(160,NaN),
              换行:go.TextBlock.WrapFit,
              可编辑:是的
            },
            new go.Binding(“text”)。makeTwoWay())
        )
        //四个命名端口,每边一个: 
        makePort(“T”,go.Spot.Top,go.Spot.TopSide,false,true),
        makePort(“L”,go.Spot.Left,go.Spot.LeftSide,true,true),
        makePort(“R”,go.Spot.Right,go.Spot.RightSide,true,true),
        makePort(“B”,go.Spot.Bottom,go.Spot.BottomSide,true,false)
      ));

    myDiagram.nodeTemplateMap.add(“有条件的”,
      $(go.Node,“Table”,nodeStyle(),
         //主要对象是一个围绕TextBlock的面板,其矩形形状 
        为$(go.Panel,“Auto”,
          $(go.Shape,“钻石”,
            {fill:“#00A9C9”,strokeWidth:0 },
             new go.Binding(“figure”,“figure”)),
          $(go.TextBlock,textStyle(),
            {
              保证金:8,
              maxSize:new go.Size(160,NaN),
              换行:go.TextBlock.WrapFit,
              可编辑:是的
            },
            new go.Binding(“text”)。makeTwoWay())
        )
        //四个命名端口,每边一个: 
        makePort(“T”,go.Spot.Top,go.Spot.Top,false,true),
        makePort(“L”,go.Spot.Left,go.Spot.Left,true,true),
        makePort(“R”,go.Spot.Right,go.Spot.Right,true,true),
        makePort(“B”,go.Spot.Bottom,go.Spot.Bottom,true,false)
      ));

    myDiagram.nodeTemplateMap.add(“开始”,
      $(go.Node,“Table”,nodeStyle(),
        $(go.Panel,“自动”,
          $(go.Shape,“Circle”,
            {minSize属性:新 go.Size(40,40),填充:“#79C900”,strokeWidth:0 }),
          $(go.TextBlock,“Start”,textStyle(),
             new go.Binding(“text”))
        )
        //三个命名端口,除了顶部之外每边一个,只输出: 
        makePort(“L”,go.Spot.Left,go.Spot.Left,true,false),
        makePort(“R”,go.Spot.Right,go.Spot.Right,true,false),
        makePort(“B”,go.Spot.Bottom,go.Spot.Bottom,true,false)
      ));

    myDiagram.nodeTemplateMap.add(“结束”,
      $(go.Node,“Table”,nodeStyle(),
        $(go.Panel,“自动”,
          $(go.Shape,“Circle”,
            {minSize属性:新 go.Size(40,40),填充:“#DC3C00”,strokeWidth:0 }),
          $(go.TextBlock,“End”,textStyle(),
             new go.Binding(“text”))
        )
        //三个命名端口,每边一个除了底部,只有输入: 
        makePort(“T”,go.Spot.Top,go.Spot.Top,false,true),
        makePort(“L”,go.Spot.Left,go.Spot.Left,false,true),
        makePort(“R”,go.Spot.Right,go.Spot.Right,false,true)
      ));

    myDiagram.nodeTemplateMap.add(“评论”,
      $(go.Node,“Auto”,nodeStyle(),
        $(go.Shape,“档案”,
          {fill:“#EFFAB4”,strokeWidth:0 }),
        $(go.TextBlock,textStyle(),
          {
            保证金:5,
            maxSize:new go.Size(200,NaN),
            换行:go.TextBlock.WrapFit,
            textAlign:“center”,
            可编辑:是的,
            字体:“bold 12pt Helvetica,Arial,sans-serif”,
            中风:'#454545'
          },
          new go.Binding(“text”)。makeTwoWay())
         //没有端口,因为没有链接允许连接评论
      ));


    //替换linkTemplateMap中的默认链接模板
    myDiagram.linkTemplate =
      $(go.Link,   //整个链接面板
        {
          路由:go.Link.AvoidsNodes,
          曲线:go.Link.JumpOver,
          角落:5,toShortLength:4,
          relinkable来自:true,
          relinkableTo:是的,
          reshapable:是的,
          resegmentable:true,
           //鼠标悬停巧妙地突出显示链接: 
          mouseEnter:function (e,link) { link.findObject(“HIGHLIGHT”)。stroke = “rgba(30,144,255,0.2)” ; },
          mouseLeave:function (e,link) { link.findObject(“HIGHLIGHT”)。stroke = “transparent” ; },
          selectionAdorned:false
        },
        new go.Binding(“points”)。makeTwoWay(),
        $(go.Shape,   //高亮形状,通常透明 
          {isPanelMain:true,strokeWidth:8,笔画:“透明”,名称:“HIGHLIGHT” }),
        $(go.Shape,   //链接路径形状 
          {isPanelMain:true,stroke:“gray”,strokeWidth:2 },
           new go.Binding(“stroke”,“isSelected”,function (sel) {  return sel?“ dodgerblue“:”grey“ ;})。ofObject()),
        $(go.Shape,   //箭头 
          {toArrow:“标准”,strokeWidth:0,填充:“灰色” }),
        $(go.Panel,“Auto”,   //链接标签,通常不可见 
          {visible:false,name:“LABEL”,segmentIndex:2,segmentFraction:0.5 },
           new go.Binding(“visible”,“visible” “)。makeTwoWay(),
          $(go.Shape,“ RoundedRectangle ”,   //标签形状 
            {fill:“#F8F8F8”,strokeWidth:0 }),
          $(go.TextBlock,“是”,   //标签
            {
              textAlign:“center”,
              字体:“10pt helvetica,arial,sans-serif”,
              中风:“#333333”,
              可编辑:是的
            },
            new go.Binding(“text”)。makeTwoWay())
        )
      );

    //如果出现“条件”节点,则可以看到链接标签。
    //此侦听器由“LinkDrawn”和“LinkRelinked”DiagramEvents调用。
    function  showLinkLabel (e) { 
      var label = e.subject.findObject(“LABEL”);
      if(label!== null)label.visible =(e.subject.fromNode.data.category === “Conditional”);
    }

    // LinkingTool和RelinkingTool使用的临时链接也是正交的:
    myDiagram.toolManager.linkingTool.temporaryLink.routing = go.Link.Orthogonal;
    myDiagram.toolManager.relinkingTool.temporaryLink.routing = go.Link.Orthogonal;

    加载();  //从一些JSON文本加载初始图表

    //初始化页面左侧的Palette
    myPalette =
      $(go.Palette,“myPaletteDiv”,   //必须命名或引用DIV HTML元素
        {
          scrollsPageOnFocus:false,
          nodeTemplateMap:myDiagram.nodeTemplateMap,   //共享myDiagram 
          模型使用的模板:new go.GraphLinksModel([   //指定Palette的内容 
            {category:“Start”,text:“Start” },
            {text:“Step” },
            {category:“Conditional”,text:“???” },
            {category:“End”,text:“End” },
            {category:“Comment”,text:“Comment” }
          ])
        });
  } //结束init


  //以JSON格式显示图表模型,用户可以编辑
  函数 save () { 
    document.getElementById(“mySavedModel”)。value = myDiagram.model.toJson();
    myDiagram.isModified = false ;
  }
  function  load () { 
    myDiagram.model = go.Model.fromJson(document.getElementById( “mySavedModel”)。 value);
  }

  //通过打开一个新窗口来打印图表,该窗口包含每个页面
  函数 printDiagram ()
    的图表内容的SVG图像{ var svgWindow = window.open();
    if(!svgWindow)返回 ;  //未能打开一个新的窗口
    变种 printSize = 新 go.Size(700,960);
    var bnds = myDiagram.documentBounds;
    var x = bnds.x;
    var y = bnds.y;
    while(y <bnds.bottom){
       while(x <bnds.right){
         var svg = myDiagram.makeSVG({scale:1.0,position:new go.Point(x,y),size:printSize});
        svgWindow.document.body.appendChild(SVG);
        x + = printSize.width;
      }
      x = bnds.x;
      y + = printSize.height;
    }
    setTimeout(function () { svgWindow.print();},1);
  }

< div  id = “sample” > 
  < div  style = “width:100%; display:flex; justify-content:space-between” > 
    < div  id = “myPaletteDiv”  style = “width:100px; margin-right:2px ; background-color:whitesmoke; border:solid 1px black“ > </ div > 
    < div  id = ”myDiagramDiv“  style = ”flex-grow:1; height:750px; border:solid 1px black“ > </ div > 
  < / div >
  < p >
  FlowChart示例演示了GoJS的几个关键功能,
  即< 一个 HREF = “../intro/palette.html” >调色板</ 一 > S,
   < 一 HREF = “../intro/links.html” >可链接节点</ 一 >,拖/放行为,
   < 一个 HREF = “../intro/textBlocks.html” >文本编辑</ 一 >,以及使用
   < 一个 HREF = “../intro/templateMaps.html” >节点模板地图</ 一 >在图表中。
  </ p > 
  < p >
  鼠标悬停在节点上以查看其端口。
  从这些端口拖动以创建新的链接。
  选择“链接”可以重新整形和重新链接它们。
  选择一个节点,然后单击其TextBlock将允许
  您要编辑文本(开始和结束节点除外)。
  </ p > 
  < button  id = “SaveButton”  onclick = “save()” > Save </ button > 
  < button  onclick = “load()” > Load </ button >
  图模型以JSON格式保存:
  < 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”:“ -  5 75”,“text”:“将烤箱预热到375 F”},
{“key”:1,“loc”:“175 100”,“text”:“在一个碗里,混合:1杯人造黄油,1.5茶匙香草,1茶匙盐”},
{“key”:2,“loc”:“175 200”,“text”:“逐渐打入1杯糖和2杯筛面粉”},
{“key”:3,“loc”:“175 290”,“text”:“混合6盎司(1杯)雀巢的半甜巧克力酱”},
{“key”:4,“loc”:“175 380”,“text”:“均匀按压到15x10x1 pan”},
{“key”:5,“loc”:“355 85”,“text”:“精选1/2杯你选择的坚果”},
{“key”:6,“loc”:“175 450”,“text”:“顶上撒上坚果”},
{“key”:7,“loc”:“175 515”,“text”:“烘烤25分钟,让凉爽”},
{“key”:8,“loc”:“175 585”,“text”:“切成矩形网格”},
{“key”: -  2,“category”:“End”,“loc”:“175 660”,“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 > 
  < button  onclick = “printDiagram()” >使用SVG打印图</ button > 
</ div >

在GitHub上查看此示例页面的源代码

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Flowchart</title>
<meta name="description" content="Interactive flowchart diagram implemented by GoJS in JavaScript for HTML." />
<!-- Copyright 1998-2018 by Northwoods Software Corporation. -->
<meta charset="UTF-8">
<script src="../release/go.js"></script>
<script src="../assets/js/goSamples.js"></script>  <!-- this is only for the GoJS Samples framework -->
<script id="code">
  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,
          scrollsPageOnFocus: false,
          "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
        }
      ];
    }
    // Define a function for creating a "port" that is normally transparent.
    // The "name" is used as the GraphObject.portId,
    // the "align" is used to determine where to position the port relative to the body of the node,
    // the "spot" is used to control how links connect with the port and whether the port
    // stretches along the side of the node,
    // and the boolean "output" and "input" arguments control whether the user can draw links from or to the port.
    function makePort(name, align, spot, output, input) {
      var horizontal = align.equals(go.Spot.Top) || align.equals(go.Spot.Bottom);
      // the port is basically just a transparent rectangle that stretches along the side of the node,
      // and becomes colored when the mouse passes over it
      return $(go.Shape,
        {
          fill: "transparent",  // changed to a color in the mouseEnter event handler
          strokeWidth: 0,  // no stroke
          width: horizontal ? NaN : 8,  // if not stretching horizontally, just 8 wide
          height: !horizontal ? NaN : 8,  // if not stretching vertically, just 8 tall
          alignment: align,  // align the port on the main Shape
          stretch: (horizontal ? go.GraphObject.Horizontal : go.GraphObject.Vertical),
          portId: name,  // declare this object to be a "port"
          fromSpot: spot,  // declare where links may connect at this port
          fromLinkable: output,  // declare whether the user may draw links from here
          toSpot: spot,  // declare where links may connect at this port
          toLinkable: input,  // declare whether the user may draw links to here
          cursor: "pointer",  // show a different cursor to indicate potential link point
          mouseEnter: function(e, port) {  // the PORT argument will be this Shape
            if (!e.diagram.isReadOnly) port.fill = "rgba(255,0,255,0.5)";
          },
          mouseLeave: function(e, port) {
            port.fill = "transparent";
          }
        });
    }
    function textStyle() {
      return {
        font: "bold 11pt Helvetica, Arial, sans-serif",
        stroke: "whitesmoke"
      }
    }
    // define the Node templates for regular nodes
    myDiagram.nodeTemplateMap.add("",  // the default category
      $(go.Node, "Table", nodeStyle(),
        // the main object is a Panel that surrounds a TextBlock with a rectangular Shape
        $(go.Panel, "Auto",
          $(go.Shape, "Rectangle",
            { fill: "#00A9C9", strokeWidth: 0 },
            new go.Binding("figure", "figure")),
          $(go.TextBlock, textStyle(),
            {
              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, go.Spot.TopSide, false, true),
        makePort("L", go.Spot.Left, go.Spot.LeftSide, true, true),
        makePort("R", go.Spot.Right, go.Spot.RightSide, true, true),
        makePort("B", go.Spot.Bottom, go.Spot.BottomSide, true, false)
      ));
    myDiagram.nodeTemplateMap.add("Conditional",
      $(go.Node, "Table", nodeStyle(),
        // the main object is a Panel that surrounds a TextBlock with a rectangular Shape
        $(go.Panel, "Auto",
          $(go.Shape, "Diamond",
            { fill: "#00A9C9", strokeWidth: 0 },
            new go.Binding("figure", "figure")),
          $(go.TextBlock, textStyle(),
            {
              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, go.Spot.Top, false, true),
        makePort("L", go.Spot.Left, go.Spot.Left, true, true),
        makePort("R", go.Spot.Right, go.Spot.Right, true, true),
        makePort("B", go.Spot.Bottom, go.Spot.Bottom, true, false)
      ));
    myDiagram.nodeTemplateMap.add("Start",
      $(go.Node, "Table", nodeStyle(),
        $(go.Panel, "Auto",
          $(go.Shape, "Circle",
            { minSize: new go.Size(40, 40), fill: "#79C900", strokeWidth: 0 }),
          $(go.TextBlock, "Start", textStyle(),
            new go.Binding("text"))
        ),
        // three named ports, one on each side except the top, all output only:
        makePort("L", go.Spot.Left, go.Spot.Left, true, false),
        makePort("R", go.Spot.Right, go.Spot.Right, true, false),
        makePort("B", go.Spot.Bottom, go.Spot.Bottom, true, false)
      ));
    myDiagram.nodeTemplateMap.add("End",
      $(go.Node, "Table", nodeStyle(),
        $(go.Panel, "Auto",
          $(go.Shape, "Circle",
            { minSize: new go.Size(40, 40), fill: "#DC3C00", strokeWidth: 0 }),
          $(go.TextBlock, "End", textStyle(),
            new go.Binding("text"))
        ),
        // three named ports, one on each side except the bottom, all input only:
        makePort("T", go.Spot.Top, go.Spot.Top, false, true),
        makePort("L", go.Spot.Left, go.Spot.Left, false, true),
        makePort("R", go.Spot.Right, go.Spot.Right, false, true)
      ));
    myDiagram.nodeTemplateMap.add("Comment",
      $(go.Node, "Auto", nodeStyle(),
        $(go.Shape, "File",
          { fill: "#EFFAB4", strokeWidth: 0 }),
        $(go.TextBlock, textStyle(),
          {
            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"; },
          selectionAdorned: false
        },
        new go.Binding("points") DIV HTML element
        {
          scrollsPageOnFocus: false,
          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" },
            { category: "Conditional", text: "???" },
            { category: "End", text: "End" },
            { category: "Comment", text: "Comment" }
          ])
        });
  } // end init
  // 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);
  }
  // print the diagram by opening a new window holding SVG images of the diagram contents for each page
  function printDiagram() {
    var svgWindow = window.open();
    if (!svgWindow) return;  // failure to open a new Window
    var printSize = new go.Size(700, 960);
    var bnds = myDiagram.documentBounds;
    var x = bnds.x;
    var y = bnds.y;
    while (y < bnds.bottom) {
      while (x < bnds.right) {
        var svg = myDiagram.makeSVG({ scale: 1.0, position: new go.Point(x, y), size: printSize });
        svgWindow.document.body.appendChild(svg);
        x += printSize.width;
      }
      x = bnds.x;
      y += printSize.height;
    }
    setTimeout(function() { svgWindow.print(); }, 1);
  }
</script>
</head>
<body onload="init()">
<div id="sample">
  <div style="width: 100%; display: flex; justify-content: space-between">
    <div id="myPaletteDiv" style="width: 100px; margin-right: 2px; background-color: whitesmoke; border: solid 1px black"></div>
    <div id="myDiagramDiv" style="flex-grow: 1; height: 750px; border: solid 1px black"></div>
  </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":"-5 75", "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 200", "text":"Gradually beat in 1 cup sugar and 2 cups sifted flour"},
{"key":3, "loc":"175 290", "text":"Mix in 6 oz (1 cup) Nestle's Semi-Sweet Chocolate Morsels"},
{"key":4, "loc":"175 380", "text":"Press evenly into ungreased 15x10x1 pan"},
{"key":5, "loc":"355 85", "text":"Finely chop 1/2 cup of your choice of nuts"},
{"key":6, "loc":"175 450", "text":"Sprinkle nuts on top"},
{"key":7, "loc":"175 515", "text":"Bake for 25 minutes and let cool"},
{"key":8, "loc":"175 585", "text":"Cut into rectangular grid"},
{"key":-2, "category":"End", "loc":"175 660", "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>
  <button onclick="printDiagram()">Print Diagram Using SVG</button>
</div>
</body>
</html>

想要查看在线操作示例,可以点击此处


标签:流程图

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP