原生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 相关文章推荐
2007/12/23更新创意无限,简单实用(javascript log)
Dec 24 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
js通过location.search来获取页面传来的参数
Sep 11 Javascript
javascript清空table表格的方法
May 14 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
Sep 27 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
谈谈JavaScript数组常用方法总结
Jan 24 Javascript
bootstrap IE8 兼容性处理
Mar 22 Javascript
微信小程序实战之轮播图(3)
Apr 17 Javascript
JS实现十分钟倒计时代码实例
Oct 18 Javascript
详解Vue组件之作用域插槽
Nov 22 Javascript
js变量声明var使用与不使用的区别详解
Jan 21 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
destoon之一键登录设置
2014/06/21 PHP
php验证session无效的解决方法
2014/11/04 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
jquery form 加载数据示例
2014/04/21 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
详解Vite的新体验
2021/02/22 Javascript
python自动安装pip
2014/04/24 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
使用Python实现音频双通道分离
2020/12/25 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
公司年会晚宴演讲稿
2014/01/06 职场文书
科学发展观演讲稿
2014/09/11 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
招标保密承诺书
2015/01/20 职场文书
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis