原生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连缀语法如何实现
Nov 29 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
使用jQuery调用XML实现无刷新即时聊天
Aug 07 Javascript
原生的强大DOM选择器querySelector介绍
Dec 21 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
vuejs绑定class和style样式
Apr 11 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
laypage.js分页插件使用方法详解
Jul 27 Javascript
VUEX采坑之路之获取不到$store的解决方法
Nov 08 Javascript
JS实现图片懒加载(lazyload)过程详解
Apr 02 Javascript
vue实现列表滚动的过渡动画
Jun 29 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 用数组降低程序的时间复杂度
2009/12/04 PHP
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
python执行子进程实现进程间通信的方法
2015/06/02 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
小学生安全保证书
2014/02/01 职场文书
乡镇庆八一活动方案
2014/02/02 职场文书
鸟的天堂导游词
2015/01/31 职场文书
2015个人半年总结范文
2015/03/09 职场文书
毕业感言怎么写
2015/07/31 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android