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 Prototype对象
Jan 07 Javascript
JavaScript 基于原型的对象(创建、调用)
Oct 16 Javascript
对字符串进行HTML编码和解码的JavaScript函数
Feb 01 Javascript
CSS(js)限制页面显示的文本字符长度
Dec 27 Javascript
JS判断字符串包含的方法
May 05 Javascript
jQuery中ajax的load()与post()方法实例详解
Jan 05 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
Feb 21 Javascript
js清除浏览器缓存的几种方法
Mar 15 Javascript
JS实现复选框的全选和批量删除功能
Apr 05 Javascript
Vue filter介绍及其使用详解
Oct 21 Javascript
分享Angular http interceptors 拦截器使用(推荐)
Nov 10 Javascript
Vue如何实现验证码输入交互
Dec 07 Vue.js
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通过会话控制实现身份验证实例
2016/10/18 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
$.ajax json数据传递方法
2008/11/19 Javascript
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
python实现音乐下载器
2018/04/15 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
大专毕业自我鉴定
2014/02/04 职场文书
企业活动策划方案
2014/06/02 职场文书
美术教师个人工作总结
2015/02/06 职场文书
单位工作证明范本
2015/06/15 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python