流程設計器jQuery + svg/vml(Demo4 - 畫連線)

流程結點能夠添加了以後,接下來到畫結點與結點之間的連線,效果圖以下html

 

很眼饞visio的連線能夠折來折去,這裏實現的連線比較簡單。微信

首先是把連線的類型分爲Z(折線)、N(折線)及I(直線)3種類型,而後在兩個結點間劃線的時候,根據兩個結點間的位置來決定畫哪一種線。spa

一、結點2在結點1左邊code

二、結點2在結點1右邊htm

//計算兩個結點間連線的類型
p.calcLineType = function (n1, n2) {
    var x11 = n1.left, x12 = n1.left + n1.width, x21 = n2.left, x22 = n2.left + n2.width;
    var y11 = n1.top, y12 = n1.top + n1.height, y21 = n2.top, y22 = n2.top + n2.height;
    var x1m = (x11 + x12) / 2, x2m = (x21 + x22) / 2, y1m = (y11 + y12) / 2, y2m = (y21 + y22) / 2;
    if (x1m >= x22) {//結點2在結點1左邊(x軸有交集)
        if (y11 > y22) { //結點2在結點1左上方(y軸無交集)
            return "N";
        }
        else if (y12 < y21) {//結點2在結點1左下方(y軸無交集)
            return "N";
        }
        else {//y軸有交集 
            return (Math.abs(y1m - y2m) < 20 ? "I" : "Z");
        }
    }
    else { //結點2在結點1右邊(x軸有交集)
        if (y11 > y22) { //結點2在結點1右上方(y軸無交集)
            return (Math.abs(x1m - x2m) < 20 ? "I" : "N");
        }
        else if (y12 < y21) {//結點2在結點1右下方(y軸無交集)
            return (Math.abs(x1m - x2m) < 20 ? "I" : "N");
        }
        else {//y軸有交集 
            return (Math.abs(y1m - y2m) < 20 ? "I" : "Z");
        }
    }
}; 

目前連線就是這樣的簡單實現,哪位朋友有心思的幫忙整個好點的實現。 blog

代碼:GoFlow_04.zipip

演示地址:Demoget

微信演示公衆號:io

另:Silverlight版function

      Silverlight版Demo

相關文章
相關標籤/搜索