gojs实现一个购物状态流程图图表效果代码
代码语言:html
所属分类:图表
代码描述:gojs实现一个购物状态流程图图表效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <script src="//repo.bfw.wiki/bfwrepo/js/go.js"></script> <div id="allSampleContent" class="p-4 w-full"> <script id="code"> function init() { // Since 2.2 you can also author concise templates with method chaining instead of GraphObject.make // For details, see https://gojs.net/latest/intro/buildingObjects.html const $ = go.GraphObject.make; // for conciseness in defining templates // some constants that will be reused within templates var roundedRectangleParams = { parameter1: 2, // set the rounded corner spot1: go.Spot.TopLeft, spot2: go.Spot.BottomRight // make content go all the way to inside edges of rounded corners }; myDiagram = $(go.Diagram, "myDiagramDiv", // must name or refer to the DIV HTML element { "animationManager.initialAnimationStyle": go.AnimationManager.None, "InitialAnimationStarting": e => { var animation = e.subject.defaultAnimation; animation.easing = go.Animation.EaseOutExpo; animation.duration = 900; animation.add(e.diagram, 'scale', 0.1, 1); animation.add(e.diagram, 'opacity', 0, 1); }, // have mouse wheel events zoom in and out instead of scroll up and down "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom, // support double-click in background creating a new node "clickCreatingTool.archetypeNodeData": { text: "new node" }, // enable undo & redo "undoManager.isEnabled": true, positionComputation: function (diagram, pt) { return new go.Point(Math.floor(pt.x), Math.floor(pt.y)); } }); // 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.slice(0, idx); } }); // define the Node template myDiagram.nodeTemplate = $(go.Node, "Auto", { locationSpot: go.Spot.Top, isShadowed: true, shadowBlur: 1, shadowOffset: new go.Point(0, 1), shadowColor: "rgba(0, 0, 0, .14)" }, new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify), // define the node's outer shape, which will surround the TextBlock $(go.Shape, "RoundedRectangle", roundedRectangleParams, { name: "SHAPE", fill: "#ffffff", strokeWidth: 0, stroke: null, portId: "", // this Shape is the Node's port, not the whole Node fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true, toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true, cursor: "pointer" }), $(go.TextBlock, { font: "bold small-caps 11pt helvetica, bold arial, sans-serif", margin: 7, stroke: "rgba(0, 0, 0, .87)", editable: true // editing the text automatically updates the model data }, new go.Binding("text").makeTwoWay()) ); // unlike the normal selection Adornment, this one includes a Button myDiagram.nodeTemplate.selectionAdornmentTemplate = $(go.Adornment, "Spot", $(go.Panel, "Auto", $(go.Shape, "RoundedRectangle", roundedRectangleParams, { fill: null, stroke: "#7986cb", strokeWidth: 3 }), $(go.Placeholder) // a Placeholder sizes itself to the selected Node ), // the button to create a "next" node, at the top-right corner $("Button", { alignment: go.Spot.TopRight, click: addNodeAndLink // this function is defined below }, $(go.Shape, "PlusLine", { width: 6, height: 6 }) ) // end button ); // end Adornment myDiagram.nodeTemplateMap.add("Start", $(go.Node, "Spot", { desiredSize: new go.Size(75, 75) }, new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify), $(go.Shape, "Circle", { fill: "#52ce60", /* green */ stroke: null, portId: "", fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true, toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true, cursor: "pointer" }), $(go.TextBlock, "Start", { font: "bold 16pt helvetica, bold arial, sans-serif", stroke: "whitesmoke" }) ) ); myDiagram.nodeTemplateMap.add("End", $(go.Node, "Spot", { desiredSize: new go.Size(75, 75) }, new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify), $(go.Shape, "Circle", { fill: "maroon", stroke: null, portId: "", fromLinkable: true, fromLinkableSelfNode: true, fromLinkableDuplicates: true, toLinkable: true, toLinkableSelfNode: true, toLinkableDuplicates: true, cursor: "pointer" }), $(go.Shape, "Circle", { fill: null, desiredSize: new go.Size(65, 65), strokeWidth: 2, stroke: "whitesmoke" }), $(go.TextBlock, "End", { font: "bold 16pt helvetica, bold arial, sans-serif", stroke: "whitesmoke" }) ) ); // clicking the button inserts a new node to the right of the selected node, // and adds a link to that new node function addNodeAndLink(e, obj) { var adornment = obj.part; var diagram = e.diagram; diagram.startTransaction("Add State"); // get the node data for which the user clicked the button var fromNode = adornment.adornedPart; var fromData = fromNode.data; // create a new "State" data object, positioned off to the right of the adorned Node var toData = { text: "new" }; var p = fromNode.location.copy(); p.x += 200; toData.loc = go.Point.stringify(p); // the "loc" property is a string, not a Point object // add the new node data to the model var model = diagram.model; model.addNodeData(toData); // create a link data from the old node data to the new node data var linkdata = { from: model.getKeyForNodeData(fromData), // or just: fromData.id to: model.getKeyForNodeData(toData), text: "transition" }; /.........完整代码请登录后点击上方下载按钮下载查看
网友评论0