Qunee for HTML5(二)

这里关于Qunee的基础的教程就不介绍了,大家可以参考官方教程即可,下面介绍官方的一个例子。先上结果图:

Paste_Image.png

代码如下

<!DOCTYPE html>
<html>
<head>
    <title>Hello Qunee for HTML5</title>
    <meta charset="utf-8">
</head>
<body>
<div style="height: 500px;" id="canvas"/>
<script src="../js/qunee-min.js"></script>
<script>
/**
* This file is part of Qunee for HTML5.
* Copyright (c) 2016 by qunee.com
**/
if(!window.getI18NString){getI18NString = function(s){return s;}}
function createNode(x, y, text, fillColor, number, lampColor) {
    var width = 150;
    var height = 24;
    var padding = 4;
    var node = graph.createNode(text, x, y);
    node.image = '../img/web.png';//cloud.svg';
    node.size = {height: height}
    node.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.CENTER_MIDDLE);
    node.setStyle(Q.Styles.LABEL_POSITION, {x: width / 2, y: height / 2});
    node.setStyle(Q.Styles.BACKGROUND_COLOR, fillColor || '#FFF');
    node.setStyle(Q.Styles.BORDER, 1);
    node.setStyle(Q.Styles.BORDER_COLOR, '#FA0');
    node.setStyle(Q.Styles.PADDING, padding);

    var numberLabel = new Q.LabelUI();
    numberLabel.position = {x: width - 10, y: height / 2 - 6};
    numberLabel.fontSize = 10;
    numberLabel.fontStyle = 'bold';
    node.addUI(numberLabel, {
        property: "number",
        propertyType: Q.Consts.PROPERTY_TYPE_CLIENT,
        bindingProperty: "data"
    });
    node.set('number', '' + number);
    var lamp = new Q.ImageUI(Q.Shapes.getShape(Q.Consts.SHAPE_CIRCLE, -3.5, -3.5, 7, 7));
    lamp.fillGradient = new Q.Gradient(Q.Consts.GRADIENT_TYPE_RADIAL, [Q.toColor(0xAAFFFFFF), Q.toColor(0x33EEEEEE), Q.toColor(0x44888888), Q.toColor(0x33666666)],
        [0.1, 0.3, 0.7, 0.9], 0, -0.2, -0.2);
    lamp.lineWidth = 0.5;
    lamp.strokeStyle = '#CCC';
    lamp.position = {x: width - 10, y: height / 2 + 6};
    node.addUI(lamp, {
        property: "lampColor",
        propertyType: Q.Consts.PROPERTY_TYPE_CLIENT,
        bindingProperty: "fillColor"
    });
    node.set('lampColor', lampColor);

    return node;
}

function createEdge(from, to) {
    var edge = graph.createEdge(from, to);
    edge.setStyle(Q.Styles.ARROW_TO_SIZE, {width: 5, height: 8});
    edge.edgeType = Q.Consts.EDGE_TYPE_ORTHOGONAL_HORIZONTAL;
    edge.setStyle(Q.Styles.EDGE_SPLIT_BY_PERCENT, false);
    edge.setStyle(Q.Styles.EDGE_SPLIT_VALUE, 30);
    edge.setStyle(Q.Styles.EDGE_CORNER, Q.Consts.EDGE_CORNER_NONE);
    return edge;
}


var graph = new Q.Graph('canvas');
graph.styles = {};
graph.styles[Q.Styles.SELECTION_TYPE] = Q.Consts.SELECTION_TYPE_BORDER;
graph.styles[Q.Styles.SELECTION_COLOR] = '#FA0';
graph.styles[Q.Styles.SELECTION_BORDER] = 3;

graph.isMovable = function(){ return false;}
graph.moveToCenter();
var hgap = 250;
var vgap = 40;
var a = createNode(0, 0, 'Web LB API', null, 0, '#FA0');
var b1 = createNode(hgap, -vgap, 'Web LB API', '#FF0', 0, '#FF0');
var b2 = createNode(hgap, vgap, 'Web LB API', null, 0, '#00F');
var c1 = createNode(hgap * 2, vgap / 3 - vgap, 'Web LB API', '#FF0', 0, '#0FF');
var c2 = createNode(hgap * 2, vgap / 3 + vgap, 'Web LB API', null, 0, '#0F0');

var edge1 = createEdge(a, b1);
var edge2 = createEdge(a, b2);
var edge3 = createEdge(a, c1);
//            var edge4 = createEdge(a, c2);
var edge5 = createEdge(b1, c1);
//            var edge6 = createEdge(b1, c2);
var edge7 = createEdge(b2, c1);

var isSetting = false;
graph.selectionModel.listChangeDispatcher.on(function (evt) {
    if(isSetting){
        return;
    }
    if(evt.kind == 'add'){
        var data = evt.data;
        if(data instanceof Q.Node){
            isSetting = true;
            var edges = data.getEdges();
            edges.push(data);
            graph.setSelection(edges);
            isSetting = false;
        }
    }
})

//do layout
graph.callLater(function () {
    var fromBounds = graph.getUIBounds(edge3.from);
    var toBounds = graph.getUIBounds(edge3.to);
    edge3.addPathSegment([fromBounds.right, fromBounds.cy - 10]);
    edge3.addPathSegment([fromBounds.right + 15, fromBounds.cy - 10]);
    edge3.addPathSegment([fromBounds.right + 15, fromBounds.cy - 80]);
    edge3.addPathSegment([toBounds.x - 20, fromBounds.cy - 80]);
    edge3.addPathSegment([toBounds.x - 20, toBounds.cy - 5]);
    edge3.addPathSegment([toBounds.x, toBounds.cy - 5]);

    var fromBounds = graph.getUIBounds(edge5.from);
    var toBounds = graph.getUIBounds(edge5.to);
    edge5.addPathSegment([fromBounds.right, fromBounds.cy]);
    edge5.addPathSegment([toBounds.x - 25, fromBounds.cy]);
    edge5.addPathSegment([toBounds.x - 25, toBounds.cy]);
    edge5.addPathSegment([toBounds.x, toBounds.cy]);

    var fromBounds = graph.getUIBounds(edge7.from);
    var toBounds = graph.getUIBounds(edge7.to);
    edge7.addPathSegment([fromBounds.right, fromBounds.cy]);
    edge7.addPathSegment([toBounds.x - 25, fromBounds.cy]);
    edge7.addPathSegment([toBounds.x - 25, toBounds.cy + 5]);
    edge7.addPathSegment([toBounds.x, toBounds.cy + 5]);

    edge2.setStyle(Q.Styles.EDGE_FROM_OFFSET, {y: 8});
})

graph.setSelection(b1);

var time = setTimeout(function A() {
    graph.forEach(function (a) {
        if (!(a instanceof Q.Node)) {
            return;
        }
        a.set('number', '' + Q.randomInt(10));
        a.set('lampColor', Q.randomColor());
    })
    time = setTimeout(A, 1000);
}, 1000);

function destroy(){
    clearTimeout(time);
}
</script>
</body>
</html>

程序中定义了
1、createNode(x, y, text, fillColor, number, lampColor)创建节点函数,x,y是位置参数,text是文字标签,fillColor是填充色,number是数字标签,lampColor是指示灯颜色。
2、 createEdge(from, to) 创建线条函数。
剩下的就是连接关系的定义,具体看程序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容