svg class

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>生命周期链</title>
</head>
<body>
    <div id="life-cycle" style="height:1000px;width:1000px;">
            <svg id = "playground" xmlns="http://www.w3.org/2000/svg" version="1.1" height="100%" width="100%">
            </svg>
    </div>
</body>
<script src="main.js"></script>
</html>
const NAMESPACE = "http://www.w3.org/2000/svg";

class Pencil {
    constructor(origin_x, origin_y, line_width, color) {
        this.x = origin_x;
        this.y = origin_y;
        this.line_width = line_width;
        this.color = color;
        this.seq = 0;
        this.seq_draw = [];
        Pencil.prototype.x = this.x;
        Pencil.prototype.y = this.y;
    }

    drawBottomToRightArc(arc, direct) { //direction: 0 正向,1 逆向
        // <path d="M35 125 A 45 45,0,0,0,80 80 M 80 80 Z" stroke="black" stroke-width="5" fill="transparent"/>
        let pen = document.createElementNS(NAMESPACE,'path');
        let direction = direct || 0;
        pen.setAttribute('d',`M${this.x} ${this.y} A ${arc} ${arc},0,0,${direction},${this.x+arc} ${this.y-arc} M ${this.x+arc} ${this.y-arc} Z`);
        pen.setAttribute('stroke',this.color);
        pen.setAttribute('stroke-width',this.line_width);
        pen.setAttribute('fill','transparent');
        if(!this.seq) {
            return line;
        } else {
            this.x = this.x+arc;
            this.y = this.y-arc
            this.seq_draw.push(pen);
            return this;
        }
    }

    drawLeftToBottomArc(arc, direct) {
        let pen = document.createElementNS(NAMESPACE,'path');
        let direction = direct || 0;
        pen.setAttribute('d',`M${this.x} ${this.y} A ${arc} ${arc},0,0,${direction},${this.x+arc} ${this.y+arc} M ${this.x+arc} ${this.y+arc} Z`);
        pen.setAttribute('stroke',this.color);
        pen.setAttribute('stroke-width',this.line_width);
        pen.setAttribute('fill','transparent');
        if(!this.seq) {
            return line;
        } else {
            this.x = this.x+arc;
            this.y = this.y+arc
            this.seq_draw.push(pen);
            return this;
        }
    }

    drawRightToUpArc(arc, direct) {
        let pen = document.createElementNS(NAMESPACE,'path');
        let direction = direct || 0;
        pen.setAttribute('d',`M${this.x} ${this.y} A ${arc} ${arc},0,0,${direction},${this.x-arc} ${this.y-arc} M ${this.x-arc} ${this.y-arc} Z`);
        pen.setAttribute('stroke',this.color);
        pen.setAttribute('stroke-width',this.line_width);
        pen.setAttribute('fill','transparent');
        if(!this.seq) {
            return line;
        } else {
            this.x = this.x-arc;
            this.y = this.y-arc
            this.seq_draw.push(pen);
            return this;
        }
    }

    drawUpToLeftArc(arc, direct) {
        let pen = document.createElementNS(NAMESPACE,'path');
        let direction = direct || 0;
        pen.setAttribute('d',`M${this.x} ${this.y} A ${arc} ${arc},0,0,${direction},${this.x-arc} ${this.y+arc} M ${this.x-arc} ${this.y+arc} Z`);
        pen.setAttribute('stroke',this.color);
        pen.setAttribute('stroke-width',this.line_width);
        pen.setAttribute('fill','transparent');
        if(!this.seq) {
            return line;
        } else {
            this.x = this.x-arc;
            this.y = this.y+arc
            this.seq_draw.push(pen);
            return this;
        }
    }

    drawDownwardLine(len, direct) {
        let line = document.createElementNS(NAMESPACE,'line');
        let direction = direct || 0;
        let next_y;
        line.setAttribute('x1',this.x);
        line.setAttribute('y1',this.y);
        line.setAttribute('stroke',this.color);
        line.setAttribute('stroke-width',this.line_width);
        if(!direction) {
            next_y = this.y+len
            line.setAttribute('x2',this.x);
            line.setAttribute('y2',next_y);
        } else {
            next_y = this.y-len;
            line.setAttribute('x2',this.x);
            line.setAttribute('y2',next_y);
        }
        if(!this.seq) {
            return line;
        } else {
            this.y = next_y;
            this.seq_draw.push(line);
            return this;
        }
    }

