jquery拖动代码
2016-04-19 21:21
375 查看
重新整理了一篇自己写过的一个jquery拖动代码,精简了一些东西。
1.支持自适应(缩放时,不会看不到,始终会在窗口内,记录位置)
2.拖动的元素不会拖到外面去(保持始终可见)
3.兼容IE浏览器,使用流畅
演示
实现以下目标:
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="http://caibaojian.com" target="_blank">http://caibaojian.com/</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(),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(), el = $(el), 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'));
演示地址:
演示
相关文章推荐
- jquery左右链接类似frameset的插件
- 对于jQuery中$(xxx:not(xxx))的一个范例
- jQuery制作表单验证
- jQuery学习(二)
- jquery入门 改动网页背景颜色
- 实践总结(内置福利)jQuery dom 操作
- jquery-qrcode js生成二维码,完美解决 json
- hjr-JAVA:Jquery的ajax在jsp上的实现
- javascript中采用jQuery ajax动态加载js文件的解决方法
- jQuery Validation用法示例
- [Infopath]使用jquery给infopath表单的的field赋值。 how to set value to Infopath field by Jquery
- jQuery-JSONP 插件跨域调用功能(Uncaught SyntaxError: Unexpected token : 出错原因解释)
- 高效Web开发的10个jQuery代码片段(转)
- jquery ajax提交表单
- (转)【深入浅出jQuery】源码浅析2--奇技淫巧
- JQuery 动态添加onclick事件
- jquery每日一学
- 扩展jQuery实现日期联动
- Jquery实现的简单轮播效果【附实例】
- jQuery实现选项联动轮播效果【附实例】