js 的常用工具类库

转载于小米某平台js

/**
 * 
 * @desc 常用工具类库,为widget、plugin等功能性库提供依赖
 *
 */
;(function (root) {

    "use strict";

    var _util = root.util = {};
    //缓存原型句柄
    var ArrayProto = Array.prototype, ObjProto = Object.prototype, FunProto = Function.prototype;
    //缓存原型句柄中的常用方法
    var slice = ArrayProto.slice,
        toString = ObjProto.toString,
        hasOwnProperty = ObjProto.hasOwnProperty;
    //原生方法 ECMAScript 5
    var nativeIsArray = Array.isArray,
        nativeKeys = Array.keys;

    /**
     * @method isString
     * @param obj
     * @returns {boolean}
     * @desc 判断传入对象是否是字符串类型
     */
    _util.isString = function (obj) {
        return toString.call(obj) == '[object String]';
    };

    /**
     * @method isArray
     * @type {Function|*|_.isArray}
     * @desc 判断当前对象是否是数组类型
     */
    _util.isArray = nativeIsArray || function (obj) {
        return toString.call(obj) == '[object Array]';
    };

    /**
     * @method isObject
     * @param obj
     * @returns {boolean}
     * @desc 判断当前对象是否是对象类型
     */
    _util.isObject = function (obj) {
        var type = typeof obj;
        return type === 'function' || type === 'object' && !!obj;
    };

    /**
     * @method isDate
     * @param obj!
     * @returns {boolean}
     * @desc 判断当前对象是否是时间类型
     */
    _util.isDate = function (obj) {
        return toString.call(obj) == '[object Date]';
    };

    /**
     * @method getQueryVal
     * @param name 参数名
     * @param url (可选)如果从当前页面URL中获取参数值,url参数可以不用指定
     * @returns {string}
     * @desc 根据参数名从当前地址或指定地址中获取参数值
     */
    _util.getQueryVal = function (name,url) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r;
        //如果url有指定,那么从指定的地址中取值
        if(url && url.indexOf('?') != -1){
            r = url.split('?')[1].match(reg);
        }else{
            //默认从当前页面地址中取值
            r = window.location.search.substr(1).match(reg);//r = ['匹配到的主串', $1, $2, $3, index, input]$1..9为正则表达式圆括号匹配的子串
        }
        if (r != null) return decodeURIComponent(r[2]);
        return '';
    };

    /**
     * @method trim
     * @param obj
     * @returns {string}
     * @desc 清除字符串两边的空白字符
     */
    _util.trim = function (obj) {
        return _util.isString(obj) ? obj.replace(/^\s+|\s+$/g, '') : '';
    };

    /**
     * @method extend
     * @param obj
     * @returns {*}
     * @desc 对象属性的扩展
     * @example _util.extend({aa:'abc',cc:'like that'},{aa:'cba',bb:'like this'})
     *          结果:{aa:'cba',bb:'like this',cc:'like that'}
     */
    _util.extend = function (obj) {
        if (!_util.isObject(obj)) {
            return obj;
        }
        var source, prop;
        for (var i = 0, l = arguments.length; i < l; i++) {
            source = arguments[i];
            for (prop in source) {
                if (hasOwnProperty.call(source, prop)) {
                    obj[prop] = source[prop];
                }
            }
        }
        return obj;
    };

    /**
     * @method isWXPlatform
     * @returns {boolean}
     * @desc 判断当前页面是否在微信平台中
     */
    _util.isWXPlatform = function(){
        return /MicroMessenger/i.test(navigator.userAgent);
    };


    /**
     * @method ajaxReq
     * @param _url 请求地址
     * @param _type 请求类型(可选)
     * @param _param 请求参数
     * @param _successCb 请求成功后要执行的回调方法
     * @param _errCb 请求失败要执行的回调方法
     * @desc 封装的ajax请求
     */
    _util.ajaxReq = function(_url,_type,_param,_successCb,_errCb){
        var option = {
            type:_type ||'get',
            url:_url,
            data:_param,
            dataType:'json',
            cache:false,
            timeout:5000,
            success:function(res,status,xhr){
                if(!res){
                    _errCb &&_errCb(null);
                    return;
                }
                if(res.code!='200'){
                    _errCb &&_errCb(res);
                    return;
                }
                _successCb && _successCb(res);
            },
            error:function(xhr,ts,err){
                _errCb && _errCb(err);
            }
        };
        $.ajax(option);
    };

    /**
     * @method checkOperaSys
     * @returns {string}
     * @desc 判断当前客户端系统类型
     */
    _util.checkOperaSys = function(){
        if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
            return 'ios'
        } else if (/(Android)/i.test(navigator.userAgent)) {
            return 'android'
        }
        return 'pc'
    };

    /**
     * @method 创建遮罩
     * @param _conf 遮罩的CSS样式 CSS类名或者JS对象{property: value}
     * @param _content 遮罩内容
     * @param _registerEv 遮罩内容绑定事件
     */
    _util.mask = function (_conf, _content, _registerEv) {
        var
            $mask = $('<div id="bg_mask"></div>'),
            $maskStyle = {
                "position": "absolute",
                "left": 0,
                "top": 0,
                "height": '100%',
                'width': '100%',
                "background": "rgba(0, 0, 0, .7)",
                'z-index': 9999
            };
        if (!!_conf) {
            if (_util.isObject(_conf)) {
                _util.extend($maskStyle, _conf);
            } else if (_util.isString(_conf)){
                $mask.addClass(_conf);
            }
        }
        $mask.css($maskStyle);
        $(document.body).css({
            'position': 'relative'
        }).append($mask);

        /***************** 开始向遮罩添加内容 ****************/
        if (!!_content && _util.isArray(_content)) {
            for (var i= 0, size=_content.length; i<size; i++) {
                var $content = '';
                if (_util.isArray(_content[i].content)) {
                    for (var j= 0, len=_content[i].content.length; j<len; j++) {
                        $content += _content[i].content[j];
                    }
                } else {
                    $content = _content[i].content;
                }
                $(_content[i].parentNodeSelector).append($(_content[i].tag).addClass(_content[i].className).html($content));
            }
        }

        /* 防止点透 */
        $mask.on('touchmove', function (event) {
            event.preventDefault();
            event.stopPropagation();
        });

        _util.registerEvent(_registerEv);
    };

    /**
     * @method registerEvent
     * @param _evs 元素监听事件配置对象
     * @desc 注册事件
     */
    _util.registerEvent = function (_evs) {
        if (!!_evs && _util.isArray(_evs)) {
            for (var i= 0, size=_evs.length; i<size; i++) {
                if (_evs[i].eventType === 'swipe') {
                    $(_evs[i].selector).swipe({
                        tap: _evs[i].listener
                    });
                } else if (_evs[i].eventType === 'touch') {
                    $(_evs[i].selector).touch({
                        tap: _evs[i].listener
                    });
                } else {
                    $(_evs[i].selector).on(_evs[i].eventType, _evs[i].listener);
                }
            }
        }
    };

})(window.mi || (window.mi = {}));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值