轉前端開發中經常使用工具函數總結

一、時間格式化等方法app

 

推薦使用 moment.js 的庫文件異步

 

三、模板、循環、MAP等方法使用函數

 

underscode.js 的方法性能

四、表單序列化成JSON this

 

複製代碼
    $.fn.serializeJson = function() {
        var serializeObj = {};
        var array = this.serializeArray();
        var str = this.serialize();
        $(array).each(function() {
            if (serializeObj[this.name]) {
                if ($.isArray(serializeObj[this.name])) {
                    serializeObj[this.name].push(this.value);
                } else {
                    serializeObj[this.name] = [serializeObj[this.name], this.value];
                }
            } else {
                serializeObj[this.name] = this.value;
            }
        });
        return serializeObj;
    };
複製代碼

 

五、字符串截取使用……填補spa

複製代碼
    String.prototype.strcut = function(number) {
        var length = this.length;
        var tmp = this.substr(0, number);
        if (this.length > number) {
            tmp += "…";
        }
        return tmp;
    }
複製代碼

六、時間格式爲,xxxx 天,xxx分鐘前,日期prototype

複製代碼
    Date.prototype.Format = function(fmt, current) {

        if (current) {
            var diff = current - this.getTime();
            if (diff < 5 * 60 * 1000) {
                return "剛剛";
            }
            if (diff < 60 * 60 * 1000) {
                return (Math.floor(diff / (60 * 1000))) + "分鐘前";
            }
            if (diff < 24 * 60 * 60 * 1000) {
                return (Math.floor(diff / (60 * 60 * 1000))) + "小時前";
            }

            if (diff < 30 * 24 * 60 * 60 * 1000) {
                return (Math.floor(diff / (24 * 60 * 60 * 1000))) + "天前";
            }

            if (diff < 12 * 30 * 24 * 60 * 60 * 1000) {
                return (Math.floor(diff / (30 * 24 * 60 * 60 * 1000))) + "月前";
            }

            if (diff > 12 * 30 * 24 * 60 * 60 * 1000) {
                return (Math.floor(diff / (12 * 30 * 24 * 60 * 60 * 1000))) + "年前";
            }
        }

        var o = {
            "Y+": this.getFullYear(), //月份 
            "M+": this.getMonth() + 1, //月份 
            "d+": this.getDate(), //日 
            "h+": this.getHours(), //小時 
            "m+": this.getMinutes(), //分 
            "s+": this.getSeconds(), //秒 
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
            "S": this.getMilliseconds() //毫秒 
        };
        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
    };
複製代碼

七、解析URLcode

複製代碼
function parseUrl() {
            var arr = location.search.split('?')[1].split('&');
            var params = {};
            for (var i = 0, l = arr.length; i < l; i++) {
                var param = arr[i].split('=');
                params[param[0]] = param[1];
            }
            return params;
        }
複製代碼

八、獲取get參數orm

複製代碼
function getParameterByName(name) {
            name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
            var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
                results = regex.exec(location.search);
            return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
        }
複製代碼

 

九、函數節流,讓頻繁事件觸發更稀疏提升性能,例如及時搜索功能。使用方法爲fn 爲事件響應函數,delay 爲間隔時間,調用 throttle(fn,delay) 返回一個新的函數給事件便可blog

複製代碼
        function throttle(fn, delay) {
            var timer = null;
            return function() {
                var context = this,
                    args = arguments;
                clearTimeout(timer);
                timer = setTimeout(function() {
                    fn.apply(context, args);
                }, delay);
            };
        }
複製代碼

 

十、防止表單屢次提交,和9中同樣,返回一個新的函數

複製代碼
        /**
         * 防止屢次點擊函數
         *
         * fn 完成時調用回調
         *  function fn(event,end) {
         *       (typeof end === "function") && end(); // 操做完成
         *  }
         */function noRepeateTap(fn) {
            var $obj;
            return function(event) {
                $obj = $(this);
                if ($obj.data("loadding") === "true") {
                    return;
                }
                $obj.data("loadding", "true").addClass('loadding');
                fn.call(this, event, function end() {
                    $obj.data("loadding", "").removeClass('loadding');
                    return;
                });
            }
        }
複製代碼

 

第10個的使用例子

 

複製代碼
// 綁定事件
$(container).on('click', '.btn-cancel', noRepeateTap(cancel));


    // 事件響應函數
    function cancel(event, end) {
        event.preventDefault();
             // 模擬異步請求
              setTimeout(function(){
            end(); // 須要手動調用注入的完成函數,通知完成,函數自動添加loadding class 類,用於調整樣式,完成後自動移除
        },5000)
    }
複製代碼
相關文章
相關標籤/搜索