原生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 相关文章推荐
js nextSibling属性和previousSibling属性概述及使用注意
Feb 16 Javascript
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
Aug 13 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
javascript实现下雪效果【实例代码】
May 03 Javascript
使用JS代码实现点击按钮下载文件
Nov 12 Javascript
完美解决IE不支持Data.parse()的问题
Nov 24 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
Sep 09 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
Jan 18 Javascript
vue全屏事件开发详解
Jun 17 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
Jul 01 Javascript
react中的DOM操作实现
Jun 30 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 cookies中删除的一般赋值方法
2011/05/07 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python备份Mysql脚本
2008/08/11 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
python操作mysql代码总结
2018/06/01 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
python批量修改xml属性的实现方式
2020/03/05 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
Servlet的生命周期
2013/08/25 面试题
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
致跳高运动员广播稿
2014/01/13 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
go goth封装第三方认证库示例详解
2022/08/14 Golang