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

  上一篇说了一下弹出窗口功能的实现思路,一般情况下紧接着就会需要做到弹窗的移动,当然现在有很插件、库比如hammer可以使用,效率也非常好。但我觉得还是有必要了解一下原生JS的实现思路及方式,如下:

  思路:拖动这个操作起始分为三个部分:

    1. 鼠标左键按下,此时才开始可以拖动;
    2. 鼠标移动,拖动开始;根据光标的移动给div相对应的纵轴、横轴的偏移;
    3. 鼠标左键松手,拖动结束,不可以再拖动了。

  每一步需要做的事:

  1中需要将初始化的拖动标示量置为true(可以拖动了)、记录光标起始坐标和div的起始坐标

  2中记录光标移动量,并将光标偏移量实时反映到div的坐标位置中去,div坐标实时同步光标移动,从而达到拖动效果

  3拖动标示量置为false(不可以拖动了)



具体实现拖拽的JS代码:

function DivMove(divId, h2Tag) {
        var oWin = document.getElementById(divId);
        var oH2 = oWin.getElementsByTagName(h2Tag)[0];
        var bDrag = false;
        var disX = disY = 0;
        oH2.onmousedown = function (event) {
            var event = event || window.event;
            bDrag = true;
            disX = event.clientX - oWin.offsetLeft;
            disY = event.clientY - oWin.offsetTop;
            this.setCapture && this.setCapture();
            return false
        };
        document.onmousemove = function (event) {
            if (!bDrag) return;
            var event = event || window.event;
            var iL = event.clientX - disX;
            var iT = event.clientY - disY;
            var maxL = document.documentElement.clientWidth - oWin.offsetWidth;
            var maxT = document.documentElement.clientHeight - oWin.offsetHeight;
            iL = iL < 0 ? 0 : iL;
            iL = iL > maxL ? maxL : iL;
            iT = iT < 0 ? 0 : iT;
            iT = iT > maxT ? maxT : iT;

            oWin.style.marginTop = oWin.style.marginLeft = 0;
            oWin.style.left = iL + "px";
            oWin.style.top = iT + "px";
            return false
        };
        document.onmouseup = window.onblur = oH2.onlosecapture = function () {
            bDrag = false;
            oH2.releaseCapture && oH2.releaseCapture();
        };
    }
时间: 2024-08-24 16:09:31

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

js 控制弹出窗口的大小

<SCRIPT LANGUAGE=javascript> window.open ('open.html', 'newwindow','height=200, width=400, top=50%,left=50%, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no,status=no') </SCRIPT> 参数解释: LANGUAGE=javascript // 代表脚本开始 window.open

js实现弹出窗口、页面变成灰色并不可操作的例子

<html><head><title>弹出一个窗口后,后面的层不可操作</title><script>function show()  //显示隐藏层和弹出层{   var hideobj=document.getElementById("hidebg");   hidebg.style.display="block";  //显示隐藏层   hidebg.style.height=document.bod

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

js先弹出窗口,然后N秒后跳转指定网址

在家里的一段时间里,做了网页中的一个小功能,因为实在找不到原因了,只能先用JS来先解决一下了,问题是用银行卡已经充值成功了,但一定要返回重新刷新一下才能显示出来,也就是没有同步显示,当然了,如果用银行卡充值成功,然后停顿四五秒后再返回,则显示新的余额,所以这里涉及到一个异步的问题,暂用且 JS 来解决一下吧,先提示充值成功,然后停顿N秒后返回会员中心. <script> alert("充值成功"); function hello(){ window.location = &

关于弹出层的拖拽,封装

<!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

JS弹出窗口代码大全(详细整理)

1.弹启一个全屏窗口 复制代码代码如下: <html> <body http://www.jb51.net','脚本之家','fullscreen');">; <b>www.jb51.net</b> </body> </html> 2.弹启一个被F11化后的窗口 复制代码代码如下: <html> <body 'http://www.jb51.net','脚本之家','channelmode');"

Js弹出窗口代码,window.open方法

<html><script language=JavaScript> <!--function click() {if (event.button==2) {window.open('#','popwindows',"toolbar=no,menubar=no,width=200,height=200")}}document.onmousedown=click//--></script><head><meta http-

Js(Jquery)实现的弹出窗口

想实现一个弹出层,过一段时间自动消失的功能. 之前的项目中是:在页面中预先先一个<div>区域,默认隐藏或者因为没有内容不显示.当需要显示信息时,将该<div>填充上内容,并用样式显示在正确的位置上. 今天想找这么一个插件,发了这个:http://tautologistics.com/projects/jquery.modaldialog/ 还不错,可以弹出窗口手动关闭,也可定时关闭. 百度盘:http://pan.baidu.com/s/1qWruV2c 后来再进行搜索,发现了这

js范例学习——窗口/框架与导航条设计之弹出窗口设置

1.弹出窗口设置 在JS中,可以使用window对象实现对窗口的控制. window常用方法: alert();弹出一个警告对话框: confirm();在确认对话框中显示指定的字符串: prompt();弹出一个可输入对话框: close();关闭被引用的窗口: foucus();将被引用的窗口放在所有打开窗口的最前方,成为焦点窗口: open();打开新的窗口并且显示由URL或名字引用的文档,可以创建窗口的属性: resizeTo(x,y);设置窗口的大小: resizeBy(offsetx