zoukankan      html  css  js  c++  java
  • JS_拖拽窗口的实现

    分享一篇旧笔记。温故而知新

    主要思路:

    1,鼠标点击拖拉框的时候确认鼠标距离整个被拉动窗口的左上角的位置。

    2,鼠标移动时候确认被拖动的窗口距离可视窗口左上角的位置与1所求得的值的差

    3,边界值判断

    贴上代码

    html:

    <div class="a">
                <div id="all" class="all">
                    <div class="top">鼠标点击区域</div>
                </div>
            </div

    css:

    <style type="text/css">
                .all{
                    height: 300px;
                    width: 450px;
                    border:2px solid black;
                    position: absolute;
                }
                .top{
                    height: 20%;
                    width: 100%;
                    background: pink;
                }
                .a{
                    height: 100%;
                    width: 100%;
                    border: 1px solid blue;
                }
            </style>

    js:

    <script>
    function getClassName(clsName,Parent){
        var Parent =  Parent?document.getElementById(Parent):document,
            eles=[],
            elements = Parent.getElementsByTagName("*");
    
        for(var i=0;i<elements.length;i++){
            if(clsName==elements[i].className){
                eles.push(elements[i]);
            }
        }
        return eles;
    }
    
    window.onload = drag;
    
    function drag(){
        //获取className=top的对象
        var pannel=getClassName("top","all")[0];
        //当鼠标点击时触发
        alert(pannel.innerHTML);
        document.title="111";
        pannel.onmousedown = fndrag;
    }
    
    function fndrag(event){
        document.title="222";
        var all = document.getElementById("all");
        var pannel=getClassName("top","all")[0];
        var event = event || window.event;
        //获取鼠标距离窗口的位置
        var disX = event.clientX-all.offsetLeft;
        var disY = event.clientY-all.offsetTop;
        //鼠标移动
        document.onmousemove=function(event){
            var e = event || window.event;
            pannel.style.cursor="move";
            fnmove(e,disX,disY);
        }
        //放开鼠标
        document.onmouseup=function(){
            document.onmouseup=null;
            document.onmousemove=null;
            pannel.style.cursor="auto";
        }
    }
    
    function fnmove(e,disX,disY){
        //获取窗口的位置(左上角)
        var l = e.clientX - disX;
        var t= e.clientY - disY;
        var all = document.getElementById("all");
        //获取可视窗口的长宽,兼容浏览器
        var winWid = document.documentElement.clientWidth || document.body.clientWidth;
        var winHei = document.documentElement.clientHeight || document.body.clientHeight;
        //获取窗口的最大宽度和长度(左上角)
        var maxWid = winWid-all.offsetWidth-10;
        var maxHei = winHei - all.offsetHeight-10;
        //超出左边间距
        if(l<0){
            l=10;
        }
        //超出右边间距
        else if(l>maxWid){
            l=maxWid;
        }
        //超出上面距离
        if(t<0){
            t=10;
        }
        else if(t>maxHei){
            t=maxHei;
        }
    
        document.title = l+","+t;
        all.style.left = l+"px";
        all.style.top= t+"px";
    }
    </script>

    效果展示:

    PS:效果有一点奇葩,窗口会跑到顶部

    鼠标点击区域

    以上内容,如有错误请指出,不甚感激。

  • 相关阅读:
    [SDOI2009]学校食堂Dining
    [SCOI2005]最大子矩阵
    [AHOI2009]中国象棋
    洛谷P1850 换教室(概率dp)
    洛谷[1007]梦美与线段树(线段树+概率期望)
    洛谷P3577 [POI2014]TUR-Tourism
    CF1045G AI robots(动态开点线段树)
    洛谷P4721 【模板】分治 FFT(分治FFT)
    洛谷P4726 【模板】多项式指数函数
    洛谷P4173 残缺的字符串(FFT)
  • 原文地址:https://www.cnblogs.com/adelina-blog/p/5718233.html
Copyright © 2011-2022 走看看