jquery拖动代码

重新整理了一篇自己写过的一个jquery拖动代码,精简了一些东西。

实现以下目标:

  • 1.支持自适应(缩放时,不会看不到,始终会在窗口内,记录位置)
  • 2.拖动的元素不会拖到外面去(保持始终可见)
  • 3.兼容IE浏览器,使用流畅

HTML代码:

<style type="text/css">
.page{text-align:left;}
.dragDiv{border:1px solid #ddd; padding:10px; width:300px; margin:0 auto; border-radius:4px; box-shadow:0 1px 2px #fefefe; position: fixed;}
</style>
<div class="dragDiv" id="drag">
	<div class="drag-head">点击拖动</div>
	<div class="drag-body">
		蔡宝坚博客专注于前端开发,欢迎关注和收藏。<br/>
		微博:<a href="http://weibo.com/kujian" target="_blank">http://weibo.com/kujian</a><br/>
		博客:<a href="https://qdkfweb.cn" target="_blank">https://qdkfweb.cn/</a>
	</div>
</div>

jQuery代码:

//视频小窗口播放和还原
//全局保存拖动的位置
var _drag = {};
_drag.top = 0; //拖动过的位置距离上边
_drag.left = 0; //拖动过的位置距离左边
_drag.maxLeft; //距离左边最大的距离
_drag.maxTop; //距离上边最大的距离
_drag.dragging = false; //是否拖动标志
//拖动函数
function bindDrag(el){
var winWidth = $(window).width(), winHeight =$(window).height() , $el = $(el) ,objWidth = $el.outerWidth(), objHeight = $el.outerHeight();
_drag.maxLeft = winWidth - objWidth, _drag.maxTop = winHeight - objHeight;
var els = el.style,x=0,y=0;
var objTop = $el.offset().top, objLeft = $el.offset().left;
$el.mousedown(function(e){
_drag.dragging = true;
_drag.isDragged = true;
x = e.clientX - el.offsetLeft;
y = e.clientY - el.offsetTop;
el.setCapture && el.setCapture();
$(document).bind('mousemove',mouseMove).bind('mouseup',mouseUp);
return false;
});
function mouseMove(e){
e = e || window.event;
if(_drag.dragging){
_drag.top = e.clientY - y;
_drag.left = e.clientX - x;
_drag.top = _drag.top > _drag.maxTop ? _drag.maxTop : _drag.top;
_drag.left = _drag.left > _drag.maxLeft ? _drag.maxLeft : _drag.left;
_drag.top = _drag.top < 0 ? 0 : _drag.top;
_drag.left = _drag.left <0 ? 0 : _drag.left;
els.top = _drag.top + 'px';
els.left = _drag.left+ 'px';
return false;
}

}
function mouseUp(e){
_drag.dragging = false;
el.releaseCapture && el.releaseCapture();
e.cancelBubble = true;
$(document).unbind('mousemove',mouseMove).unbind('mouseup',mouseUp);
}
$(window).resize(function(){
var winWidth = $(window).width(),
winHeight = $(window).height(),
elWidth = $el.outerWidth(),
elHeight = $el.outerHeight(),
elLeft = parseFloat($el.css('left')),
elTop = parseFloat($el.css('top'));
_drag.maxLeft = winWidth - elWidth;
_drag.maxTop = winHeight - elHeight;
_drag.top = _drag.maxTop < elTop ? _drag.maxTop : elTop;
_drag.left = _drag.maxLeft < elLeft ? _drag.maxLeft : elLeft;
$el.css({
top:_drag.top,
left:_drag.left
})
})
}
bindDrag(document.getElementById('drag'));

演示地址:

[dmengl2v]演示[/dmengl2v]


关注我

我的微信公众号:前端开发博客,在后台回复以下关键字可以获取资源。

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF
  • 回复「Vue脑图」获取 Vue 相关脑图
  • 回复「思维图」获取 JavaScript 相关思维图
  • 回复「简历」获取简历制作建议
  • 回复「简历模板」获取精选的简历模板
  • 回复「加群」进入500人前端精英群
  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。
  • 回复「知识点」下载高清JavaScript知识点图谱

每日分享有用的前端开发知识,加我微信:caibaojian89 交流