最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 20:29:10
文档

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

自己封装的一个原生JS拖动方法(推荐):代码:function drag(t,p){ var point = p null, target = t null, resultX = 0, resultY = 0; (!point) point = target : ''; //如果没有拖动点,则拖动点默认为整个别拖动元素 function getPos(t){ va
推荐度:
导读自己封装的一个原生JS拖动方法(推荐):代码:function drag(t,p){ var point = p null, target = t null, resultX = 0, resultY = 0; (!point) point = target : ''; //如果没有拖动点,则拖动点默认为整个别拖动元素 function getPos(t){ va

代码:

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 表示拖动点
*/
 
// 注意:如果省略拖动点,默认可拖动的区域是整个被拖动元素

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

自己封装的一个原生JS拖动方法(推荐):代码:function drag(t,p){ var point = p null, target = t null, resultX = 0, resultY = 0; (!point) point = target : ''; //如果没有拖动点,则拖动点默认为整个别拖动元素 function getPos(t){ va
推荐度:
标签: 方法 js 封装
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top