drag-widget

Drag and drop assistant widget based on dragee

Usage no npm install needed!

<script type="module">
  import dragWidget from 'https://cdn.skypack.dev/drag-widget';
</script>

README

drag-widget

项目介绍

drag-widget 为衍生后的drag,含盖了 网格,卡尺,拖拽寻找标尺线进行吸附,改变宽高进行寻找标尺线吸附,从而提高了拖拽元素对齐的准确性。

源码启动

初始化

npm install

本地服务

npm run start

npm 安装

npm i drag-widget

以及简单的使用

html

<div class="Wrap"  id="Wrap">
         <div class="calipersWrap" >
            <canvas id="calipers" class="calipers" width="2000px" height="2000px"></canvas>
         </div>
         <div class="editorWrap" id="editorWrap">
            <div class="cavasWrap">
                <canvas id="canvas" class="cavas" width="1000px" height="1000px"></canvas>
                <div class="bgWrap"></div>
             </div>
             <div class="componentsWrap" id="componentsWrap">
                 <div class="">
                    <div class="item" data-id="1" z-index='1' style="z-index:1">
                        <span>1111</span>
                        <span>1111</span>
                        <span>1111</span>
                        <span>1111</span>
                        <span>1111</span>
                    </div>
                    <div class="item" data-id="2" z-index='2'  style="top:200px;left:300px;z-index:2"></div>
                    <div class="item" data-id="3" z-index='3'  style="top:100px;left:300px;z-index:3"></div>
                    <div class="item" data-id="4" z-index='4'  style="top:230px;left:500px;z-index:4"></div>
                    <div class="item" data-id="5" z-index='5'  style="top:277px;left:300px;z-index:5"></div>
                    <div class="item" data-id="6" z-index='6'  style="top:150px;left:200px;z-index:6"></div>
                    <div class="item" data-id="7" z-index='7'  style="top:600px;left:300px;z-index:7"></div>
                 </div>
             </div>
         </div>
     </div>

CSS

    .Wrap,body,html{
        width:100%;
        height: 100%;

    }
    *{
        padding:0;
        margin:0;
    }
    .wrap{
        position: relative;
    }
    .calipersWrap{
        position: absolute;
        left: 0;
        top:0;
        z-index: 0;
        width:100%;
        height: 100%;
    }
    .calipers{
        background:#ccc;
        
    }
    .editorWrap{
        width:1000px;
        height: 500px;
        margin:20px  auto 0 auto;
    }
    .cavasWrap{
    position: absolute;
        z-index: 1;
    }
    .cavas{
        position: absolute;
    }
    .componentsWrap{
        width:1000px;
        height: auto;
        position: absolute;
        z-index: 2;
    }
    .componentsWrap .item{
        width:150px;
        height: 150px;
        background:yellow;
        position: absolute;
        left: 0;
        top:0;
    }
    
    .resizeWrap >span{
        position: absolute;

    }
    .resizeWrap >span.l{
        width:3px;
        background:red;
        top:0;
        left:0;
        z-index: 9;
        cursor:w-resize;
    }
    .resizeWrap >span.r{
        width:3px;
        background:red;
        top:0;
        right:0;
        z-index: 9;
        cursor:w-resize;
    }
    .resizeWrap >span.t{
        height:3px;
        background:red;
        top:0;
        right:0;
        z-index: 9;
        cursor:s-resize;
    }
    .resizeWrap >span.b{
        height:3px;
        background:red;
        bottom:0;
        right:0;
        z-index: 9;
        cursor:s-resize;
    }
    .resizeWrap >span.lt,.resizeWrap >span.lb,.resizeWrap >span.rt,.resizeWrap >span.rb{
        width:10px;
        height: 10px;
        position: absolute;
        border:1px solid red;
        z-index: 10;
    }
    .resizeWrap >span.lt{
        top:-5px;
        left:-5px;
        cursor:se-resize;
    }
    .resizeWrap >span.lb{
        bottom:-5px;
        left:-5px;
        cursor:ne-resize;
    }
    .resizeWrap >span.rt{
        top:-5px;
        right:-5px;
        cursor:ne-resize;
    }
    .resizeWrap >span.rb{
        bottom:-5px;
        right:-5px;
        cursor:se-resize;
    }
    .tipsWrap{
        position: absolute;
        bottom:-55px;
        right:-115px;
        background:rgba(0, 0,0, 0.5);
        width:100px;
        
        border-radius: 5px;
        color:#fff;
    }
    .tipsWrap > p{
        height: 25px;
        line-height: 25px;
        padding-left: 10px;
        box-sizing: border-box;
        font-size: 12px;
    }

JS

import {DragWidget} from 'drag-widget'
 new DragWidget({
    target:document.getElementById('Wrap'),
    editorWrap:document.getElementById('editorWrap'),
    componentsWrap:document.getElementById('componentsWrap'),
    eventItem:'.item',
    cavasEl:document.getElementById('canvas'),
    cavasWidth:1000,
    cavasHeigth:1000,
    spacing:20,//线间距
    adsorptionNum:10,//组件之间吸附的间距
    linecolor:'#0088ff',
    resize:function(obj){
        console.log("resize",obj);
    },
    drag:function(obj){
        console.log(obj);
    },
    calipers:{
        cavasEl:document.getElementById('calipers'),
    }
})