JS:原始JS实现复制,移动,缩放

效果如下

在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">

        * {
            margin: 0;
            padding: 0
        }


        /*四边*/
        .box .t,
        .box .b,
        .box .l,
        .box .r {
            position: absolute;
            z-index: 1;
            background:#666;
        }

        .box .l,
        .box .r {
            width: 10px;
            height: 100%;
            cursor: col-resize;
        }

        .box .t,
        .box .b {
            width: 100%;
            height: 10px;
            cursor: row-resize;
        }

        .box .t {
            top: 0;
        }

        .box .b {
            bottom: 0;
        }

        .box .l {
            left: 0;
        }

        .box .r {
            right: 0;
        }

        /*四角*/
        .box .tl,
        .box .bl,
        .box .br,
        .box .tr {
            width: 20px;
            height: 20px;
            position: absolute;
            background: #CCC;
            z-index: 2;
            cursor: nwse-resize
        }

        .box .tl,
        .box .bl {
            left: -5px;
        }

        .box .tr,
        .box .br {
            right: -5px;
        }

        .box .br,
        .box .bl {
            bottom: -5px;
        }

        .box .tl,
        .box .tr {
            top: -5px;
        }

        .box .tr,
        .box .bl {
            cursor: nesw-resize;
        }

        /*图片*/
        img {
            width: 100%;
            height: 100%;
        }


        .box {
            background:orange;
            width: 60px;
            height: 60px;
            position: absolute;

            cursor: move;
            top: 100px;
            left: 100px;
        }


        .Sample {
            background: #f00;
            width: 60px;
            height: 60px;
            position: absolute;
            opacity: 0.5;
            cursor: move;
        }
    </style>
    <script>
        var allowmove = false;
        var allowcopy = false;
        var allowdrag = false;
        var diffX, diffY;

        var fordargcancel;
        function dragFn(obj,box) {
            obj.onmousedown = function (ev) {
          
                var oEv = ev || event;
                var oldX = oEv.clientX;
                var oldY = oEv.clientY;
                var oldWidth = box.offsetWidth;
                var oldHeight = box.offsetHeight;

                var oldLeft = box.offsetLeft;
                var oldTop = box.offsetTop;

                document.onmousemove = function (ev) {
            
                    var oEv = ev || event;

                    if (obj.className == 'tl') {
                        box.style.width = oldWidth - (oEv.clientX - oldX) + 'px';
                        box.style.height=oldHeight-(oEv.clientY-oldY)+'px';
                        box.style.left = oldLeft + (oEv.clientX - oldX) + 'px';
                        box.style.top = oldTop + (oEv.clientY - oldY) + 'px';
                    }
                    else if (obj.className == 'bl') {
                        box.style.width = oldWidth - (oEv.clientX - oldX) + 'px';
                        box.style.height=oldHeight+(oEv.clientY-oldY)+'px';
                        box.style.left = oldLeft + (oEv.clientX - oldX) + 'px';
                        box.style.bottom = oldTop + (oEv.clientY + oldY) + 'px';
                    }
                    else if (obj.className == 'tr') {
                        box.style.width = oldWidth + (oEv.clientX - oldX) + 'px';
                        box.style.height = oldHeight - (oEv.clientY - oldY)+'px';
                        box.style.right = oldLeft - (oEv.clientX - oldX) + 'px';
                        box.style.top = oldTop + (oEv.clientY - oldY) + 'px';
                    }
                    else if (obj.className == 'br') {
                        box.style.width = oldWidth + (oEv.clientX - oldX) + 'px';
                        box.style.height = oldHeight + (oEv.clientY - oldY)+'px';
                        box.style.right = oldLeft - (oEv.clientX - oldX) + 'px';
                        box.style.bottom = oldTop + (oEv.clientY + oldY) + 'px';
                    }
                    else if (obj.className == 't') {
                        box.style.height=oldHeight-(oEv.clientY-oldY)+'px';
                        box.style.top = oldTop + (oEv.clientY - oldY) + 'px';
                    }
                    else if (obj.className == 'b') {
                        box.style.height = oldHeight + (oEv.clientY - oldY)+'px';
                        box.style.bottom = oldTop - (oEv.clientY + oldY) + 'px';
                    }
                    else if (obj.className == 'l') {
                        oDiv.style.height = oldHeight + 'px';
                        oDiv.style.width = oldWidth - (oEv.clientX - oldX) + 'px';
                        oDiv.style.left = oldLeft + (oEv.clientX - oldX) + 'px';
                    }
                    else if (obj.className == 'r') {
                        box.style.height = oldHeight + 'px';
                        box.style.width = oldWidth + (oEv.clientX - oldX) + 'px';
                        box.style.right = oldLeft - (oEv.clientX - oldX) + 'px';
                    }
                };

                document.onmouseup = function () {
                    document.onmousemove = DOMmove;
                    document.onmouseup=DOMup;
                };
                return false;
            };
        }
        window.onload=function(e) {

            document.addEventListener("mousemove",DOMmove);
            document.addEventListener("mouseup",DOMup);
            document.addEventListener("mousedown",DOMdown);

        }

        function DOMup(e) {
            // 禁止拖动


            if (allowcopy) {




                e.target.removeAttribute("id");


                allowmove = false;
                allowdrag = false;
                allowcopy = false;
           
            }
            if (allowmove) {
                e.target.removeAttribute("id");
			
                allowmove = false;
                allowcopy = false;
                allowdrag = false;
               
            }
            if(allowdrag)
            {

      
         
                allowmove = false;
                allowcopy = false;
                allowdrag = false;
            }

        }
        function DOMmove(e) {




            // 移动,更新 box 坐标
            if (allowmove) {
                var mb = document.getElementById("moving_box");
                mb.style.top = e.pageY - diffY + 'px';
                mb.style.left = e.pageX - diffX + 'px';

            }

            if (allowcopy) {
                var cb = document.getElementById("copy_box");
                cb.style.top = e.pageY - diffY + 'px';
                cb.style.left = e.pageX - diffX + 'px';

            }

        }
        function DOMdown(e) {
         
            if (e.target.tagName.match(/SPAN/)) {
                fordargcancel=e.target.parentNode;
              
                allowdrag=true;
            }
            if (e.target.className.match(/box/)) {
              
console.log(e.target);
                allowmove = true;

                e.target.id = "moving_box";


                // 计算坐标差值
                diffX = e.pageX - e.target.offsetLeft;
                diffY = e.pageY - e.target.offsetTop;
            }
            if (e.target.className.match(/Sample/)) {

                allowcopy = true;
                //复制一份再移动
                var box=document.getElementsByClassName("box")[0].cloneNode();
                var r=document.getElementsByClassName("r")[0].cloneNode();
                var l=document.getElementsByClassName("l")[0].cloneNode();
                var t=document.getElementsByClassName("t")[0].cloneNode();
                var b=document.getElementsByClassName("b")[0].cloneNode();
                var br=document.getElementsByClassName("br")[0].cloneNode();
                var bl=document.getElementsByClassName("bl")[0].cloneNode();
                var tr=document.getElementsByClassName("tr")[0].cloneNode();
                var tl=document.getElementsByClassName("tl")[0].cloneNode();
                box.appendChild(r);box.appendChild(l);box.appendChild(t);box.appendChild(b);
                box.appendChild(br);box.appendChild(bl);box.appendChild(tr);box.appendChild(tl);
                box.id="copy_box";
                box.style.display="block";
                document.body.appendChild(box);
				 var aSpan =box.getElementsByTagName('span');
                for (var i = 0; i < aSpan.length; i++)
                    dragFn(aSpan[i],box);
                // 计算坐标差值
                diffX = e.pageX - e.target.offsetLeft;
                diffY = e.pageY - e.target.offsetTop;
            }
        }

    </script>
</head>
<body>

<BR>
<div class="Sample" >

</div>
<BR>	<BR>	<BR>	<BR>	<BR>

<hr style="height:1px;border:none;border-top:1px dashed #0066CC;" />   
<br>
<div class="box" style="display:none">
    <span class="r"></span>
    <span class="l"></span>
    <span class="t"></span>
    <span class="b"></span>
    <span class="br"></span>
    <span class="bl"></span>
    <span class="tr"></span>
    <span class="tl"></span>
</div>
<br><br><br><br>
</body>
</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yilyil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值