• 不断优化,重构我的代码-----拖拽jquery插件


    最近学东西学的有点太散了,歇一阵子,重新完善之前的JQ插件,今天先上拖拽吧

    // JavaScript Document
    (function($){
        var defaults = {
            actionElement : "",     //获得事件的元素,非必填项
            rangeElement : window, //可拖动范围的元素 非必填
            direction : "", //默认为空,表示何以任意拖动, 可选值为vertical或者horizontal
            magnetic : 0  //磁性吸附尺寸 非必填
        }
    
        var opts = ""; //储存参数
        
        var disX;
        var disY;
        
        //保存后续需要操作的元素
        var dragEle,actionEle,rangeElement;
    
        //像jQuery对象下添加方法
        $.fn.drag = function( options ) {
            
            opts = $.extend( defaults , options || {} );
            dragEle = $( this );
            
            rangeEle = $( opts.rangeElement );
            
            var actionSelector;
            opts.actionElement != "" ? actionSelector = opts.actionElement : actionSelector = null ;    
            
            dragEle.on("mousedown",actionSelector,dragFn);
            
            return $(this).each(function(){});
        }
        
        
        //限制范围
        function range ( value , maxValue , minValue) {
            if( value > maxValue - opts.magnetic ){
                return maxValue;
            }else if( value < minValue + opts.magnetic ){
                return minValue;
            }
            return value;
        }
        
        //拖拽的主体函数
        function dragFn(ev){
                
            disX = ev.clientX - dragEle.offset().left;
            disY = ev.clientY - dragEle.offset().top;
            
            $(document).on("mousemove",mousemove);
            $(document).on("mouseup",mouseup);
            
            return false;
        }
        
        //鼠标移动事件
        function mousemove (ev) {
            var left = ev.clientX - disX;
            var top = ev.clientY - disY;
            
            left = range(left , rangeEle.width() - dragEle.width() , 0);
            top = range(top , rangeEle.height() - dragEle.height() , 0);
            
            
            switch( opts.direction ){
                case "horizontal" :
                    dragEle.css({"left" : left});
                break;
                case "vertical" :
                    dragEle.css({"top" : top });
                break;
                default :
                    dragEle.css({"left" : left,"top" : top });
                break;
            }
        }
        
        //鼠标抬起移除事件
        function mouseup () {
            $(document).off("mouseup",mouseup);
            $(document).off("mousemove",mousemove);
        }
        
    })(jQuery)

    使用方法

    $("#drag").drag({
        actionElement : ".action",
        rangeElement : "#container",
        direction : "horizontal",
        magnetic : 15
    });

    暂时想不出来需要暴漏出来哪些参数比较有用,暂且这样,后续若有必要再修改

  • 相关阅读:
    贪心:SPOJ Backup Files
    杂题 SPOJ MOBILE2
    杂题 UVAoj 10000 Longest Paths
    杂题 UVAoj 107 The Cat in the Hat
    DP(斜率优化):HDU 3507 Print Article
    搜索(DLX): POJ 3074 3076 Sudoku
    DLX模板
    PHP代码优化技巧大盘点
    盘点PHP编程常见失误
    PHP Socket 编程详解
  • 原文地址:https://www.cnblogs.com/liqingchang/p/4512331.html
Copyright © 2020-2023  润新知