• <menu id="w2i4a"></menu>
  • logo GoJS教程 2019

    文檔首頁>>GoJS教程 2019>>流程圖控件GoJS教程:初始視圖

    流程圖控件GoJS教程:初始視圖


    GoJS是一款功能強大,快速且輕量級的流程圖控件,可幫助你在JavaScript 和HTML5 Canvas程序中創(chuàng)建流程圖,且極大地簡化您的JavaScript / Canvas 程序。

    GoJS現(xiàn)已更新至最新版本2.0.17發(fā)布,修復了一些bug,增強用戶體驗,趕快下載試試吧~

    點擊下載GoJS最新試用版

    初始,自動和程序化視圖管理

    創(chuàng)建并分配模型以使某些零件出現(xiàn)在圖表中后,您可以控制零件最初在視口中出現(xiàn)的位置,還可以控制在修改圖表后它們在何處顯示。

    初始視圖

    您甚至可以在分配模型之前隨時輕松地設置Diagram.initialPosition和/或Diagram.initialScale屬性。 一旦創(chuàng)建了所有零件并執(zhí)行了任何初始布局,這將導致Diagram.position和/或Diagram.scale屬性被設置為指定的初始值。

    但是,如果您不知道圖表文檔有多大怎么辦?如果要顯示文檔的特定區(qū)域,您將不知道要設置的位置。如果要以最大的比例顯示一個大型文檔,以顯示所有文檔,則將不知道要設置的比例。

    解決此問題的一種方法是將Diagram.initialDocumentSpot和Diagram.initialViewportSpot屬性設置為特定的Spot值。例如,如果您正在顯示樹狀圖,并且希望樹水平居中,但垂直放置在頂部,則在創(chuàng)建圖時可以執(zhí)行以下操作:

     $(go.Diagram,“ myDiagramDiv”,
        {
          initialDocumentSpot:go.Spot.TopCenter,
          initialViewportSpot:go.Spot.TopCenter
        })

    這樣可以確保在圖的初始布局之后,圖內(nèi)容的中間最高點位于視口的中間最高點。

    解決此問題的另一種方法是設置Diagram.initialContentAlignment或Diagram.initialAutoScale屬性。例如,它是相當普遍希望確保小文件出現(xiàn)頂部為中心的圖表窗口內(nèi)-剛剛成立Diagram.initialContentAlignment到現(xiàn)貨,TopCenter?;蛘撸绻翱s放以適合”圖表,只需將Diagram.initialAutoScale設置為Diagram,Uniform即可。

     $(go.Diagram,“ myDiagramDiv”,
        {
          initialAutoScale:go.Diagram.Uniform
        })

    一般而言,您可能想嘗試將特定Node居中。這是您可以執(zhí)行的操作:

     diagram.nodeTemplate =
        $(go.Node, "Auto",
          new go.Binding("location", "loc"),
          $(go.Shape, { fill: "lightyellow" }),
          $(go.TextBlock, { margin: 5 },
            // show the location as text in the node
            new go.Binding("text", "loc",
                           function (p) { return p.x.toFixed() + ", " + p.y.toFixed(); }))
        );
     
      // initialize the model with random nodes:
      var nodeDataArray = [];
      for (var i = 0; i < 20; i++ ) {
        nodeDataArray.push({ loc: new go.Point(Math.random() * 600, Math.random() * 300) });
      }
      diagram.model.nodeDataArray = nodeDataArray;
     
      // this event handler is called when the diagram is first ready
      diagram.addDiagramListener("InitialLayoutCompleted", function(e) {
        // pick a random node data
        var data = nodeDataArray[Math.floor(Math.random()*nodeDataArray.length)];
        // find the corresponding Node
        var node = diagram.findNodeForData(data);
        // and center it and select it
        diagram.centerRect(node.actualBounds);
        diagram.select(node);
      });

    流程圖控件GoJS教程:初始視圖

    注意:由于默認情況下無法滾動到文檔的任何邊緣,因此如果所選節(jié)點恰好位于邊緣或邊緣附近,則該節(jié)點實際上無法在視口中居中。

    自動視圖管理

    有時,每次更改圖表后,您都希望控制視口(即Diagram.position和Diagram.scale)。例如,如果你總是希望保持文檔為中心的用戶已經(jīng)移動或刪除或插入節(jié)點,集之后Diagram.contentAlignment(而不是Diagram.initialContentAlignment)到Spot.Center。

    或者,如果您始終希望文檔保持“縮放到適合狀態(tài)”,請將Diagram.autoScale (而不是Diagram.initialAutoScale)設置為Diagram.Uniform。例如,概述圖可以做到這一點。

    程序化視圖管理

    如果您不想連續(xù)更改圖的位置或縮放比例,但是有時確實想要更改Diagram.position和/或Diagram.scale,則可以將這些屬性設置為所需的任何值。但是,請注意,Diagram.position的最終值通常受Diagram.documentBounds 以及視口的大小和圖的比例的限制。該Diagram.scale被限制Diagram.minScale和Diagram.maxScale。

    但是,更常見的是在Diagram上調(diào)用方法來獲得所需的結果。例如,要得到的效果Diagram.initialDocumentSpot和Diagram.initialViewportSpot當“InitialLayoutCompleted” DiagramEvent發(fā)生時,調(diào)用使用性能 Diagram.alignDocument與你想有重合的兩個期望的斑點。

    正如上面已經(jīng)證明,如果你想嘗試在視口中居中特定節(jié)點,你可以調(diào)用Diagram.centerRect與節(jié)點的GraphObject.actualBounds。

    如果要確保特定節(jié)點在視口內(nèi),但不一定居中,請調(diào)用Diagram.scrollToRect。

    如果只想以與用戶通過滾動條或鼠標滾輪相同的方式滾動圖,請調(diào)用帶有指定滾動量和方向的參數(shù)的Diagram.scroll。

    剛剛提到的Diagram方法不會更改Diagram.scale。如果要重新縮放圖以顯示整個文檔范圍,請調(diào)用Diagram.zoomToFit。更一般而言,如果希望以適合其視口的任意比例顯示圖的特定區(qū)域,請調(diào)用Diagram.zoomToRect。

    =====================================================

    想要購買GoJS正版授權的朋友可以咨詢慧都官方客服

    更多精彩內(nèi)容,歡迎關注下方的微信公眾號,及時獲取產(chǎn)品最新資訊▼▼▼

    流程圖控件GoJS教程:初始視圖

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();