JS+DIV实现拖动效果


Posted in Javascript onFebruary 11, 2020

本文实例为大家分享了JS+DIV实现拖动效果的具体代码,供大家参考,具体内容如下

效果图

JS+DIV实现拖动效果

思路

JS+DIV实现拖动效果

代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="main" style="background-color: aqua;width: 100px;height: 100px;position: absolute;left: 50px;top: 50px">
  <div id="title" style="height: 10px;width:100%;background-color: antiquewhite;position: absolute;left: 0px;top: 0px"></div>
  <div class="box"></div>
</div>
<script>

  var startx;
  var starty;
  var startLeft;
  var startTop;
  var titleDiv=document.getElementById("title");
  var mainDiv=document.getElementById("main");
  var isDown=false;
//  鼠标按下
  function movedown(e){
    e=e?e:window.event;
    isDown=true;
    startx=e.clientX;
    starty=e.clientY;
    startLeft=parseInt(mainDiv.style.left);
    startTop=parseInt(mainDiv.style.top);
  }
//  鼠标移动
  function move(e){
    e=e?e:window.event;
    if(isDown) {
      mainDiv.style.left = e.clientX - (startx - startLeft)+"px";
      mainDiv.style.top = e.clientY - (starty - startTop)+"px";
    }
  }
//  鼠标松开
  function moveup(){
    isDown=false;
  }
  titleDiv.οnmοusedοwn=movedown;
  titleDiv.οnmοusemοve=move;
  titleDiv.οnmοuseup=moveup;
</script>
</body>
</html>

优化(封装,以及解决拖动问题(事件捕获))

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<div id="main" style="background-color: aqua;width: 100px;height: 100px;position: absolute;left: 50px;top: 50px">
  <div id="title"
     style="height: 10px;width:100%;background-color: antiquewhite;position: absolute;left: 0px;top: 0px"></div>
  <div class="box"></div>
</div>
<script>


  function Mover(title) {
    this.obj = title;
    this.startx = 0;
    this.starty;
    this.startLeft;
    this.startTop;
    this.mainDiv = title.parentNode;
    var that = this;
    this.isDown = false;
    this.movedown = function (e) {
      e = e ? e : window.event;
      if (!window.captureEvents) {
        this.setCapture();
      } //事件捕获仅支持ie
//      函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,
//      所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。
//      如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。
//      非ie浏览器 需要在document上设置事件
      that.isDown = true;
      that.startx = e.clientX;
      that.starty = e.clientY;

      that.startLeft = parseInt(that.mainDiv.style.left);
      that.startTop = parseInt(that.mainDiv.style.top);
    }
    this.move = function (e) {
      e = e ? e : window.event;
      if (that.isDown) {
        that.mainDiv.style.left = e.clientX - (that.startx - that.startLeft) + "px";
        that.mainDiv.style.top = e.clientY - (that.starty - that.startTop) + "px";
      }
    }
    this.moveup = function () {
      that.isDown = false;
      if (!window.captureEvents) {
        this.releaseCapture();
      } //事件捕获仅支持ie
    }
    this.obj.onmousedown = this.movedown;
    this.obj.onmousemove = this.move;
    this.obj.onmouseup = this.moveup;

    //非ie浏览器
    document.addEventListener("mousemove", this.move, true);
  }
  var mover = new Mover(document.getElementById("title"));


  //写两个是为了解决 ie 和非ie 浏览器关于事件捕获 的兼容性问题


</script>
</body>
</html>

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

Javascript 相关文章推荐
Jquery插件之多图片异步上传
Oct 20 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
Feb 26 Javascript
简单的ajax连接库分享(不用jquery的ajax)
Jan 19 Javascript
jquery的each方法使用示例分享
Mar 25 Javascript
Jquery 实现grid绑定模板
Jan 28 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
May 17 Javascript
简单的渐变轮播插件
Jan 12 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
Nov 02 Javascript
如何测量vue应用运行时的性能
Jun 21 Javascript
vue-cli3使用mock数据的方法分析
Mar 16 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
Feb 11 #Javascript
原生js拖拽实现图形伸缩效果
Feb 10 #Javascript
js实现单元格拖拽效果
Feb 10 #Javascript
详解Vue template 如何支持多个根结点
Feb 10 #Javascript
JavaScript canvas动画实现时钟效果
Feb 10 #Javascript
JavaScript canvas仿代码流瀑布
Feb 10 #Javascript
Vue数字输入框组件使用方法详解
Feb 10 #Javascript
You might like
PHP中的array数组类型分析说明
2010/07/27 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
JavaScript事件代理和委托详解
2016/04/08 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python操作MySQL数据库具体方法
2013/10/28 Python
python多线程http下载实现示例
2013/12/30 Python
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
python实现简易内存监控
2018/06/21 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
出纳员岗位职责
2014/03/13 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
行政处罚决定书
2015/06/24 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
PHP RabbitMQ消息列队
2022/05/11 PHP
MySQL数据库 任意ip连接方法
2022/05/20 MySQL