<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script type="text/javascript" src="./jquery.js"></script><style>    *{        margin: 0;        padding: 0;        box-sizing: border-box;    }    #box{        width: 1280px;        height: 720px;        position: absolute;        top: 50%;        left: 50%;        margin-top: -360px;        margin-left: -640px;        box-shadow: 0 0 10px rgba(0,0,0,.5);    }    #boxInner{        width: 100%;        height: 100%;        position: relative;    }    #divBox{        width: 200px;        height: 200px;        position: absolute;        top: 64px;        left: 128px;        background-color: olivedrab;    }    .inner{        width: 100%;        height: 100%;        position: relative;    }    .bot{        width: 14px;        height: 14px;        background-color: red;        position: absolute;    }    .bot1{        left: -14px;        top: -14px;    }    .bot2{        left: 50%;        margin-left: -7px;        top: -14px;    }    .bot3{        top: -14px;        right: -14px;    }    .bot4{        top: 50%;        margin-top: -7px;        left: -14px;    }    .bot5{        top: 50%;        margin-top: -7px;        right: -14px;    }    .bot6{        left: -14px;        bottom: -14px;    }    .bot7{        left: 50%;        margin-left: -7px;        bottom: -14px;    }    .bot8{        right: -14px;        bottom: -14px;    }    .rotate{        width: 14px;        height: 14px;        background-color: black;        position: absolute;        top: 50%;        margin-top: -7px;        right: -30px;    }</style>

</head>
<body>

