jqueryui + jsplubm 实现模块拖拽连线回显

摘要:
模块的拖拽分为4步,写的很粗糙,给自己留个底。$.droppable;3.具体创建模块的时候要使用jsplumb插件创建模块,jsplumb可以实现连线的功能_acsd.pm.moduledrag=3.将模块HTML和ID内容记录下来,存到集合里边,并将集合编码入库TakeHtml:function{if{//添加_acsd.pm.elManager.ElInfoAdd;//转换json对象}elseif{//修改_acsd.pm.elManager.ElInfoEidit;//转换json对象}elseif//删除{_acsd.pm.elManager.ElInfoRemove;//转换json对象}varjsonElList=JSON.stringify;jsonElList=encodeURIComponent;_acsd.pm.appManager.APPHTMLUpdate;}-------------_acsd.pm.elManager={ElInfoAdd:function{_elList.push;//添加模块到集合中},ElInfoEidit:function{//编辑模块$.each;},ElInfoRemove:function{varisReturn=false;//移除位数$.each(_elList,function(i,val){if(!isReturn){if{//判断选中的模块编辑_elList.splice(i,1);isReturn=true;}}});if{$.each;}},ElTakeUpdate:function{$.each;varjsonElList=JSON.stringify;jsonElList=encodeURIComponent;_acsd.pm.appManager.APPHTMLUpdate;}}4.回显的时候将解码后得到的集合循序回显,//假设date是从数据库查出来编码后的数据//1》_elList=eval;$.each;//2》$.each(_elList,function(val,txt){//添加链接线,有连线的连线if(txt.optid!

模块的拖拽分为 4步,写的很粗糙,给自己留个底。
var _elList =[];存模块的集合

1. jquery-ui 实现拖拽

  $("#workflow_app_outer .tool").draggable({  //增加拖拽功能
        helper: "clone",
        zIndex: 100,
        appendTo: "#workflow_app",
        start: function (event, ui) {
        },
        stop: function (event, ui) {
        }
    });

2. 拖拽目标位置后创建模块。

$("#workflow_app").droppable({  //拖拽到目标容易后触发
        accept: '#workflow_app_outer .tool',
        hoverClass: 'modelhover',
        drop: function (event, ui) {
            _acsd.pm.moduledrag.addShape({  //调用创建模块的方法
                skin: ui.draggable.attr("vskin"),
                html: ui.draggable.attr("vhtml"),
                type: ui.draggable.attr("vtype"),
                position: ui.position,
                target: $(this)
            });
        }
    });

3. 具体创建模块的时候要使用jsplumb插件创建模块,jsplumb可以实现连线的功能

_acsd.pm.moduledrag =(function ($, window) {
 return{
addShape: function (_opt) {
            var opt = $.extend(true, {}, {
                id: guidGenerator(),
                skin: "",
                html: "",
                type: "0",
                position: {
                    top: 0,
                    left: 0},
                target: $(document.body)
            }, _opt); 

            var _el = $('<div class="' + opt.skin + 'proc_l pingping con_po1 b_p1 b_p1c"  id="' + opt.id + '" onmouseup=\"_acsd.pm.appManager.TakeHtml(0,this)\" ></div>');
          
            opt.target.append(_el.css({  //将鼠标的当前位置交给新创建的模块(div)的位置
                "top": opt.position.top,
                "left": opt.position.left
            }).find(".m_close1").click(function () {
                //_acsd.pm.moduledrag.delShape(opt.id, moudleid);    //关闭
}).end());
            _acsd.pm.wfCommon.plumb.AddEndpoints(opt.id, ["RightMiddle"], ["LeftMiddle"]);  //添加连线必备的点
            jsPlumb.draggable(_el);  //关键作用,这句才能使模块移动 
            _acsd.pm.appManager.TakeHtml(1, _el[0]); //操作模块属性,从这儿移到第3步》》》》》》
}
 }
})

3. 将模块HTML和ID内容记录下来,存到集合里边,并将集合编码入库

TakeHtml: function (type, apphtml) {
        if (type == 1) {  //添加
            _acsd.pm.elManager.ElInfoAdd(apphtml.id, apphtml.outerHTML); //转换json对象 
}
        else if (type == 0) {  //修改
            _acsd.pm.elManager.ElInfoEidit(apphtml.id, apphtml.outerHTML); //转换json对象 
}
        else if (type == 2)  //删除
{
            _acsd.pm.elManager.ElInfoRemove(apphtml); //转换json对象 
}
        var jsonElList =JSON.stringify(_elList);
        jsonElList =encodeURIComponent(jsonElList);
        _acsd.pm.appManager.APPHTMLUpdate(_acsd.property.getAppid(), jsonElList);
    }
-------------
_acsd.pm.elManager ={
    ElInfoAdd: function (optid, opthtml) {
        _elList.push({ optid: optid, opthtml: opthtml, connid: "" }); //添加模块到集合中
},
    ElInfoEidit: function (optid, opthtml) {  //编辑模块
$.each(_elList, function (i, val) {
            if (val.optid == optid) {        //判断选中的模块编辑
                val.opthtml =opthtml;
            }
        });
    },
    ElInfoRemove: function (optid) {
        var isReturn = false; //移除位数 
$.each(_elList, function (i, val) {
            if (!isReturn) {
                if (val.optid == optid) {        //判断选中的模块编辑
                    _elList.splice(i, 1);
                    isReturn = true;
                }
            }
        });
        if(isReturn) {
            $.each(_elList, function (i, val) {
                if (val.connid ==optid) {
                    val.connid = "";
                }
            });
        }
    },
    ElTakeUpdate: function (id) {
        $.each(_elList, function (i, val) {
            if (val.optid ==id) {
                val.opthtml = $("#" + id)[0].outerHTML;
            }
        });
        var jsonElList =JSON.stringify(_elList);
        jsonElList =encodeURIComponent(jsonElList);
        _acsd.pm.appManager.APPHTMLUpdate(_acsd.property.getAppid(), jsonElList);
    }
}

4. 回显的时候将解码后得到的集合循序回显,

 //假设date是从数据库查出来编码后的数据
  //1》
_elList =eval(date);   
$.each(_elList, function (val, txt) {
              $("#workflow_app").append(txt.opthtml); //开始顺序回显模块
              _acsd.pm.wfCommon.plumb.AddEndpoints(txt.optid, ["RightMiddle"], ["LeftMiddle"]); //为每个模块添加上下链接需要的点
});
//2》
 $.each(_elList, function (val, txt) {//添加链接线,有连线的连线
              if (txt.optid != "" && txt.connid != "") {
                  jsPlumb.connect({ uuids: [txt.optid + "RightMiddle", txt.connid + "LeftMiddle"], editable: true});
              }
          });

//3》
jsPlumb.draggable(jsPlumb.getSelector(".pingping")); //初始化模块拖拽  都能拖拽

免责声明:文章转载自《jqueryui + jsplubm 实现模块拖拽连线回显》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WebRTC APM音频处理流程概述DotNetBar 源码与安装版本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jsPlumb 基本概念

jsPlumb 基本概念 一、默认属性 Anchor:锚点(连接点位置),可以设置在任何没有锚点的目标上(endPoint) Anchors:设置在connect的源和目标点的连接点位置,默认是 BottomCenter Connector:连接线(比如:["Bezier", {curviness: 63}]为贝塞尔曲线) Connec...

使用jsPlumb插件实现动态连线功能

这周去看了两天的羽毛球亚锦赛,工作有提前晚上加班做一些,但是技术文章却拉下了。这段时间一直在寻找可以实现前端元素动态连线的功能,找了好几个库,考虑过用d3或者原生svg和canvas来实现,最后和同项目的同事商量后决定使用jsPlumb插件库来做。jsPlumb是一个强大的JavaScript连线库,它可以将html中的元素用箭头、曲线、直线等连接起...

jsplumb

一、简介: jsplumb是jquery的一个插件,它能够让你用动态或静态的链接来连接html界面上的元素,并且从1.10版本开始,提供用鼠标拖动来连接。jsPlumb允许您使用SVG,Canvas或者VML链接屏幕上的元素,这些取决于您使用的浏览器的能力。 主要包含以下模块:Anchor、Connector、Endpoint、Overlay、Styl...

jsplumb 中文教程

https://wdd.js.org/jsplumb-chinese-tutorial/#/ 1. jsplumb 中文基础教程后续更新会在仓库:https://github.com/wangduanduan/jsplumb-chinese-tutorial.git 本文的图片是托管于七牛云的,由于使用的是测试域名,可能不知道哪天,图片就无法显示了。不...