原生js实现自由拖拽弹窗代码demo


Posted in Javascript onJune 29, 2016

本文为大家分享了原生弹窗拖拽代码demo,供大家参考,具体内容如下

效果图:

原生js实现自由拖拽弹窗代码demo

实现代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>弹窗拖拽</title>
  <style>
    *{margin:0;padding:0;}
    .box{position: absolute;width: 400px;height: 300px;top:100px;left:100px;border:1px solid #001c67;background: #}
    .move{position: absolute;width: 100px;height: 100px;top:100px;left:150px;border:1px solid #000;}
    .move:hover{cursor: move;}
    .close{position: absolute;width: 30px;height: 30px;top:0px;right:0px;background:red;text-align: center;line-height: 30px;}
  </style>
  <script>
    window.onload=function(){
      var oMove=document.getElementById('move');
      // 拖曳
      oMove.onmousedown=fnDown;
      // 关闭
      var oClose=document.getElementById('close');
      oClose.onclick=function(){
       document.getElementById('box').style.display='none';
      }
    }
    function fnDown(event){
      event = event || window.event;
      var oDrag=document.getElementById('box'),
        // 光标按下时光标和面板之间的距离
        disX=event.clientX-oDrag.offsetLeft,
        disY=event.clientY-oDrag.offsetTop;
      // 移动
      document.onmousemove=function(event){
        event = event || window.event;
        var l=event.clientX-disX,
          t=event.clientY-disY,
          // 最大left,top值
          leftMax=(document.documentElement.clientWidth || document.body.clientWidth)-oDrag.offsetWidth,
          topMax=(document.documentElement.clientHeight || document.body.clientHeight)-oDrag.offsetHeight;
        if(l<0) l=0;
        if(l>leftMax) l=leftMax;
        if(t<0) t=0;
        if(t>topMax) t=topMax;
        oDrag.style.left=l+'px';
        oDrag.style.top=t+'px';
      }
      // 释放鼠标
      document.onmouseup=function(){
        document.onmousemove=null;
        document.onmouseup=null;
      }
    }
  </script>
</head>
<body>
  <div class="box" id="box">
    <div class="move" id="move">拖拽区域</div>
    <div class="close" id="close">X</div>
  </div>
</body>
</html>

主要注意几点
 1.event,IE兼容问题 
 2.点击鼠标时要先判断鼠标与面板之间的距离
 3.要判断弹窗与浏览器整个区域的距离,不能让弹窗跑出浏览器外的区域 
 4.松开鼠标要解除事件绑定,不然会有bug

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery AJAX实现目录浏览与编辑的代码
Oct 21 Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
JS实现的文字与图片定时切换效果代码
Oct 06 Javascript
js实现点击获取验证码倒计时效果
Jan 28 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 Javascript
js原生跨域_用script标签的简单实现
Sep 24 Javascript
JavaScript实现的微信二维码图片生成器的示例
Oct 26 Javascript
详解ECharts使用心得总结
Dec 06 Javascript
简单了解node npm cnpm的具体使用方法
Feb 27 Javascript
layui layer select 选择被遮挡的解决方法
Sep 21 Javascript
解决vue请求接口第一次成功,第二次失败问题
Sep 08 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
Jun 29 #Javascript
简单实现js间歇或无缝滚动效果
Jun 29 #Javascript
js精准的倒计时函数分享
Jun 29 #Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
Jun 29 #Javascript
RequireJS多页面应用实例分析
Jun 29 #Javascript
全面了解JS中的匿名函数
Jun 29 #Javascript
大型JavaScript应用程序架构设计模式
Jun 29 #Javascript
You might like
用在PHP里的JS打印函数
2006/10/09 PHP
PHP+javascript模拟Matrix画面
2006/10/09 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
原生javascript实现图片无缝滚动效果
2016/02/12 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
python用for循环求和的方法总结
2019/07/08 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python super函数使用方法详解
2020/02/14 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
自我鉴定四大框架
2014/01/17 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
双语教学实施方案
2014/03/23 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js