<div id="box">     <div id="boxInner">        <div id="divBox">            <div class="inner">                <div id="tl" class="bot bot1"></div>                <div id="tm" class="bot bot2"></div>                <div id="tr" class="bot bot3"></div>                <div id="ml" class="bot bot4"></div>                <div id="mr" class="bot bot5"></div>                <div id="bl" class="bot bot6"></div>                <div id="bm" class="bot bot7"></div>                <div id="br" class="bot bot8"></div>                <div class="rotate"></div>            </div>        </div>    </div></div><script>$(function(){    $('#divBox').on('mousedown',function(e){        e.stopPropagation();        e.preventDefault()        $(this).css('cursor','move');        let isMove = true;        let x = e.clientX;        let y = e.clientY;        let l = parseInt($(this).css('left'));        let t = parseInt($(this).css('top'));        let moveEvent = null;        $('#box').on('mousemove',function(ev){            moveEvent = ev;            if(!isMove){                return            }            ev.stopPropagation()            ev.preventDefault();            let nx = ev.clientX;            let ny = ev.clientY;            let nl = nx-(x-l);            let nt = ny-(y-t);            $('#divBox').css({                top: nt+'px',                left: nl+'px'            })        })        $('#box').on('mouseup',function(event){            event.preventDefault();            isMove = false;            $('#divBox').css('cursor','auto');            $(this).off(event)            $(this).off(moveEvent)            return false;        })    })    $('.bot').on('mousedown',function(e){        e.stopPropagation()        e.preventDefault();        let isScale = true;        let rect = document.getElementById('divBox').getBoundingClientRect();        let oldWidth = $('#divBox').width();        let oldHeight = $('#divBox').height();        let oldX = e.clientX;        let oldY = e.clientY;        let oldLeft = parseInt($('#divBox').css('left'));        let oldTop = parseInt($('#divBox').css('top'));        let centerX = rect.left+rect.width/2;        let centerY =  rect.top + rect.height / 2;        let moveEvent = null;        let w,h,t,l;        let ceterIns = GetDistance(centerX,centerY,oldX,oldY);        let angle = parseFloat($('#divBox')[0].dataset.angle) || 0;        let jd = (angle*180/Math.PI)<0?360+(angle*180/Math.PI):(angle*180/Math.PI);        let hd = jd*Math.PI/180;        let _id = $(this).attr('id');        $('#box').on('mousemove',function(ev){            moveEvent = ev;            if(!isScale){                return            }            let newIns =  GetDistance(centerX,centerY,ev.clientX,ev.clientY);            let ins = GetDistance(oldX,oldY,ev.clientX,ev.clientY)            let isScaleBig = (newIns-ceterIns>=0)?true:false;//判断放大还是放大            let dx = isScaleBig?ins:-ins;            switch (_id){                case 'tl':                    var radioHd = 45*Math.PI/180;                    var dxx = dx*Math.sin(radioHd);                    var dl = dxx/2*(Math.sin(hd)-Math.cos(hd)-1);                    var dh = dxx/2*(Math.cos(hd)+Math.sin(hd)+1);                    w = oldWidth+dxx;                    h = oldHeight+dxx;                    l = oldLeft+dl;                    t = oldTop-dh;                    break;                case 'tm':                    var dh = dx-((dx/2)-(dx/2)*Math.cos(hd));                    var dl = ((dx/2)*Math.sin(hd));                    w = oldWidth;                    h = oldHeight+dx;                    l = oldLeft+dl;                    t = oldTop-dh                    break;                case 'tr':                    var radioHd = 45*Math.PI/180;                    var dxx = dx*Math.sin(radioHd);                    var dh = dxx/2*(Math.cos(hd)-Math.sin(hd)+1);                    var dl = dxx/2*(Math.sin(hd)+Math.cos(hd)-1);                    w = oldWidth+dxx;                    h = oldHeight+dxx;                    l = oldLeft+dl;                    t = oldTop-dh;                    break;                case 'ml':                    var dh = (dx/2)*Math.sin(hd);                    var dl = dx-(dx/2-(dx/2)*Math.cos(hd));                    w = oldWidth+ dx;                    h = oldHeight;                    l = oldLeft-dl;                    t = oldTop- dh;                    break;                case 'mr':                    var dh = (dx/2)*Math.sin(hd);                    var dl = (dx/2)-((dx/2)*Math.cos(hd));                    w = oldWidth+ dx;                    h = oldHeight;                    l = oldLeft-dl;                    t = oldTop+ dh;                    break;                case 'bl':                    var radioHd = 45*Math.PI/180;                    var dxx = dx*Math.sin(radioHd);                    var dl = dxx/2*(Math.sin(hd)+Math.cos(hd)+1);                    var dh = dxx/2*(Math.sin(hd)-Math.cos(hd)+1);                    w = oldWidth+dxx;                    h = oldHeight+dxx;                    l = oldLeft-dl;                    t = oldTop-dh;                    break;                case 'bm':                    var dh = (dx/2)-(dx/2)*Math.cos(hd);                    var dl = ((dx/2)*Math.sin(hd));                    w = oldWidth;                    h = oldHeight+dx;                    l = oldLeft-dl;                    t = oldTop- dh;                    break;                case 'br':                    var radioHd = 45*Math.PI/180;                    var dxx = dx*Math.sin(radioHd);                    var dl = dxx/2*(Math.sin(hd)-Math.cos(hd)+1);                    var dh = dxx/2*(Math.sin(hd)+Math.cos(hd)-1);                    w = oldWidth+dxx;                    h = oldHeight+dxx;                    l = oldLeft-dl;                    t = oldTop+dh;                    break;                default:break;            }                       $('#divBox').css({                top: t+'px',                left: l+'px',                width: w+'px',                height: h+'px'            })                  })        $('#box').on('mouseup',function(event){            event.preventDefault();            isScale = false;            $(this).off(event);            $(this).off(moveEvent);            return false;        })    })    $('.rotate').on('mousedown',function(e){        e.stopPropagation()        e.preventDefault();        let rect = document.getElementById('divBox').getBoundingClientRect();        let centerX = rect.left+rect.width/2;        let centerY =  rect.top + rect.height / 2;        let isMove = true;        $('#divBox')[0].dataset.centerX = centerX;        $('#divBox')[0].dataset.centerY = centerY;        $('#divBox')[0].dataset.angle = getDragAngle(e);        $('#box').on('mousemove',function(ev){            moveEvent = ev;            if(!isMove){                return            }            let angle = getDragAngle(ev);            // let jd = angle*180/Math.PI;            // console.log(jd)            $('#divBox').css({                transform: `rotate(${angle}rad)`            })        })        $('#box').on('mouseup',function(event){            event.preventDefault();            isMove = false;            $('#divBox')[0].dataset.angle = getDragAngle(event);            $(this).off(event)            $(this).off(moveEvent)            return false;        })    })    function GetDistance( lat1,  lng1,  lat2,  lng2){        dx = Math.abs(lat1 - lat2);        dy = Math.abs(lng1 - lng2);        var dis = Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));        return parseInt(dis);    }    function getDragAngle(event){        var startAngle = parseFloat($('#divBox')[0].dataset.angle) || 0;        var center = {            x: parseFloat($('#divBox')[0].dataset.centerX) || 0,            y: parseFloat($('#divBox')[0].dataset.centerY) || 0,        };        var angle = Math.atan2(center.y - event.clientY, center.x - event.clientX);        return angle - startAngle;    }})</script>

</body>
</html>