关于弹出层的拖拽,封装

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        html{
            height: 100%;
        }
        body{
            width: 100%;
            height: 100%;
            position: relative;
        }
        #test{
            width: 100px;
            height: 100px;
            background: #000;
            position: absolute;
            /*transform: translate(-50%,-50%);*/
        }
        #p{
            width: 100%;
            height: 20px;
            background: red;
        }
        .close{
            display: inline-block;
            width: 20px;
            height: 100%;
            background:#ddd;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="test">
        <p id="p">
            <span class="close">X</span>
        </p>
    </div>
</body>
<script>
    var oDrag = document.getElementById("test");
    var oTitle = document.getElementById("p");
    var closeEle = document.getElementsByClassName("close")[0];
    oDrag.style.left=(document.body.offsetWidth-oDrag.offsetWidth)/2+"px";
    oDrag.style.top=(document.body.offsetHeight-oDrag.offsetHeight)/2+"px";
    window.onresize=function () {
        oDrag.style.left=(document.body.offsetWidth-oDrag.offsetWidth)/2+"px";
        oDrag.style.top=(document.body.offsetHeight-oDrag.offsetHeight)/2+"px";
        drag(oTitle, oDrag,closeEle);
    };
    window.onload=function () {
        drag(oTitle, oDrag,closeEle);
    };
    function drag(oTitle,oDrag,closeEle) {
        closeEle.onclick=function () {
                oDrag.style.display=‘none‘;
                this.onclick=null;
        };
        oTitle.onmousedown=function(event){
            oTitle.style.cursor = "move";
            var event = event || window.event;
            var disX=event.clientX-oDrag.offsetLeft;//鼠标在屏幕中的坐标减去元素距离屏幕的左边距,等于这个鼠标在div元素中距离div最左边的的左偏移量
            var disY=event.clientY-oDrag.offsetTop;
            console.log(disX,disY)
//鼠标移动,窗口随之移动     onmousemove在有物体移动是才执行alert事件;
            document.onmousemove=function(event){
                var event = event || window.event;
                maxW=document.documentElement.clientWidth-oDrag.offsetWidth;//div元素在屏幕中的最大left。
                maxH=document.documentElement.clientHeight-oDrag.offsetHeight;
                posX=event.clientX-disX;//鼠标坐标减去鼠标在div元素中的偏移坐标,相当于div元素距离屏幕的最左的距离。也就是left
                posY=event.clientY-disY;//鼠标坐标减去鼠标在div元素中的偏移坐标,相当于div元素距离屏幕的最顶部的距离。也就是top
                if(posX<0){
                    posX=0;
                }else if(posX>maxW){
                    posX=maxW;
                }
                if(posY<0){
                    posY=0;
                }else if(posY>maxH){
                    posY=maxH;
                }
                oDrag.style.left=posX+‘px‘;
                oDrag.style.top=posY+‘px‘;
            };
//鼠标松开,窗口将不再移动
            document.onmouseup=function(){
                document.onmousemove=null;
                document.onmouseup=null;
            }
        }
    }
</script>
</html>
时间: 2024-10-14 16:28:45

关于弹出层的拖拽,封装的相关文章

UI组件之浮出层的拖拽

上次总结了一下简单的浮出层的设计,不了解的可以猛戳下面这条链接: UI组件之浮出层 这次的这篇总结主要是参考的这篇文章:js拖拽事件实例,不过自己多做了一点分析 这次来总结一下浮出层的拖拽,期间遇到了一些小问题,不过最后也解决了,这里也总结一下. 首先,我们要实现的效果是浮出层在鼠标点击之后随着鼠标移动,松开之后停止移动,并且边框不得超出边界. 网上很多教程已经说得很清楚了,这里就再啰嗦两句,这个过程总共分为三步: 鼠标点下之时用onmousedown事件记录鼠标点下时与浮出层的相对位置 用on

原生JS实现弹出窗口的拖拽(直接copy可用)

上一篇说了一下弹出窗口功能的实现思路,一般情况下紧接着就会需要做到弹窗的移动,当然现在有很插件.库比如hammer可以使用,效率也非常好.但我觉得还是有必要了解一下原生JS的实现思路及方式,如下: 思路:拖动这个操作起始分为三个部分: 鼠标左键按下,此时才开始可以拖动: 鼠标移动,拖动开始:根据光标的移动给div相对应的纵轴.横轴的偏移: 鼠标左键松手,拖动结束,不可以再拖动了. 每一步需要做的事: 1中需要将初始化的拖动标示量置为true(可以拖动了).记录光标起始坐标和div的起始坐标 2中

EasyUI, Dialog 在框架页(ifrmae)的Top页面弹出时,拖拽Dialog边缘(以改变窗口大小),UI界面被卡死的解决办法

将Dialog的modal属性设置为true,可以解决卡死的问题(但会给用户使用体验带来影响) 1 var par = { 2 title: This.title, 3 width: This.width, 4 height: This.height, 5 cache: This.cache, 6 modal: This.modal, 7 resizable: This.resizable, 8 maximizable: This.maximizable, 9 onResize: This.on

Jquery学习之路(三) 实现弹出层插件

弹出层的应用还是比较多的,登陆,一些同页面的操作,别人的总归是别人的,自己的才是自己的,所以一直以来想写个弹出层插件.不多废话,直接开始吧! 不想看可以在这里直接下载源码xsPop.zip 1:遮罩层 要弹出层,先要用一个遮罩层挡在下面的页面,此遮罩层是全屏的,页面滚动也要有,所以设置 position: fixed;还要有透明效果,下面是我定义的遮罩层css,取名mask .mask { position: fixed; width: 100%; height: 100%; backgroun

模拟layui弹出层

以前觉得自己手写一个类似layui的弹出层是挺遥远的事,因为完全没有头绪,即便在layui官网知道layui使用的都是C3动画 之前试过控制width:0;height:0来做动画,结果惨不忍睹,直到几天前灵机一动联想到了tranform的scale属性,才稍微触及到了皮毛 为了不添加格外的HTML结构,所以弹出层也是动态生成 layui弹出框和遮罩层是同级结构,而我把弹出框放遮罩层里了,所以关闭时要用animationend来监听,弹出框做完动画后才删除遮罩层 确认框confirm之前也想跟原

使用movable-view制作可拖拽的微信小程序弹出层效果。

仿了潮汐睡眠小程序的代码.[如果有侵权联系删除 最近做的项目有个弹出层效果,类似音乐播放器那种.按照普通的做了一般感觉交互不是很优雅,设计妹子把潮汐睡眠的弹层给我看了看,感觉做的挺好,于是乘着有空仿照了一下. 首先善用度娘反编译弄到了源码,但是打不开.然后自己研究源码发现他们用的是movable-view实现的. 于是仿照着搭出了基础框架. 新建了个组件 wxml <!--components/playpanel/playpanel.wxml--> <movable-area style

基于layer封装的异步加载分部视图弹出层

背景:之前一直用的artdialog,但是样式不是很好看,后来偶然看到layer,觉得不错,但是对于.net mvc来说,不能像artdialog一样弹出分部视图是很难受的.所以下面的方法就解决了. <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta na

【pluginShare】依赖JQuery的弹出层封装

目前正在做的项目,老大说打算一点点做成bootstrap那样,然后开源... 所以,趁现在不忙,先封装一些小插件,然后慢慢完善,扩大,开源... 因此博客也多了一个新的模块------分享 第一弹:alert || confirm 弹出层~~~ 地址:点击下载 (http://yun.baidu.com/share/link?shareid=2062596176&uk=1062074383)

自己封装的弹出层插件

html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="