美文网首页
js 元素移动,旋转和缩放

js 元素移动,旋转和缩放

作者: 没_有_人 | 来源:发表于2018-08-27 13:59 被阅读0次
    效果图
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
        <title>元素的移动、旋转、缩放</title>
        <style>
            #box{width: 100%;height: 100%;position: fixed;top:0;left: 0;}
            .btn{height: 30px;border:1px solid #ccc;position: fixed;bottom: 0;left: 50%;transform: translateX(-50%);padding:10px;}
            .img { background-size: 100% 100%; display: inline-block; position: absolute; top:20px; right:0;border: 1px dotted transparent;}
            .img.active{border: 1px dotted #4dbcf0; box-shadow: 0px 0px 5px #fff ; }
            .img span{ display: inline-block; width: 30px; height: 30px;position: absolute;  }
            .img span.r_b{ display: none; right: -15px; bottom:-15px; cursor: se-resize; background-image: url("https://api.1dospace.com/html/img/move_ele_rotate.png");background-size: 50% 50%; background-repeat: no-repeat; background-position: center center;border-radius: 50%; background-color: #87c9f9;}
            .img span.close{ display: none; left: -15px; top: -15px; cursor:pointer; background-image: url("https://api.1dospace.com/html/img/move_ele_exit.png");background-size: 50% 50%; background-repeat: no-repeat; background-position: center center; border-radius: 50%; background-color: #e86b59;}
            .img.active span.close{ display: inline-block; }
            .img.active span.r_b{ display: inline-block; }
            .img span.c{ width: 1px; height: 1px; left: 50%; top: 50%; transform: translate(-50%,-50%); }
            .img .domImg{width: 100%;height: 100%;position: absolute;top: 0;left: 0;}
        </style>
    </head>
    <body>
        <div id="box"></div>
        <div class="btn">点击我创建元素</div>
    </body>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script>
        var arr = ["1.jpg","2.jpg","3.jpg","4.jpg"];
        $(".btn").click(function(){
            var randomNum = Math.floor(Math.random() * arr.length);
            initMyDragDom(arr[randomNum],"#box");
        })
        function initMyDragDom(url,pdom){
            var img = new Image();
            img.onload = function(){ 
                var dom = document.createElement('div');
                $(dom).addClass('img');
                $(dom).css({width:(img.width)/3,height:(img.height)/3});
                var domImg = document.createElement('img');
                $(domImg).addClass('domImg');
                $(domImg).attr("src",url);
                $(dom).append(domImg);
                var spanResize = document.createElement('span');
                $(spanResize).addClass('r_b');
                $(dom).append(spanResize);
                var spanCenter = document.createElement('span');
                $(spanCenter).addClass('c');
                $(dom).append(spanCenter);
                var spanCenter = document.createElement('span');
                $(spanCenter).addClass('close');
                $(dom).append(spanCenter);
                $(pdom).append(dom);
                // $.each(conf, function(i,d) {
                //  $(dom).css(i,d);
                // });
                $('.img.active').removeClass('active');
                $(dom).addClass('active');
                setzIndex(dom);
                initMyDragEvent(dom);
            };
            img.src = url;
        }
    
    function setzIndex(pdom){
        var z_index = window.t_zindex?window.t_zindex+1:1000;
        window.t_zindex = z_index;
        $(pdom).css('z-index',z_index);
    }
    
    function initMyDragEvent(dom){
        var epoint={x:0,y:0};
            var Style = {x:0,y:0,s:1,a:0};
            var Style0 = {x:0,y:0,s:1,a:0};
            var isDown = 0;
            var isResize = 0;
            var spanResize = $(dom).find('.r_b')[0];
            var spanCenter = $(dom).find('.c')[0];
            var spanClose = $(dom).find('.close')[0];
            var isMove = 0; 
            $(dom).on('touchstart',function(ev){
                setzIndex(dom);
                if(isResize) return false;
                isDown = 1;
                epoint = getPosition(ev);
                if($(dom).attr('dat') && $(dom).attr('dat').length>0){
                    Style = JSON.parse($(dom).attr('dat'));
                    Style0 = JSON.parse($(dom).attr('dat'));
                }
                $('body').on('touchmove',function(ev){
                    if(isDown && !isResize){
                        var tpoint = getPosition(ev);
                        Style.x = Style0.x+(tpoint.x-epoint.x);
                        Style.y = Style0.y+(tpoint.y-epoint.y);
                        setDomStyle();
                        isMove=1;
                    } 
                });
                $('body').on('touchend',function(ev){
                    isResize?isDown = 0:{}; 
                    if(isMove){
                        $(dom).removeClass('active') 
                    }else{
                        if($(dom).hasClass('active')){
                            $(dom).removeClass('active')
                        }else{
                            $('.img.active').removeClass('active');
                            $(dom).addClass('active') ;
                        }
                    }  
                    isMove=0; 
                    $('body').unbind('touchmove touchend');
                });
            }); 
            $(spanResize).on('touchstart',function(ev){
                setzIndex(dom);
                isResize = 1; 
                isDown = 0;
                if($(dom).attr('dat') && $(dom).attr('dat').length>0){ 
                    Style = JSON.parse($(dom).attr('dat'));
                    Style0 = JSON.parse($(dom).attr('dat'));
                }
                epoint = getPosition(ev);
                var cPoint = {x:$(spanCenter).offset().left,y:$(spanCenter).offset().top};
                var d0 = {x:epoint.x-cPoint.x,y:epoint.y-cPoint.y}; 
                $('body').on('touchmove',function(ev){
                    console.log("OK"+isDown+"--"+isResize);
                    if(!isDown && isResize){
                        var tepoint = getPosition(ev);
                        var d1 = {x:tepoint.x-cPoint.x,y:tepoint.y-cPoint.y} 
                        var jd = (Math.atan(Math.abs(tepoint.y-cPoint.y)/Math.abs(tepoint.x-cPoint.x))-Math.atan(Math.abs(epoint.y-cPoint.y)/Math.abs(epoint.x-cPoint.x)));
                        Style.s = Style0.s * (Math.sqrt(Math.pow(d1.x,2)+Math.pow(d1.y,2))/Math.sqrt(Math.pow(d0.x,2)+Math.pow(d0.y,2)));
                        Style.s = Math.min(Math.max(Style.s,0.5),2);
                        Style.a = Style0.a + jd*Math.PI *20 ;
                        setDomStyle();
                    }
                });
                $('body').on('touchend',function(ev){
                    isResize = 0;
                    $('body').unbind('touchmove touchend');
                });
            });
            $(spanClose).on('touchstart',function(){ 
                $(this).parents('.img').remove();
            });
            function getPosition(ev){
                var tev = ev;
                var tev = ev.originalEvent.touches[0];
                return {x:tev.clientX,y:tev.clientY};
            }
            function setDomStyle() {
                var value = [ 'translate(' + Style.x + 'px, ' + Style.y  +'px)', 'scale(' + Style.s + ', ' + Style.s + ')', 'rotate(' +  Style.a + 'deg)' ];
                value = value.join(" ");   
                $(dom).attr('dat',JSON.stringify(Style)).css('-webkit-transform',value).css('-moz-transform',value).css('transform',value);
            } 
    }
    </script>
    </html>
    

    相关文章

      网友评论

          本文标题:js 元素移动,旋转和缩放

          本文链接:https://www.haomeiwen.com/subject/epgbpftx.html