自己封装的一个原生JS拖动方法(推荐)


Posted in Javascript onNovember 22, 2016

代码:

function drag(t,p){

  var point = p || null,
    target = t || null,
    resultX = 0,
    resultY = 0;

  (!point)? point = target : ''; //如果没有拖动点,则拖动点默认为整个别拖动元素

  function getPos(t){
    var offsetLeft = 0,
      offsetTop = 0,
      offsetParent = t;

    while(offsetParent){
      offsetLeft+=offsetParent.offsetLeft;
      offsetTop+=offsetParent.offsetTop;
      offsetParent = offsetParent.offsetParent;
    }

    return {'top':offsetTop,'left':offsetLeft};
  }

  function core(){

    var width = document.body.clientWidth || document.documentElement.clientWidth,
      height = document.body.clientHeight || document.documentElement.clientHeight; 
      maxWidth = width - target.offsetWidth,
      maxHeight = height - target.offsetHeight;

    (resultX >= maxWidth)? target.style.left = maxWidth+'px' : (resultX > 0)?target.style.left = resultX +'px': ''; //重置默认位置。
    (resultY >= maxHeight)?  target.style.top = maxHeight +'px' : (resultY > 0)?target.style.top = resultY +'px':''; //重置默认位置。

    point.onmousedown=function(e){  
      var e = e || window.event,
        coordX = e.clientX,
        coordY = e.clientY,
        posX = getPos(target).left,
        posY = getPos(target).top;

      point.setCapture && point.setCapture();  //将Mouse事件锁定到指定元素上。
      document.onmousemove=function(e){

        var ev = e || window.event,
          moveX = ev.clientX,
          moveY = ev.clientY;

        resultX = moveX - (coordX - posX); //结果值是坐标点减去被拖动元素距离浏览器左侧的边距
        resultY = moveY - (coordY - posY);

        (resultX > 0 )?((resultX < maxWidth)?target.style.left = resultX+'px' : target.style.left = maxWidth+'px') : target.style.left = '0px'; 
        (resultY > 0 )?((resultY < maxHeight)?target.style.top = resultY+'px' : target.style.top = maxHeight+'px') : target.style.top = '0px'; 

        ev.stopPropagation && ev.stopPropagation(); 
        ev.preventDefault;
        ev.returnValue = false;
        ev.cancelBubble = true;
      };
    };
    document.onmouseup=function(){  // 解决拖动时,当鼠标指向的DOM对象非拖动点元素时,无法触发拖动点的onmousedown的BUG。
      document.onmousemove = null;  
      point.releaseCapture && point.releaseCapture();  // 将Mouse事件从指定元素上移除。
    };
    point.onmouseup=function(e){
      var e = e || window.event;
      document.onmousemove = null;
      point.releaseCapture && point.releaseCapture();
    };
  }
  core();
  window.onresize = core;  
}

使用方式:

drag(t,p)
/* 
 * 说明 
 * t 表示被拖动的元素
 * p 表示拖动点
*/

// 注意:如果省略拖动点,默认可拖动的区域是整个被拖动元素

以上就是小编为大家带来的自己封装的一个原生JS拖动方法(推荐)全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
基于jQuery的为attr添加id title等效果的实现代码
Apr 20 Javascript
Javascript面向对象编程(二) 构造函数的继承
Aug 28 Javascript
将光标定位于输入框最右侧实现代码
Dec 04 Javascript
Three.js源码阅读笔记(光照部分)
Dec 27 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
easyui导出excel无法弹出下载框的快速解决方法
Nov 10 Javascript
Jquery Easyui日历组件Calender使用详解(23)
Dec 18 Javascript
两种简单的跨域方法(jsonp、php)
Jan 02 Javascript
使用ionic播放轮询广告的实现方法(必看)
Apr 24 Javascript
详解Vue组件实现tips的总结
Nov 01 Javascript
微信小程序实现音频文件播放进度的实例代码
Mar 02 Javascript
JS数组及对象遍历方法代码汇总
Jun 16 Javascript
SelecT下拉框选中和取值的解决方法
Nov 22 #Javascript
javascript入门之window对象【新手必看】
Nov 22 #Javascript
AngularJS实现DOM元素的显示与隐藏功能
Nov 22 #Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 #Javascript
AngularJS实现ajax请求的方法
Nov 22 #Javascript
js数组操作方法总结(必看篇)
Nov 22 #Javascript
jQ处理xml文件和xml字符串的方法(详解)
Nov 22 #Javascript
You might like
第四节--构造函数和析构函数
2006/11/16 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
实现PHP搜索加分页
2016/10/12 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
Python Flask-web表单使用详解
2017/11/18 Python
python爬虫实例详解
2018/06/19 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
会展中心部门工作职责
2013/11/27 职场文书
自主招生自荐信范文
2013/12/04 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
工作简报怎么写
2015/07/21 职场文书
会议室使用管理制度
2015/08/06 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python