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 相关文章推荐
获取Javscript执行函数名称的方法
Dec 22 Javascript
Ext javascript建立超链接,进行事件处理的实现方法
Mar 22 Javascript
js 单引号 传递方法
Jun 22 Javascript
jquery $.ajax()取xml数据的小问题解决方法
Nov 20 Javascript
IE6弹出“已终止操作”的解决办法
Nov 27 Javascript
Javascript的常规数组和关联数组对比小结
May 24 Javascript
js加载之使用DOM方法动态加载Javascript文件
Nov 08 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
Jun 20 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
Aug 15 Javascript
select下拉框插件jquery.editable-select详解
Jan 22 Javascript
基于Vue实现图片在指定区域内移动的思路详解
Nov 11 Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 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
一个SQL管理员的web接口
2006/10/09 PHP
php计算函数执行时间的方法
2015/03/20 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python字符串详细介绍
2015/05/09 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
护理毕业生自我鉴定
2014/02/11 职场文书
小学教师寄语大全
2014/04/03 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
格林童话读书笔记
2015/06/30 职场文书
详解Python函数print用法
2021/06/18 Python
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android