JavaScript实现简单的拖动效果


Posted in Javascript onJuly 02, 2016

拖动是一件非常酷的事情。你点击某个对象,并按住鼠标不放,将鼠标移动到另一个区域,然后释放鼠标按钮将对象放在这里。
下面是一个简单的案例:
HTML部分:注意,拖动元素一定要为绝对定义,即position = absolute;

<div style="position:absolute;height:100px;width:100px;background:red" class="draggable"></div>

<script src="dome.js"></script>

JS部分(dome.js):

var EventUtil = {
  // 获取事件和目标
  getEvent : function (event) {
    return event ? event : window.event;
  },
  getTarget : function (event) {
    return event.target || event.srcElement;
  },
  // 添加监听事件
  addEvent : function (element, type, handler) {
    if (element.addEventListener)
    {
      element.addEventListener(type, handler, false);
    } else if (element.attachEvent)
    {
      element.attachEvent("on" + type, handler);
    }
  },
  // 注销监听事件
  delEvent : function (element, type, handler) {
    if (element.removeEventListener)
    {
      element.removeEventListener(type, handler, false);
    } else if (element.detachEvent)
    {
      element.detachEvent("on" + type, handler);
    }
  }
}
var DragDrop = function () {
  // 判断DOM元素是否正在被拖动的标志
  var dragging = null;
  // DOM元素左上角与鼠标指针的差值
    diffX = 0;
    diffY = 0;
  function handleEvent(event) {
    event = EventUtil.getEvent(event);
    var target = EventUtil.getTarget(event);
    switch (event.type) {
      case "mousedown" : 
      // 判断DOM元素的class中是否含有draggable属性
        if (target.className.indexOf("draggable") > -1) {
          dragging = target;
          diffX = event.clientX - target.offsetLeft;
          diffY = event.clientY - target.offsetTop;
        }
      break;

      case "mousemove" : 
        if (dragging != null) {
          target.style.left = event.clientX - diffX + "px";
          target.style.top = event.clientY - diffY + "px";
        }
      break;

      case "mouseup" :
        dragging = null;
      break;

    }
  }
  return {
    enable : function () {
      EventUtil.addEvent(document, "mousedown", handleEvent);
      EventUtil.addEvent(document, "mousemove", handleEvent);
      EventUtil.addEvent(document, "mouseup", handleEvent);
    },
    disable : function () {
      EventUtil.delEvent(document, "mousedown", handleEvent);
      EventUtil.delEvent(document, "mousemove", handleEvent);
      EventUtil.delEvent(document, "mouseup", handleEvent);
    }
  }
}();
DragDrop.enable();

这里需要讲解的是diffX和diffY,它们表示元素左上角与鼠标指针的差值。
diffX = 鼠标的x坐标 - 元素对象的offsetLeft
diffY = 鼠标的y坐标 - 元素对象的offsetTop

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
jQuery 隔行换色 支持键盘上下键,按Enter选定值
Aug 02 Javascript
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 Javascript
只需一行代码,轻松实现一个在线编辑器
Nov 12 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
Sublime Text 3常用插件及安装方法
Dec 16 Javascript
JS中对Cookie的操作详解
Aug 05 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
Vue 页面切换效果之 BubbleTransition(推荐)
Apr 08 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
Jul 05 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 Javascript
ES6的异步操作之promise用法和async函数的具体使用
Dec 06 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
Mar 31 Javascript
jQuery插件简单学习实例教程
Jul 01 #Javascript
jquery插件autocomplete用法示例
Jul 01 #Javascript
AngularJS 避繁就简的路由
Jul 01 #Javascript
AngularJS使用指令增强标准表单元素功能
Jul 01 #Javascript
AngularJS实现分页显示数据库信息
Jul 01 #Javascript
AngularJS内建服务$location及其功能详解
Jul 01 #Javascript
学习Angularjs分页指令
Jul 01 #Javascript
You might like
广播爱好者需要了解的天线知识
2021/03/01 无线电
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
PHP 万年历实现代码
2012/10/18 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python字符串格式化输出方法分析
2016/04/13 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python tkinter控件布局项目实例
2019/11/04 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
本科生详细的自我评价
2013/09/19 职场文书
公共事业管理本科生求职信
2013/10/07 职场文书
县级文明单位申报材料
2014/05/23 职场文书
倡议书的写法
2014/08/30 职场文书
2014年司机工作总结
2014/11/21 职场文书
小学庆六一主持词
2015/06/30 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python