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

 更新时间:2016年11月22日 10:07:56   投稿:jingxian  
下面小编就为大家带来一篇自己封装的一个原生JS拖动方法(推荐)。小编觉得挺不错的,希望对大家有所帮助。一起跟随小编过来看看吧,祝大家游戏愉快哦

代码:

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中null与undefined分析

    JavaScript中null与undefined分析

    JavaScript null undefined分析
    2009-07-07
  • 微信小程序中添加客服按钮contact-button功能

    微信小程序中添加客服按钮contact-button功能

    这篇文章主要介绍了微信小程序中添加客服按钮contact-button功能,小程序的客服系统,是微信做的非常成功的功能,开发者很容易的实现客服功能
    2018-04-04
  • layui实现数据表格隐藏列的示例

    layui实现数据表格隐藏列的示例

    今天小编就为大家分享一篇layui实现数据表格隐藏列的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 深入理解JSON数据源格式

    深入理解JSON数据源格式

    JSON 在很多场合下作为数据格式比XML要更加方便。JSON的数据由对象、数组和元素等格式组成。每种格式都可以包含合法的JavaScript数据类型
    2014-01-01
  • JavaScript简单获取系统当前时间完整示例

    JavaScript简单获取系统当前时间完整示例

    这篇文章主要介绍了JavaScript简单获取系统当前时间的方法,涉及javascript针对日期与时间的判断以及字符串组合的相关技巧,需要的朋友可以参考下
    2016-08-08
  • javascript常用经典算法详解

    javascript常用经典算法详解

    本文主要介绍了javascript七种常见算法:冒泡排序;插入排序;希尔排序;归并排序;快速排序;选择排序;奇偶排序。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • taro 实现购物车逻辑的实例代码

    taro 实现购物车逻辑的实例代码

    这篇文章主要介绍了taro 实现购物车逻辑,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 微信小程序用户拒绝授权的处理方法详解

    微信小程序用户拒绝授权的处理方法详解

    这篇文章主要介绍了微信小程序用户拒绝授权的处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • js实现黑色简易的滑动门网页tab选项卡效果

    js实现黑色简易的滑动门网页tab选项卡效果

    这篇文章主要介绍了js实现黑色简易的滑动门网页tab选项卡效果,可实现简单的鼠标滑过tab项切换对应菜单的功能,涉及javascript鼠标事件控制页面元素的遍历与样式改变实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • 一行代码实现纯数据json对象的深度克隆实现思路

    一行代码实现纯数据json对象的深度克隆实现思路

    今天整理了下资料,分析下为什么一句话可以实现纯数据json对象的深度克隆,感兴趣的朋友可以了解下哦
    2013-01-01

最新评论