    drawRightWardLine(len, direct) {
        let line = document.createElementNS(NAMESPACE,'line');
        let direction = direct || 0;
        let next_x;
        line.setAttribute('x1',this.x);
        line.setAttribute('y1',this.y);
        line.setAttribute('stroke',this.color);
        line.setAttribute('stroke-width',this.line_width);
        if(!direction) {
            next_x = this.x+len
            line.setAttribute('x2',next_x);
            line.setAttribute('y2',this.y);
        } else {
            next_x = this.x-len
            line.setAttribute('x2',next_x);
            line.setAttribute('y2',this.y);
        }
        if(!this.seq) {
            return line;
        } else {
            this.x = next_x;
            this.seq_draw.push(line);
            return this;
        }
    }

    drawCircle(radius) {
        // <circle cx="80" cy="70" r="10" stroke="black" stroke-width="5" fill="transparent"/>
        let circle = document.createElementNS(NAMESPACE,'circle');
        circle.setAttribute('cx',this.x);
        circle.setAttribute('cy',this.y);
        circle.setAttribute('r',radius);
        circle.setAttribute('stroke',this.color);
        circle.setAttribute('stroke-width',this.line_width);
        circle.setAttribute('fill','transparent');
        if(!this.seq) {
            return circle;
        } else {
            this.seq_draw.push(circle);
            return this;
        }
    }

    drawTextAnnotation(content, anchor, size, style) {
        // <text x="80" y="55" font-size="15" text-anchor="middle">文件审批</text>
        let text = document.createElementNS(NAMESPACE,'text');
        text.setAttribute('x',this.x);
        text.setAttribute('y',this.y-10);
        text.setAttribute('text-anchor',anchor);
        text.setAttribute('font-size',size);
        text.setAttribute('style',style);
        text.textContent = content;
        if(!this.seq) {
            return text;
        } else {
            this.seq_draw.push(text);
            return this;
        }
    }

    setAxis(new_x, new_y) {
        this.x = new_x;
        this.y = new_y;
        return this;
    }

    resetAxis() {
        this.x = Pencil.prototype.x;
        this.y = Pencil.prototype.y;
        return this;
    }

    seqDraw() {
        this.seq = 1;
        this.seq_draw = [];
        return this;
    }

    endDraw() {
        this.seq = 0;
        let group = document.createElementNS(NAMESPACE,'g');
        this.seq_draw.forEach(function(draw) {
            group.appendChild(draw);
        });
        return group;
    }

    getCurrentAxis() {
        return [this.x, this.y];
    }
}

let area = document.getElementById('playground');
let node = new Pencil(80,80,3,'grey');
area.appendChild(node.seqDraw().drawBottomToRightArc(45).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawLeftToBottomArc(45).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(135).endDraw());
area.appendChild(node.seqDraw().drawBottomToRightArc(45).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawLeftToBottomArc(45).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(135).endDraw());
area.appendChild(node.seqDraw().drawBottomToRightArc(45).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawLeftToBottomArc(45).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(135).endDraw());
area.appendChild(node.seqDraw().drawBottomToRightArc(45).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawLeftToBottomArc(45).endDraw());
area.appendChild(node.seqDraw().drawLeftToBottomArc(45,1).drawDownwardLine(45).endDraw());
let axis = node.getCurrentAxis();
area.appendChild(node.seqDraw().drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(60,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(60,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(60,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawUpToLeftArc(45).drawDownwardLine(90).endDraw());
console.log(node.x,node.y);
area.appendChild(node.setAxis(axis[0],axis[1]).seqDraw().drawDownwardLine(135).endDraw());
area.appendChild(node.seqDraw().drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(60,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(60,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(60,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(60,1).endDraw());
area.appendChild(node.seqDraw().drawRightToUpArc(45,1).drawCircle(5).drawTextAnnotation('审批节点','middle',15).drawUpToLeftArc(45,1).endDraw());
area.appendChild(node.seqDraw().drawRightWardLine(60,1).endDraw());


class ApproveNode {
    constructor(origin_x, origin_y, line_width, color, arc_radius) {
        this.pen = new Pencil(origin_x, origin_y, line_width, color);
        this.arc_radius = arc_radius;
    }

    createApprovalNode(content) {
        this.pen.seqDraw().drawRightToUpArc(this.arc_radius,1).drawCircle(5).drawTextAnnotation(content,'middle',15).drawUpToLeftArc(arc_radius,1).endDraw();
    }

    createInnerApproveConnection(len) {
        this.pen.seqDraw().drawRightWardLine(len).endDraw();
    }

    createInterApproveConnection() {

    }
}

class ApproveChainResolver {
    constructor() {

    }

    resolveChain() {

    }

    setNodeActive() {

    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值