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 相关文章推荐
Javascript 实用小技巧
Apr 07 Javascript
来自国外的页面JavaScript文件优化
Dec 08 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
JavaScript四种调用模式和this示例介绍
Jan 02 Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 Javascript
jquery获取当前元素索引值用法实例
Jun 10 Javascript
浅谈js中的引用和复制(传值和传址)
Sep 18 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
Jan 19 Javascript
jQuery学习之DOM节点的插入方法总结
Jan 22 Javascript
微信小程序 支付后台java实现实例
May 09 Javascript
详解ES7 Decorator 入门解析
Feb 18 Javascript
原生JavaScript写出Tabs标签页的实例代码
Jul 20 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
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
php empty() 检查一个变量是否为空
2011/11/10 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
jQuery内存泄露解决办法
2016/12/13 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
深入学习python的yield和generator
2016/03/10 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
简单了解python的内存管理机制
2019/07/08 Python
Python集合操作方法详解
2020/02/09 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
Python如何输出百分比
2020/07/31 Python
网上书店创业计划书
2014/01/12 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
教师批评与自我批评
2014/10/15 职场文书
MySQL的join buffer原理
2021/04/29 MySQL
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android