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静态的url如何传递
May 03 Javascript
CSS JavaScript 实现菜单功能 改进版
Dec 09 Javascript
javascript Excel操作知识点
Apr 24 Javascript
JS this作用域以及GET传输值过长的问题解决方法
Aug 06 Javascript
JavaScript原型链示例分享
Jan 26 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
May 03 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
May 28 Javascript
JavaScript实现Java中Map容器的方法
Oct 09 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
Apr 13 Javascript
JavaScript使用readAsDataURL读取图像文件
May 10 Javascript
vuex实现的简单购物车功能示例
Feb 13 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 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 Mysql编程之高级技巧
2008/08/27 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
JPA的特点
2014/10/25 面试题
演讲稿格式范文
2014/05/19 职场文书
人事任命书格式
2014/06/05 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
2014年司法局工作总结
2014/12/11 职场文书
横店影视城导游词
2015/02/06 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
用php如何解决大文件分片上传问题
2021/07/07 PHP
Python Matplotlib绘制动画的代码详解
2022/05/30 Python
python热力图实现的完整实例
2022/06/25 Python