JS常用公共方法封裝

                                               _ooOoo_
                                              o8888888o
                                              88" . "88
                                              (| -_- |)
                                              O\  =  /O
                                           ____/`---'\____
                                         .'  \\|     |//  `.
                                        /  \\|||  :  |||//  \
                                       /  _||||| -:- |||||-  \
                                       |   | \\\  -  /// |   |
                                       | \_|  ''\---/''  |   |
                                       \  .-\__  `-`  ___/-. /
                                     ___`. .'  /--.--\  `. . __
                                  ."" '<  `.___\_<|>_/___.'  >'"".
                                 | | :  `- \`.;`\ _ /`;.`/ - ` : | |
                                 \  \ `-.   \_ __\ /__ _/   .-` /  /
                            ======`-.____`-.___\_____/___.-`____.-'======
                                               `=---='
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


/*****************************封裝一些常用的方法,有一些方法可能不夠完善,後續有待優化!!*****************************/


var Common = (function(NS, $) {
    NS['cookie'] = {
        /**
         * 設置cookie
         * @param name cookie名稱
         * @param value cookie值
         * @param iDay cookie的時間
         */
        setCookie: function(name, value, iDay) {
            var oDate = new Date();
            oDate.setDate(oDate.getDate() + iDay);
            document.cookie = name + '=' + value + ';expires=' + oDate;
        },
        /**
         * 獲取cookie
         * @param name cookie名稱
         * @returns
         */
        getCookie: function(name) {
            var arr = document.cookie.split('; ');
            for (var i = 0; i < arr.length; i++) {
                var arr2 = arr[i].split('=');
                if (arr2[0] == name) {
                    return arr2[1];
                }
            }
            return '';
        },
        /**
         * 刪除cookie
         * @param name cookie名稱
         */
        removeCookie: function(name) {
            setCookie(name, 1, -1);
        }

    };
    /**
     * 其他方法
     */
    NS['other'] = {
        /**
         * 檢測密碼強度
         * @param str 字符串 
         * @returns 1:密碼弱 2:密碼中等 3:密碼強 4:密碼很強
         */
        checkPwd: function(str) {
            var nowLv = 0;
            if (str.length < 6) {
                return nowLv
            };
            if (/[0-9]/.test(str)) {
                nowLv++
            };
            if (/[a-z]/.test(str)) {
                nowLv++
            };
            if (/[A-Z]/.test(str)) {
                nowLv++
            };
            if (/[\.|-|_]/.test(str)) {
                nowLv++
            };
            return nowLv;
        },
        /**
         * 獲取URL參數
         * @param url 地址
         * @returns 例:getUrlPrmt("http://www.baidu.com?id=1&nam=張三&uid=12345654321&type=1,2,3"),結果{id: "1", nam: "張三", uid: "12345654321", type: "1,2,3"}
         */
        getUrlPrmt: function(url) {
            url = url ? url : window.location.href;
            let _pa = url.substring(url.indexOf('?') + 1),
                _arrS = _pa.split('&'),
                _rs = {};
            for (var i = 0, _len = _arrS.length; i < _len; i++) {
                let pos = _arrS[i].indexOf('=');
                if (pos == -1) {
                    continue;
                }
                let name = _arrS[i].substring(0, pos),
                    value = window.decodeURIComponent(_arrS[i].substring(pos + 1));
                _rs[name] = value;
            }
            return _rs;
        },
        /**
         * 返回指定某個區間的一個數字(可以不傳參,不傳就返回0-255之間的數;可以只傳一個,返回0到傳入的這個數字之間的某個值)
         * @param n1 開始區間 例:5
         * @param n2 結束區間 例:10
         * @returns 返回這個區間的某個隨機值
         */
        randomNumber: function(n1, n2) {
            if (arguments.length === 2) {
                return Math.round(n1 + Math.random() * (n2 - n1));
            } else if (arguments.length === 1) {
                return Math.round(Math.random() * n1)
            } else {
                return Math.round(Math.random() * 255)
            }
        },
        /**
         * 隨機產生某個顏色
         * @returns {String} 顏色 例:rgb(250,82,49)
         */
        randomColor: function() {
            //randomNumber是上面定義的函數
            //寫法1
            return 'rgb(' + randomNumber(255) + ',' + randomNumber(255) + ',' + randomNumber(255) + ')';

            //寫法2
            return '#' + Math.random().toString(16).substring(2).substr(0, 6);

            //寫法3
            var color = '#';
            for (var i = 0; i < 6; i++) {
                color += '0123456789abcdef' [randomNumber(15)];
            }
            return color;
        }
    };
    /**
     * 數組相關方法
     */
    NS['arr'] = {
        /**
         * 數組去重
         * 用的是Array的from方法
         * @param arr 數組
         * @returns 去重後的數組
         */
        removeRepeatArray: function(arr) {
            return Array.from(new Set(arr))
        },
        /**
         * 將數組亂序輸出
         * @param arr 數組
         * @returns 打亂後的數組
         */
        upsetArr: function(arr) {
            return arr.sort(function() { return Math.random() - 0.5 });
        },
        /**
         * 獲取數組的最大值,最小值,只針對數字類型的數組
         * @param arr 數組
         * @param type 0:最小值,1:最大值
         * @returns
         */
        compareArr: function(arr, type) {
            if (type == 1) {
                return Math.max.apply(null, arr);
            } else {
                return Math.min.apply(null, arr);
            }
        },
        /**
         * 得到數組的和,只針對數字類型數組
         * @param arr 數組
         * @returns {Number} 和
         */
        sumArr: function(arr) {
            var sumText = 0;
            for (var i = 0, len = arr.length; i < len; i++) {
                sumText += arr[i];
            }
            return sumText
        },
        /**
         * 數組的平均值,只針對數字類型數組,小數點可能會有很多位,這裏不做處理,處理了使用就不靈活了!
         * @param arr 數組
         * @returns {Number} 平均值
         */
        covArr: function(arr) {
            var sumText = sumArr(arr);
            var covText = sumText / arr.length;
            return covText;
        },
        /**
         * 隨機獲取數組中的某個元素
         * @param arr 數組
         * @returns 隨機獲取的值
         */
        randomOne: function(arr) {
            return arr[Math.floor(Math.random() * arr.length)];
        },
        /**
         * 返回某個元素在數組中出現的次數
         * @param arr 數組 
         * @param ele 要查找的元素
         * @returns {Number} 出現的次數
         */
        getEleCount: function(arr, ele) {
            var num = 0;
            for (var i = 0, len = arr.length; i < len; i++) {
                if (ele == arr[i]) {
                    num++;
                }
            }
            return num;
        },
        /**
         * 簡單數組排序,針對數字數組
         * @param type 1:降序,0:升序
         */
        sortArr: function(arr, type) {
            if (type == 1) {
                //降序
                arr.sort(function(a, b) {
                    return b - a;
                });
            } else {
                arr.sort(function(a, b) {
                    return a - b;
                });
            }
            return arr;
        },
        sortObjectArr: function(arr, type) {
            if (type == 1) {
                arr.sort(function(a, b) {
                    if (a.age > b.age) return 1;
                    if (a.age < b.age) return -1;
                    if (a.age = b.age) return 0;
                });
            } else {
                arr.sort(function(a, b) {
                    if (a.age > b.age) return -1;
                    if (a.age < b.age) return 1;
                    if (a.age = b.age) return 0;
                });
            }
            return arr;
        }
    };
    NS['time'] = {
        /**
         * 倒計時(默認開始時間爲當前時間)
         * @param endTime 結束時間
         * @returns 例:剩餘時間1天 16小時 45 分鐘41 秒
         */
        getEndTime: function(endTime) {
            var startDate = new Date(); //開始時間,當前時間
            var endDate = new Date(endTime); //結束時間,需傳入時間參數
            var t = endDate.getTime() - startDate.getTime(); //時間差的毫秒數
            var d = 0,
                h = 0,
                m = 0,
                s = 0;
            if (t >= 0) {
                d = Math.floor(t / 1000 / 3600 / 24);
                h = Math.floor(t / 1000 / 60 / 60 % 24);
                m = Math.floor(t / 1000 / 60 % 60);
                s = Math.floor(t / 1000 % 60);
            }
            return "剩餘時間" + d + "天 " + h + "小時 " + m + " 分鐘" + s + " 秒";
        }
    };
    /*
     * 加密解密Common.base64.base64Encode(input)
     */
    NS['base64'] = {
        //base64加密函數
        base64Encode: function(input) {
            var rv = encodeURIComponent(input);
            rv = unescape(rv);
            rv = window.btoa(rv);
            return rv;
        },
        //base64解密函數
        base64Decode: function(input) {
            var rv = window.atob(input);
            rv = escape(rv);
            rv = decodeURIComponent(rv);
            return rv;
        }
    };
    /*
     * 字符串處理的公共方法
     */
    NS['str'] = {
        /**
         * 去除字符串空格 
         * @param str 要處理的字符串
         * @param type 1:所有空格 2:前後空格 3:前空格 4:後空格
         */
        strTrim: function(str, type) {
            switch (type) {
                case 1:
                    return str.replace(/\s+/g, "");
                case 2:
                    return str.replace(/(^\s*)|(\s*$)/g, "");
                case 3:
                    return str.replace(/(^\s*)/g, "");
                case 4:
                    return str.replace(/(\s*$)/g, "");
                default:
                    return str;
            }
        },
        /**
         * 字母大小寫切換
         * @param str 要處理的字符串
         * @param type 1:首字母大寫 2:首頁母小寫 3:大小寫轉換 4:全部大寫 5:全部小寫
         */
        strChangeCase: function(str, type) {
            function ToggleCase(str) {
                var itemText = ""
                str.split("").forEach(
                    function(item) {
                        if (/^([a-z]+)/.test(item)) {
                            itemText += item.toUpperCase();
                        } else if (/^([A-Z]+)/.test(item)) {
                            itemText += item.toLowerCase();
                        } else {
                            itemText += item;
                        }
                    });
                return itemText;
            }

            switch (type) {
                case 1:
                    return str.replace(/^(\w)(\w+)/, function(v, v1, v2) {
                        return v1.toUpperCase() + v2.toLowerCase();
                    });
                case 2:
                    return str.replace(/^(\w)(\w+)/, function(v, v1, v2) {
                        return v1.toLowerCase() + v2.toUpperCase();
                    });
                case 3:
                    return ToggleCase(str);
                case 4:
                    return str.toUpperCase();
                case 5:
                    return str.toLowerCase();
                default:
                    return str;
            }
        },
        /**
         * 字符串替換
         * @param str 字符串
         * @param aFindText 要替換的字符
         * @param aRepText 替換成什麼
         */
        replaceAll: function(str, aFindText, aRepText) {
            raRegExp = new RegExp(aFindText, "g");
            return str.replace(raRegExp, aRepText);
        },
        /**
         * 查找某個字符或字符串在另一個字符串中出現的次數
         * @param str 字符串
         * @param strSplit 要查找的字符或字符串
         * @returns {Number} 返回出現的次數
         * 例:countStr("klsdjflds","s") 返回2
         */
        countStr: function(str, strSplit) {
            return str.split(strSplit).length - 1
        }
    };
    /*
     * 價格模塊
     */
    NS['price'] = {
        /*
         *@名稱:  switch 切換價格
         *@參數:  float usAmount 美元價格
         *       float rate 匯率
         *@描述:  使用方法TT_GET('price').switch('價格', '匯率');
         *@返回:  float
         */
        'switch': function(usAmount, rate) {
            var _curr = NS.cookie.get("TT_CURR");
            if (_curr == "JPY") {
                var price = Math.round((usAmount * rate * 10000 + 1) / 10000);
            } else {
                var price = (Math.round((usAmount * rate * 1000000 + 1) / 10000) / 100).toFixed(2);
            }
            return price;
        }
    };
    /*
     * ajax 語言參數
     */
    NS['lactions'] = {
        /*
         *@名稱:  getId 獲取語言ID
         *@參數:  string code 語言代碼
         *@描述:  使用方法TT_NS.lactions.lang();
         *@返回:  float
         */
        'lang': function() {
            var locations = window.location.href;
            var lang = /\/es\/|\/ru\/|\/de\/|\/fr\/|\/it\/|\/ar\/|\/pl\/|\/jp\/|\/pt\/|\/en\//;
            lang = lang.test(locations);
            if (lang == true) {
                lang = locations.split("/");
                return '&lang=' + lang[3];
            } else {
                return '';
            }
        },
        /*
         *@名稱:  getId 獲取語言ID
         *@參數:  string code 語言代碼
         *@描述:  使用方法TT_NS.lactions.langShort();
         *@返回:  float
         */
        'langShort': function() {
            var locations = window.location.href;
            var lang = /\/es\/|\/ru\/|\/de\/|\/fr\/|\/it\/|\/ar\/|\/pl\/|\/jp\/|\/pt\/|\/en\//;
            lang = lang.test(locations);
            if (lang == true) {
                lang = locations.split("/");
                return lang[3];
            } else {
                return '';
            }
        }
    };
    NS['AD_TOP'] = {
        /**
         * @functionName: 底部提示框
         * @param:        無
         * @description:  底部廣告條,當用戶點擊關閉按鈕的時候,記錄cookie值,關掉之後不再顯示,cookie的有效時間爲一天。
         * @return:       無
         */
        'adCookie': '',
        'init': function() {
            var _this = this;
            _this.showTopAD("#close_topad");
            _this.closeTopAd();
        },
        'setCookie': function(name, value, day) {
            var _day = day || 7;
            var oDate = new Date();
            oDate.setDate(oDate.getDate() + _day);
            document.cookie = name + '=' + value + '; expires =' + oDate;
        },
        'closeTopAd': function() {
            var _this = this;
            $("#close_topad").click(function() {
                _this.adCookie = $(this).parent().find("img").attr('alt');
                _this.setCookie('topAD', _this.adCookie, 1);
                $(this).parent().hide();
            })
        },
        'showTopAD': function(obj) {
            var _this = this;
            _this.adCookie = $(obj).parent().find("img").attr('alt');
            var ckTopAd = NS['cookie'].get('topAD');
            if (ckTopAd == _this.adCookie) {
                $(obj).parent().hide();
            } else {
                $(obj).parent().show();
            }
        }
    };
    //檢查email
    NS['check'] = {
        'email': function(email) {
            var reg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
            var isok = reg.test(email);
            if (!isok) {
                return false;
            } else {
                return true;
            }
        }
    };

    return NS;
})(window.Common || {}, jQuery);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章