jointJS(二)--jointJS官方版本的一个改造bottomtopmodel

首先看一下官网的案例
这就限制了我们流程图的走向,要从做往右来,而我要做的项目是从上往下,所以自己研究了一番,做了一个小小的demo。

joint.shapes.devs.TopBottomModel = joint.shapes.basic.Generic.extend(_.extend({}, joint.shapes.basic.PortsModelInterface, {

    markup: '<g class="rotatable"><g class="scalable"><rect class="body"/></g><rect class="imgcircle" /><image class="icon"/><text class="label"/><g class="inPorts"/><g class="outPorts"/></g>',
    portMarkup: '<g class="port port<%= id %>"><circle class="port-body"/><text class="port-label"/></g>',

    defaults: joint.util.deepSupplement({

        type: 'devs.TopBottomModel',
        size: {
            width: 1,
            height: 1
        },

        inPorts: [],
        outPorts: [],

        attrs: {
            '.': {
                magnet: false
            },
            '.body': {
                width: 150,
                height: 30,
                stroke: 'black',
                'rx': 15,
                'ry': 150,
            },
            '.port-body': {
                r: 6,
                magnet: true,
                stroke: 'black'
            },
            text: {
                fill: 'black',
                'pointer-events': 'none',
                'y-alignment': 'middle',
                'x-alignment': 'middle',
            },
            '.imgcircle': {
                width: 40,
                height: 40,
                'ref-x': -5,
                'ref-y': -5,
                ref: '.body',
                'rx': 20,
                'ry': 20
            },
            '.icon': {
                width: 40,
                height: 40,
                'ref-x': 0,
                'ref-y': 0,
                ref: '.imgcircle'
            },
            '.label': {
                text: '',
                'ref-x': 60,
                'ref-y': .2,
                'ref': '.body'
            },

            // CHANGED: find better positions for port labels 
            '.inPorts .port-label': {
                y: -15,
                x: 4
            },
            '.outPorts .port-label': {
                y: 25,
                x: 4
            }
            //
        }

    }, joint.shapes.basic.Generic.prototype.defaults),

    getPortAttrs: function(portName, index, total, selector, type) {
        var attrs = {};
        var portClass = 'port' + index;
        var portSelector = selector + '>.' + portClass;
        var portLabelSelector = portSelector + '>.port-label';
        var portBodySelector = portSelector + '>.port-body';

        attrs[portLabelSelector] = {
            text: portName
        };
        attrs[portBodySelector] = {
            port: {
                id: portName || _.uniqueId(type),
                type: type
            }
        };

        // CHANGED: swap x and y ports coordinates ('ref-y' => 'ref-x')
        attrs[portSelector] = {
            ref: '.body',
            'ref-x': (index + 0.5) * (1 / total)
        };
        // ('ref-dx' => 'ref-dy')
        if(selector === '.outPorts') {
            attrs[portSelector]['ref-dy'] = 0;
        }

        return attrs;
    }
}));

joint.shapes.devs.TopBottomModelView = joint.shapes.devs.ModelView;

自定义一个TopBottomModel,然后再new一个对象,自定义一写属性

var c1 = new joint.shapes.devs.TopBottomModel({
            position: {
                x: params.currentX,
                y: params.currentY
            },
            size: {
                width: 200,
                height: 30
            },
            inPorts: [''],
            outPorts: ['', ''],
            attrs: {
                '.label': {
                    text: params.content,
                },
                '.body': {
                    'rx': 15,
                    'ry': 150,
                },
                '.icon': {
                    'xlink:href': 'img/1.png'//这里是引入图片的地址
                },
                '.imgcircle': {
                    fill: 'rgb(43,142,209)'
                }
            },
        });

        graph.addCells([c1]);

    };

那么这样的话就做成了这样一个小图标,不知道为什么插图插不了,图片挺小的啊。。。总之,那个连线的小圈圈就跑到上下了~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值