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学习笔记(十一) 正则表达式介绍
Jun 20 Javascript
网页广告中JS代码的信息监听示例
Apr 02 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
Mar 14 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
Vue 过渡(动画)transition组件案例详解
Jan 22 Javascript
js图片延迟加载(Lazyload)三种实现方式
Mar 01 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
Jun 17 Javascript
使用async await 封装 axios的方法
Jul 09 Javascript
es6基础学习之解构赋值
Dec 10 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
Mar 06 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设置session值和cookies的学习示例
2014/03/21 PHP
php分页示例分享
2014/04/30 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
PHP实现阿里大鱼短信验证的实例代码
2017/07/10 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
javascript第一课
2007/02/27 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
jQuery contains过滤器实现精确匹配使用方法
2013/04/12 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
python3.7简单的爬虫实例详解
2019/07/08 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
办公室年终个人自我评价
2013/10/28 职场文书
城南旧事读书笔记
2015/06/29 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python