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调用RESTful WCF示例代码(GET方法/POST方法)
Jan 26 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
Sep 01 Javascript
JavaScript数据结构和算法之二叉树详解
Feb 11 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
Jul 01 Javascript
Google 地图API资料整理及详细介绍
Aug 06 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
Aug 24 Javascript
微信小程序 欢迎页面的制作(源码下载)
Jan 09 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
Feb 23 Javascript
微信小程序 选项卡的简单实例
May 24 Javascript
jQuery中的for循环var与let的区别
Apr 21 jQuery
Angular搜索场景中使用rxjs的操作符处理思路
May 30 Javascript
jQuery实现动态操作table行
Nov 23 jQuery
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
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
jquery.validate使用攻略 第三部
2010/07/01 Javascript
jquery获取radio值实例
2014/10/16 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
深入理解Python爬虫代理池服务
2018/02/28 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
使用Python发现隐藏的wifi
2020/03/04 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
学习十八大的心得体会
2014/09/01 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
nginx中proxy_pass各种用法详解
2021/11/07 Servers
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL
html中两种获取标签内的值的方法
2022/06/16 jQuery
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python