svg-line实现左右连线拖放操作答题效果代码

代码语言:html

所属分类:拖放

代码描述:svg-line实现左右连线拖放操作答题效果代码

代码标签: svg-line 左右 连线 拖放 操作 答题

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">

<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/svg-line.min.js"></script>
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/svg-line.min.css">
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/font-awesome-4.7.0/css/font-awesome.min.css">
    <script>
        function htmlEncode(s){
            return (typeof s != "string") ? s :
                s.replace(/"|&|'|<|>|[\x00-\x20]|[\x7F-\xFF]|[\u0100-\u2700]/g,
                    function($0){
                        var c = $0.charCodeAt(0), r = ["&#"];
                        c = (c == 0x20) ? 0xA0 : c;
                        r.push(c); r.push(";");
                        return r.join("");
                    });
        }
    </script>
    <style>
        body{margin:0}
                .p20{padding: 10px 20px;}
                .a-btn{font-weight: bold;cursor: pointer;color: #337ab7;font-size: 18px;margin-left: 10px;}
                em{color: red;font-style: normal}
                .br-table{table-layout: fixed;width: 100%}
                .br-table tr:first-child>td,th{
                    text-align: center;
                }
                .br-table td:first-child,th:first-child{
                    font-weight: bold;
                }
                .br-table td,th{
                    border-top: 1px solid #aaa;padding: 5px;
                    border-left: 1px solid #aaa;
                    font-size: 14px;line-height: 200%;
                }
                .br-table tr:last-child>td{
                    border-bottom: 1px solid #aaa;
                }
                .br-table tr>td:last-child{
                    border-right: 1px solid #aaa;
                }
                .br-table tr>th:last-child{
                    border-right: 1px solid #aaa;
                }
        
                .lt-tr.blue .list-box ul>li:not(.active):not(.disabled):hover{
                    background-color: #337ab7;color: white;border: none;box-shadow: 0 0 10px 0 #337ab7;
                }
                .lt-tr.blue .list-box ul>li.active:hover{
                    background-color: #337ac7;color: white;border: none;box-shadow: 0 0 10px 0 #337ac7;
                }
                .lt-tr.blue .list-tool .list-tool-indiv>div>i{
                    color:#337ab7!important;
                }
                .lt-tr.blue .list-box ul>li.active{
                    background-color: #337ab7;color: white;
                }
    </style>
</head>

<body class="full">
    <div id="mainDiv" class="full" style="padding: 10px 50px;box-sizing: border-box;">
        <h3 class="p20">预览效果</h3>
        <div class="p20" style="width: 100%;">
            点击连线可以删除连线;可以将线连接到连线之上
        </div>
        <div style="width: 100%;display: flex;flex-direction: row">
            <div id="aaa1" style="width: 500px;border: 1px solid #aaa;box-shadow: darkgrey 0 0 10px 0;margin: 20px;">

            </div>
            <div id="aaa2" style="width: 600px;border: 1px solid #aaa;box-shadow: darkgrey 0 0 10px 0;margin: 20px;">

            </div>
        </div>
        <div class="p20">
            <button onclick="alert(JSON.stringify(obj1.getData()));">获得数据</button>
            <button onclick="resize()">重置宽度</button>
            <button onclick="obj2.setData({'sh':'hs','t':'f'});">设置连线</button>
            <button onclick="addOptions('leftList')">动态插入选项</button>
            <button onclick="deleteOptions()">动态删除选项</button>
        </div>
        <h3 class="p20">答题连线</h3>
        <div style="width: 100%;display: flex;flex-direction: row">
            <div id="aaa3" style="width: 500px;border: 1px solid #aaa;box-shadow: darkgrey 0 0 10px 0;margin: 20px;">

            </div>
            <div id="aaa4" style="width: 500px;border: 1px solid #aaa;box-shadow: darkgrey 0 0 10px 0;margin: 20px;">

            </div>

        </div>
        <div class="p20" style="width: 100%;">
            <button onclick="getResult()">提交答案</button>

        </div>
        <h3 class="p20">回调事件</h3>
        <div class="p20" style="width: 100%;display: flex;flex-direction: row">
            <textarea rows="10" id="msg" style="width: 600px;outline: none">回调事件</textarea>

        </div>

        <h3 class="p20">调用方式</h3>
        <div class="p20">
            <pre>
            <script>
                document.write(htmlEncode("var obj2 = $(\"#aaa2\").svgLine({\n" +
                    "            //列表中选项的尺寸(支持sm、md、lg)\n" +
                    "            size:'md',\n" +
                    "            //皮肤,默认只支持green\n" +
                    "            skin:'green',\n" +
                    "            //左边列表标题\n" +
                    "            headerLeft:'MODULE1',\n" +
                    "            headerRight:'MODULE2',\n" +
                    "            //选项中文名称的字段名\n" +
                    "            name:'name',\n" +
                    "            //选项的唯一标识的字段名,\n" +
                    "            key:'key',\n" +
                    "            //左边列表选项\n" +
                    "            leftList:[\n" +
                    "                {name:'天',key:'t',disable:true,icon:'fa fa-bandcamp'},{name:'雨',key:'y'},{name:'大陆',key:'dl'},{name:'山花',key:'sh'},{name:'赤日',key:'cr'}\n" +
                    "                ],\n" +
                    "            rightList: [\n" +
                    "                {name:'地',key:'d'},{name:'风',key:'f'},{name:'长空',key:'ck'},{name:'苍穹',key:'cq'},{name:'海树',key:'hs'}\n" +
                    "            ],\n" +
                    "            //映射关系\n" +
                    "            mapping:{'sh':'hs','cr':'cq','t':'d','y':'f','dl':'ck'},\n" +
                    "            width:'600px',\n" +
                    "            //选择映射时回调\n" +
                    "            onSelect:function(l1,l2){\n" +
                    "                appendMsg($(\"#msg\"),\"您连接了\"+l1+\"和\"+l2);\n" +
                    "            },\n" +
                    "            //删除映射时回调\n" +
                    "            onCancle:function(l1,l2){\n" +
                    "                appendMsg($(\"#msg\"),\"您取消了\"+l1+\"和\"+l2);\n" +
                    "            },\n" +
                    "        });\n" +
                    "        //触发宽度重置\n" +
                    "        obj2.resize(宽度);\n" +
                    "        //获得数据\n" +
                    "        alert(JSON.stringify(obj2.getData()));"));
            </script>
        </pre>
        </div>
        <h3 class="p20">svgLine方法的参数说明</h3>
        <div class="p20">
            <table class="br-table" cellspacing="0">
                <tr>
                    <th width="160px">参数名</th>
                    <th>含义</th>
                    <th>取值范围</th>
                </tr>
                <tr>
                    <td>headerLeft</td>
                    <td>左边列表标题</td>
                    <td>任意值(支持html)</td>
                </tr>
                <tr>
                    <td>headerRight</td>
                    <td>右边列表标题</td>
                    <td>任意值(支持html)</td>
                </tr>
                <tr>
                    <td>leftList</td>
                    <td>左列表选项</td>
                    <td>数组,数组中的每个元素是一个选项,每个选项都需要定义key和name属性</td>
                </tr>
                <tr>
                    <td>rightList</td>
                    <td>右列表选项</td>
                    <td>数组</td>
                </tr>
                <tr>
                    <td>mapping</td>
                    <td>初始连线关系</td>
                    <td>左列表key值和右列表key值得关系</td>
                </tr>
                <tr>
                    <td>width</td>
                    <td>控件外部宽度</td>
                    <td>px或者%</td>
                </tr>
                <tr>
                    <td>size</td>
                    <td>控件选项的高度</td>
                    <td>只支持sm、md或lg,默认为sm</td>
                </tr>
                <tr>
                    <td>skin</td>
                    <td>控件皮肤</td>
                    <td>默认为green,可进行自定义拓展</td>
                </tr>
                <tr>
                    <td>removAble</td>
                    <td>选项是否显示移除按钮</td>
                    <td>true或false,默认为true,可控制所有选项是否可以手动删除,优先级小于选项自身的removable属性</td>
                </tr>
            </table>
        </div>
        <h3 class="p20">leftList和rightList选项的参数说明</h3>
        <div class="p20">
            <table class="br-table" cellspacing="0">
                <tr>
                    <th width="160px">参数名</th>
                    <th>含义</th>
                    <th>取值范围</th>
                </tr>
                <tr>
                    <td>key</td>
                    <td>选项唯一标识,同一侧列表中的key值不能重复</td>
                    <td>不能包含特殊字符,建议为字母数字或者下划线</td>
                </tr>
                <tr>
                    <td>name</td>
                    <td>选项显示的名称</td>
                    <td>可为任意值</td>
                </tr>
                <tr>
                    <td>icon</td>
                    <td>选项图标</td>
                    <td>图标的class名称,例如fa fa-plus</td>
                </tr>
                <tr>
                    <td>removable</td>
                    <td>是否可以移除选项,选项会显示删除按钮,优先级高于全局的removAble属性</td>
                    <td>true或者false,默认为true</td>
                </tr>
                <tr>
                    <td>disable</td>
                    <td>选项是否可选,当选项中包含disable属性且值为true时,该选项不可选中,且与这个选项相连的选项无法被取消</td>
                    <td>true或者false,默认为false</td>
                </tr>
            </table>
        </div>
        <h3 class="p20">API</h3>
        <div class="p20">
            <table class="br-table" cellspacing="0">
                <tr>
                    <th width="160px">方法名称</th>
                    <th>方法说明</th>
                    <th>参数</th>
                    <th>返回值</th>
                </tr>
                <tr>
                    <td>getData()</td>
                    <td>获得当前连线关系数据</td>
                    <td>(空)</td>
                    <td>return {左列表key1:右列表key1,左列表key2:右列表key2,...}</td>
                </tr>
                <tr>
                    <td>setData(map)</td>
                    <td>修改连线关系</td>
                    <td>映射关系:<br>map={左列表key1:右列表key1,左列表key2:右列表key2.........完整代码请登录后点击上方下载按钮下载查看

网友评论0