jQuery拖拽小插件

基本实现思路是利用了onmousedown,onmouseup,onmousemove三种事件和css中的绝对定位

插件功能:

1.设置拖拽热点

2.设置被拖拽对象

3.设置拖拽范围

默认情况下,拖拽热点和被拖拽对象是同一个元素,拖拽范围是文档窗口

jQuery代码

(function($){
    $.fn.drag=function(opts){
            var defaults={
                dragObj:$(this),
                scope:{
                    left:0,
                    top:0,
                    right:$(document).width(),
                    bottom:$(document).height()
                }
            }
            
            var config=$.extend(defaults,opts);
            var ifMouseDown=false;
            var offleft;
            var offtop;
            
            function getPosition(element){
                return element.offset();
            }
            
            function mousedownHandler(event){
                var x=event.pageX;    
                var y=event.pageY;    
                offleft=x-getPosition(config.dragObj).left;
                offtop=y-getPosition(config.dragObj).top;
                ifMouseDown=true;
            }
            
            function mousemoveHandler(event){
                if(ifMouseDown){
                    $(this).css({"cursor":"move"}) ;
                    var x=event.pageX;
                    var y=event.pageY;
                    var left=x-offleft;
                    var top=y-offtop;
                    if( left>config.scope.left&&left+config.dragObj.width()<config.scope.right){
                        config.dragObj.css({"left":left+"px"})
                    }
                    if(top>config.scope.top&&top+config.dragObj.height()<config.scope.bottom){
                        config.dragObj.css({"top":top+"px"})
                    }
                }
            }
            
            $(this).bind("mousedown",mousedownHandler);
            $(document).bind("mousemove",mousemoveHandler);
            $(document).bind("mouseup",function(){ ifMouseDown=false;});
    }
 })(jQuery);

 

posted @ 2014-10-20 17:07  ckzhou  阅读(161)  评论(0编辑  收藏  举报