复制代码,可间接运行查看成果,关键处已正文阐明,心愿对你有所帮忙。

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>可拖动弹窗</title>    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">    <style>        body {background: #f5f5f5; font-size: 14px; color: #333; }        .dialog_btn_wrap {padding: 100px; text-align: center; }        #mask {position: fixed; width: 100%; height: 100%; top: 0; left: 0; z-index: 1; background: rgba(0,0,0,.4); display: none;            -moz-user-select: none; -webkit-user-select: none;}        #dialog {position: absolute; width: 250px; height: 200px; top: 0; left: 0; border-radius: 10px; z-index: 2; background: #fff; display: none;            -moz-user-select: none; -webkit-user-select: none;}        .dialog_head {text-align: center; line-height: 50px; background-color: #ddd; cursor: move; }        .dialog-body {height: 100px; }        .dialog-foot {height: 50px; text-align: center; line-height: 50px; background-color: #ddd; }    </style></head><body><div class="dialog_btn_wrap">    <a class="btn btn-lg btn-primary" id="dialog_btn">弹窗</a></div><!--蒙层--><div id="mask"></div><!--弹窗--><div id="dialog">    <div class="dialog_head" id="move_part">可拖拽区域</div>    <div class="dialog-body"></div>    <div class="dialog-foot">        <a class="btn btn-default" id="dialog_close">敞开</a>    </div></div><script>    //g()函数用于获取dom对象    function g(id) {        return document.getElementById(id);    }    //点击弹出弹窗    g('dialog_btn').onclick = function () {        g('mask').style.display = 'block';        g('dialog').style.display = 'block';        autoCenter(g('dialog'));    }    //点击敞开弹窗    g('dialog_close').onclick = function () {        g('mask').style.display = 'none';        g('dialog').style.display = 'none';    }        //弹窗主动居中    function autoCenter(el) {        //获取窗口宽高        var windowW = document.documentElement.clientWidth;        var windowH = document.documentElement.clientHeight;        //获取弹窗宽高        var elW = el.offsetWidth;        var elH = el.offsetHeight;        el.style.left = (windowW-elW)/2 + 'px';        el.style.top = (windowH-elH)/2 + 'px';    }    //禁止选中弹窗内容    //document.attachEvent IE浏览器监听事件,拖拽时禁止选中,firefox、chrome通过css -moz-user-select: none; -webkit-user-select: none;设置    if(document.attachEvent) {        g('dialog').attachEvent('onselectstart', function () {            return false;        })    }    //扭转窗口大小,弹窗主动居中    window.onresize = function () {        autoCenter(g('dialog'));    }    //拖拽实现原理    //1.鼠标点击时,设置弹窗可拖动,记录鼠标初试地位    //2.鼠标拖动时,依据鼠标新地位更新弹窗地位    //3.鼠标来到时,设置弹窗不可拖动    //4.限度弹窗拖拽范畴    var mx = 0; //鼠标x,y轴坐标(绝对于left top)    var my = 0;    var dx = 0; //弹窗x,y轴坐标    var dy = 0;    var isDraging = false; // 弹窗不可拖动    //鼠标点击    g('move_part').addEventListener('mousedown', function (e) {        var e = e || window.event; //兼容写法,window.event为IE浏览器独有对象        mx = e.pageX; //点击时鼠标X坐标        my = e.pageY; //点击时鼠标Y坐标        dx = g('dialog').offsetLeft; //弹窗距页面左侧间隔        dy = g('dialog').offsetTop; //弹窗距页面顶部间隔        isDraging = true; //标记弹窗可拖动    })    //鼠标拖动    //当鼠标在以后对象上挪动时就产生了onmousemove事件    document.onmousemove = function (e) {        var e = e || window.event;        var x = e.pageX; //挪动时鼠标X坐标        var y = e.pageY; //挪动时鼠标X坐标        if(isDraging) {            var moveX = x - mx + dx; //位移值+弹窗left值=挪动后弹窗left值            var moveY = y - my + dy; //挪动后弹窗top值            //限度弹窗拖拽范畴            //页面宽高            var pageW = document.documentElement.clientWidth;            var pageH = document.documentElement.clientHeight;            //弹窗宽高            var dialogW = g('dialog').offsetWidth;            var dialogH = g('dialog').offsetHeight;            var maxX = pageW - dialogW; //x轴可拖动最大值            var maxY = pageH - dialogH; //x轴可拖动最大值            //Math.min()  Math.max()妙用            moveX = Math.min(Math.max(0, moveX), maxX); //设定left范畴, 0-maxX            moveY = Math.min(Math.max(0, moveY), maxY); //设定top范畴, 0-maxY            //从新设置弹窗地位            g('dialog').style.left = moveX + 'px';            g('dialog').style.top = moveY + 'px';        }    }    //鼠标来到    g('move_part').addEventListener('mouseup', function () {        isDraging = false;    })</script></body></html>