• 可拖拽的弹框


    pc端:

    <!DOCTYPE html>        
    <html lang="en">        
    <head>        
        <meta charset="UTF-8">        
        <title>可拖动的弹窗</title>      
        <style type="text/css">  
        a{text-decoration: none; color: #eee; display: block;}
        .button{width: 200px; height: 50px; border-radius: 20px; text-align:center;line-height: 50px;}
        .callout_button{background:#FF5B5B;margin:0 auto; }
        .callout_button:hover{background: red;}
        .close_button{background:#363636;margin:0 auto;}
        .close_button:hover{background: black;}
        .mask{width: 100%;height: 100%;background:#000;position: absolute;top: 0px;left:0px;opacity: 0.4;z-index: 8000; display: none;-moz-user-select: none; -webkit-user-select: none;}
        .dialog{width: 380px;background:#fff; position: absolute;z-index: 9000;padding-bottom: 10px; display: none;-moz-user-select: none; -webkit-user-select: none;}
        .dialog_head{width: 100%;height:50px;background:#4B4B4B;text-align: center;line-height: 50px;color: #eee; cursor: move;}
        .dialog_content{width: 100%;height:300px;}    
        </style>       
    </head>        
    <body>  
      <div id="callout" class="button callout_button"><a href="#">弹出对话框</a></div>
      <div id="mask" class="mask"></div>
      <div class="dialog" id="dialog">
          <div class="dialog_head" id="move_part">可拖拽部分</div>
          <div class="dialog_content"></div>
          <div class="button close_button" id="close"><a href="#">点我关闭对话框</a>
          </div>
      </div>
     
      <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
      <script type="text/javascript"> 
      $(document).ready(function(){
        var $dialog = $("#dialog");
        var $mask = $("#mask");
        
        //自动居中对话框
        function autoCenter(el){
            var bodyW = $(window).width();
            var bodyH = $(window).height();
            var elW = el.width();
            var elH = el.height();
            $dialog.css({"left":(bodyW-elW)/2 + 'px',"top":(bodyH-elH)/2 + 'px'});        
        };
        
        //点击弹出对话框
        $("#callout").click(function(){
            $dialog.css("display","block"); 
            $mask.css("display","block");
            autoCenter($dialog); 
        });            
        
        //禁止选中对话框内容
        if(document.attachEvent) {//ie的事件监听,拖拽div时禁止选中内容,firefox与chrome已在css中设置过-moz-user-select: none; -webkit-user-select: none;
            g('dialog').attachEvent('onselectstart', function() {
              return false;
            });
        }
        //声明需要用到的变量
        var mx = 0,my = 0;      //鼠标x、y轴坐标(相对于left,top)
        var dx = 0,dy = 0;      //对话框坐标(同上)
        var isDraging = false;      //不可拖动
     
        //鼠标按下
        $("#move_part").mousedown(function(e){
            e = e || window.event;
            mx = e.pageX;     //点击时鼠标X坐标
            my = e.pageY;     //点击时鼠标Y坐标
            dx = $dialog.offset().left;
            dy = $dialog.offset().top;
            isDraging = true;      //标记对话框可拖动                
        });
     
        //鼠标移动更新窗口位置
        $(document).mousemove(function(e){
            var e = e || window.event;
            var x = e.pageX;      //移动时鼠标X坐标
            var y = e.pageY;      //移动时鼠标Y坐标
            if(isDraging){        //判断对话框能否拖动
                var moveX = dx + x - mx;      //移动后对话框新的left值
                var moveY = dy + y - my;      //移动后对话框新的top值
                //设置拖动范围
                var pageW = $(window).width();
                var pageH = $(window).height();
                var dialogW = $dialog.width();
                var dialogH = $dialog.height();
                var maxX = pageW - dialogW;       //X轴可拖动最大值
                var maxY = pageH - dialogH;       //Y轴可拖动最大值
                moveX = Math.min(Math.max(0,moveX),maxX);     //X轴可拖动范围
                moveY = Math.min(Math.max(0,moveY),maxY);     //Y轴可拖动范围
                //重新设置对话框的left、top
                $dialog.css({"left":moveX + 'px',"top":moveY + 'px'});
            };
        });
     
        //鼠标离开
        $("#move_part").mouseup(function(){
            isDraging = false;
        });
     
        //点击关闭对话框
        $("#close").click(function(){
            $dialog.css("display","none");
            $mask.css("display","none");
        });
     
        //窗口大小改变时,对话框始终居中
        window.onresize = function(){
            autoCenter($dialog);
        };
      });
      </script>  
    </body>        
    </html>   

    移动端:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
        <title>div块跟随手指拖动</title>
    </head>
    <body>
        <div id="id"></div>
        <style type="text/css">
            div{
                width: 200px;
                height: 200px;
                background: #ccc;
                position: absolute;
                left: 0px;
                top: 100px;
            }
        </style>
        <script type="text/javascript">
            var _x_start,_y_start,_x_move,_y_move,_x_end,_y_end,left_start,top_start;
            document.getElementById("id").addEventListener("touchstart",function(e)
            {
     
                _x_start=e.touches[0].pageX;
                _y_start=e.touches[0].pageY;
                // console.log("start",_x_start)
                left_start=$("#id").css("left");
                top_start=$("#id").css("top");
     
            })
            document.getElementById("id").addEventListener("touchmove",function(e)
            {
                _x_move=e.touches[0].pageX;
                _y_move=e.touches[0].pageY;
                // console.log("move",_x_move)
                $("#id").css("left",parseFloat(_x_move)-parseFloat(_x_start)+parseFloat(left_start)+"px");
                $("#id").css("top",parseFloat(_y_move)-parseFloat(_y_start)+parseFloat(top_start)+"px");
                console.log(parseFloat(_y_move)-parseFloat(_y_start)+parseFloat(top_start));
            })
            document.getElementById("id").addEventListener("touchend",function(e)
            {
                var _x_end=e.changedTouches[0].pageX;
                var _y_end=e.changedTouches[0].pageY;
                // console.log("end",_x_end)
            })
            //阻止浏览器下拉事件
            $('body').on('touchmove', function (event) {event.preventDefault();});
            // or
            // document.addEventListener('touchmove', function(e){e.preventDefault()}, false);
     
        </script>
    </body>
    </html>
  • 相关阅读:
    [jenkins] 启动错误 Failed to start LSB: Jenkins Automation Server.
    SpringBoot AOP注解式拦截与方法规则拦截
    JS !function 稀奇古怪的写法
    业务场景后端优化
    对称加密和非对称加密
    第三篇 -- 余生,我累了,也懂了
    第二篇 -- 关东野客书籍
    第十一篇 -- 关于防火墙的一些问题
    第三十一篇 -- 学习第六十八天打卡20190911
    第二十九篇 -- UDP和TCP
  • 原文地址:https://www.cnblogs.com/xiaoqi2018/p/10643855.html
Copyright © 2020-2023  润新知