首页 > Web开发 > 详细

常用js函数

时间:2018-01-23 12:15:42      阅读:227      评论:0      收藏:0      [点我收藏+]

 /**   AJAX封装  原生js   **/
        ajax({
            url:"https://open.weixin.qq.com/connect/qrconnect", //请求地址
            type:"GET",   //请求方式
            data:{appid:"wx82670fae8b0fa28d",redirect_uri:"http://abc.lalabb.cn",response_type:"code",scope:"snsapi_login"},   // 请求参数
            datatype:"json",
            success:function(response,xml){
                // 成功后执行的代码
                console.log(response);
            },
            fail:function(status){
                // 失败后执行的代码
            }
        });

        function ajax(options){
            options = options || {};
            options.type = (options.type || "GET").toUpperCase();
            options.dataType = options.dataType || "json";
            var params = formatParams(options.data);
             //xhr 兼容IE6
             if(window.XMLHttpRequest){
                 var xhr = new XMLHttpRequest();
             }else{
                var xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘);
             }
             // 接收
            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    var status = xhr.status;
                    if(status>=200 && status < 300){
                        options.success && options.success(xhr.responseText, xhr.responseXML);
                    }else{
                        options.fail && options.fail(status);
                    }
                }
            }
            // 链接 / 发送
            if(options.type == "GET"){
                xhr.open("GET",options.url+"?"+params,true);
                xhr.send(null);
            }else if(options.type == "POST"){
                xhr.open("POST",options.url,true);
                // 设置表单提交时的内容类型
                xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                xhr.send(params);
            }
        }

        // 格式化参数
        function formatParams(data){
            var arr = [];
            for(var name in data){
                arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
            }
            arr.push(("v="+Math.random()).replace(".",""));
            return arr.join("&");
        }

/**   判断微信内置浏览器   **/
        function isWeiXin(){
            var ua = window.navigator.userAgent.toLowerCase();
            if(ua.match(/MicroMessenger/i) == ‘micromessenger‘){
                // 是微信浏览器执行
                alert(‘true‘);
            }else{
                // 其他浏览器执行
                alert(‘false‘);
            }
        }


/**   获取url参数   **/
function getUrlParam(name){
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
    var r = window.location.search.substr(1).match(reg);  //匹配目标参数
    if (r!=null) return unescape(r[2]); return null; //返回参数值
}



/**    原生js  get   **/
var XHR=null;  
if (window.XMLHttpRequest) {  
    // 非IE内核  
    XHR = new XMLHttpRequest();  
} else if (window.ActiveXObject) {  
    // IE内核,这里早期IE的版本写法不同,具体可以查询下  
    XHR = new ActiveXObject("Microsoft.XMLHTTP");  
} else {  
    XHR = null;  
}  
 
if(XHR){  
    XHR.open("GET", "ajaxServer.action");  
 
    XHR.onreadystatechange = function () {  
        // readyState值说明  
        // 0,初始化,XHR对象已经创建,还未执行open  
        // 1,载入,已经调用open方法,但是还没发送请求  
        // 2,载入完成,请求已经发送完成  
        // 3,交互,可以接收到部分数据  
 
        // status值说明  
        // 200:成功  
        // 404:没有发现文件、查询或URl  
        // 500:服务器产生内部错误  
        if (XHR.readyState == 4 && XHR.status == 200) {  
            // 这里可以对返回的内容做处理  
            // 一般会返回JSON或XML数据格式  
            console.log(XHR.responseText);  
            // 主动释放,JS本身也会回收的  
            XHR = null;  
        }  
    };  
    XHR.send();  
}  






/**    判断是否为手机浏览器    **/

var browser={
    versions:function(){
           var u = navigator.userAgent, app = navigator.appVersion;
           return {//移动终端浏览器版本信息
                trident: u.indexOf(‘Trident‘) > -1, //IE内核
                presto: u.indexOf(‘Presto‘) > -1, //opera内核
                webKit: u.indexOf(‘AppleWebKit‘) > -1, //苹果、谷歌内核
                gecko: u.indexOf(‘Gecko‘) > -1 && u.indexOf(‘KHTML‘) == -1, //火狐内核
                mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否为移动终端
                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                android: u.indexOf(‘Android‘) > -1 || u.indexOf(‘Linux‘) > -1, //android终端或者uc浏览器
                iPhone: u.indexOf(‘iPhone‘) > -1 || u.indexOf(‘Mac‘) > -1, //是否为iPhone或者QQHD浏览器
                iPad: u.indexOf(‘iPad‘) > -1, //是否iPad
                webApp: u.indexOf(‘Safari‘) == -1 //是否web应该程序,没有头部与底部
            };
         }(),
         language:(navigator.browserLanguage || navigator.language).toLowerCase()
}
// document.writeln("语言版本: "+browser.language);
// document.writeln(" 是否为移动终端: "+browser.versions.mobile);
// document.writeln(" ios终端: "+browser.versions.ios);
// document.writeln(" android终端: "+browser.versions.android);
// document.writeln(" 是否为iPhone: "+browser.versions.iPhone);
// document.writeln(" 是否iPad: "+browser.versions.iPad);
// document.writeln(navigator.userAgent);

/**    判断手机端还是pc端    **/
function browserRedirect() {
            var sUserAgent = navigator.userAgent.toLowerCase();
            var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
            var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";
            var bIsMidp = sUserAgent.match(/midp/i) == "midp";
            var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";
            var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";
            var bIsAndroid = sUserAgent.match(/android/i) == "android";
            var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";
            var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";
            document.writeln("您的浏览设备为:");
            if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {
                document.writeln("phone");
            } else {
                document.writeln("pc");
            }
        }

        browserRedirect();


// 动态加载外部js文件
var flag = true;
if( flag ){
    loadScript( "js/index.js" );
};
function loadScript( url ){
    var script = document.createElement( "script" );
    script.type = "type/javascipt";
    script.src = url;
    document.getElementsByTagName( "head" )[0].appendChild( script );
};

// 动态加载外部css样式
if( flag ){
    loadCss( "css/base.css" );
};
function loadCss( url ){
    var link = document.createElement( "link" );
    link.type = "text/css";
    link.rel = "stylesheet";
    link.href = url;
    document.getElementsByTagName( "head" )[0].appendChild( link );
};


// jquery 动态加载js后执行callback
<script src="/lib/js/jquery.min.js"></script>
<script>
     var loadScripts= function (files, callback) {
        var file = files.shift();
        $.getScript(file, function () {
            if (files.length) {
                loadScripts(files, callback);
            } else {
                if (callback) {
                    callback();
                }
            }
        });
    }

    loadScripts([‘test.js‘],function(){
        alert(str);
    })
</script>

//   jsonp方式
function jsonp(config) {
    var options = config || {};   // 需要配置url, success, time, fail四个属性
    var callbackName = (‘jsonp_‘ + Math.random()).replace(".", "");
    var oHead = document.getElementsByTagName(‘head‘)[0];
    var oScript = document.createElement(‘script‘);
    oHead.appendChild(oScript);
    window[callbackName] = function(json) {  //创建jsonp回调函数
        oHead.removeChild(oScript);
        clearTimeout(oScript.timer);
        window[callbackName] = null;
        options.success && options.success(json);   //先删除script标签,实际上执行的是success函数
    };
    oScript.src = options.url + ‘?‘ + callbackName;    //发送请求
    if (options.time) {  //设置超时处理
        oScript.timer = setTimeout(function () {
            window[callbackName] = null;
            oHead.removeChild(oScript);
            options.fail && options.fail({ message: "超时" });
        }, options.time);
    }
    };
// 使用方法:
jsonp({
    url: ‘/b.com/b.json‘,
    success: function(d){
        //数据处理
    },
    time: 5000,
    fail: function(){
        //错误处理
    }      
    });

// 调用视频全屏模式
function videoFull(docElm){
    console.log("全屏模式");
    // var docElm = document.getElementById(id);
    //W3C
    if(docElm.requestFullscreen){
        docElm.requestFullscreen();
    }
    //FireFox
    else if (docElm.mozRequestFullScreen) {
        docElm.mozRequestFullScreen();
    }
    //Chrome等
    else if (docElm.webkitRequestFullScreen) {
        docElm.webkitRequestFullScreen();
    }
    //IE11
    else if (elem.msRequestFullscreen) {
        elem.msRequestFullscreen();
    }
}
// 退出全屏
function closeVideoFull(docElm){
    if (document.exitFullscreen) {
        document.exitFullscreen();
    }else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
    }else if (document.webkitCancelFullScreen) {
        document.webkitCancelFullScreen();
    }else if (document.msExitFullscreen) {
        document.msExitFullscreen();
    }
}

// 截取固定数量的字符串
cutStr(str,36,6,10)   6个字或10字母和数字
function cutStr(str,codeNum,textNum,num){
    var len = escape(str).length;
    if(len>codeNum){
        var s = str.substr(0,textNum)+"...";
        return s;
    }else if(len<codeNum){
        if(str.length>num){
            var s = str.substr(0,num)+"...";
            return s;
        }else{
            return str;
        }
        
    }else{
        return str;
    }
};

// 去掉时间 2016-11-28 14:27:52 的秒
function cutTime(str){
    str = str.replace(/-/g,"/");
    var date = new Date(str );
    var timeStamp = date.getTime();
    var m = date.getMonth() + 1;
    var d = date.getDate();
    var start = str.indexOf(" ") + 1;
    var end = str.lastIndexOf(":");
    var newStr = m + "月" + d + "日" + str.substring(start,end);
    // 时间格式 11月28日14:27   // 时间戳
    return {"timeStr":newStr,"timeStamp":timeStamp};
}

// 无刷新修改url
   function changeURL(){
                var url = document.getElementById(‘url‘).value;
                window.history.pushState({},0,‘http://‘+window.location.host+‘/‘+url);      
           }

// 按照汉语拼音字母排序
var array = [‘武汉‘, ‘北京‘, ‘上海‘, ‘天津‘];
array = array.sort(
    function compareFunction(param1, param2) {
        return param1.localeCompare(param2);
    }
);
console.log(array);

//获取页面文件名和参数
function GetPageurl(){
    var url=window.location.href;//获取完整URL地址
    var tmp= new Array();//临时变量,用于保存分割字符串
    tmp=url.split("/");//按照"/"分割
    var cc = tmp[tmp.length-1];//获取最后一部分,即文件名和参数
    tmp=cc.split("?");//把参数和文件名分割开
    return tmp[0];//返回值
}

// 判断是否安装flash
    function flashChecker() {  
        var hasFlash = 0;         //是否安装了flash  
        var flashVersion = 0; //flash版本  
        var isIE = /*@cc_on!@*/0;      //是否IE浏览器  
 
        if (isIE) {  
            var swf = new ActiveXObject(‘ShockwaveFlash.ShockwaveFlash‘);  
            if (swf) {  
                hasFlash = 1;  
                VSwf = swf.GetVariable("$version");  
                flashVersion = parseInt(VSwf.split(" ")[1].split(",")[0]);  
            }  
        } else {  
            if (navigator.plugins && navigator.plugins.length > 0) {  
                var swf = navigator.plugins["Shockwave Flash"];  
                if (swf) {  
                    hasFlash = 1;  
                    var words = swf.description.split(" ");  
                    for (var i = 0; i < words.length; ++i) {  
                        if (isNaN(parseInt(words[i]))) continue;  
                        flashVersion = parseInt(words[i]);  
                    }  
                }  
            }  
        }  
        return { f: hasFlash, v: flashVersion };  
    }  
 
    var fls = flashChecker();  
    var s = "";  
    if (fls.f) document.write("您安装了flash,当前flash版本为: " + fls.v + ".x");  
    else document.write("您没有安装flash");  

// 简单提示弹出层
function dialog(str){
    var layer=document.createElement("div");
    layer.id="layer";
    layer.innerHTML = str;
    var style={
        "background": "rgba(0, 0, 0, 0.4)",
        "border-radius": "5px",
        "bottom": "0",
        "color": "#fff",
        "font-size": "0.35rem",
        "height": "1rem",
        "left": "0",
        "line-height": "1rem",
        "margin": "auto",
        "position": "fixed",
        "right": "0",
        "text-align": "center",
        "top": "0",
        "width": "2.8rem",
        "z-index": "999"
    }
    for(var i in style){
        layer.style[i]=style[i];   
    }
    if(document.getElementById("layer")==null){
        document.body.appendChild(layer);
        setTimeout("document.body.removeChild(layer)",1500);
    }
}


=========================================================================================================================

jquery ajax函数

我自己封装了一个ajax的函数,代码如下:
var Ajax = function(url, type success, error) {
    $.ajax({
        url: url,
        type: type,
        dataType: ‘json‘,
        timeout: 10000,
        success: function(d) {
            var data = d.data;
            success && success(data);
        },
        error: function(e) {
            error && error(e);
        }
    });
    };
// 使用方法:
Ajax(‘/data.json‘, ‘get‘, function(data) {
    console.log(data);
    });
jsonp方式

有时候我们为了跨域,要使用jsonp的方法,我也封装了一个函数:
function jsonp(config) {
    var options = config || {};   // 需要配置url, success, time, fail四个属性
    var callbackName = (‘jsonp_‘ + Math.random()).replace(".", "");
    var oHead = document.getElementsByTagName(‘head‘)[0];
    var oScript = document.createElement(‘script‘);
    oHead.appendChild(oScript);
    window[callbackName] = function(json) {  //创建jsonp回调函数
        oHead.removeChild(oScript);
        clearTimeout(oScript.timer);
        window[callbackName] = null;
        options.success && options.success(json);   //先删除script标签,实际上执行的是success函数
    };
    oScript.src = options.url + ‘?‘ + callbackName;    //发送请求
    if (options.time) {  //设置超时处理
        oScript.timer = setTimeout(function () {
            window[callbackName] = null;
            oHead.removeChild(oScript);
            options.fail && options.fail({ message: "超时" });
        }, options.time);
    }
    };
// 使用方法:
jsonp({
    url: ‘/b.com/b.json‘,
    success: function(d){
        //数据处理
    },
    time: 5000,
    fail: function(){
        //错误处理
    }      
    });

常用正则验证表达式:

*****手机号验证
var validate = function(num) {
    var exp = /^1[3-9]\d{9}$/;
    return exp.test(num);
    };

*****身份证号验证
var exp = /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/;

*****ip验证
var exp = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;


常用js函数:

**********返回顶部
$(window).scroll(function() {
    var a = $(window).scrollTop();
    if(a > 100) {
        $(‘.go-top‘).fadeIn();
    }else {
        $(‘.go-top‘).fadeOut();
    }
    });
$(".go-top").click(function(){
    $("html,body").animate({scrollTop:"0px"},‘600‘);
    });


**********阻止冒泡
function stopBubble(e){
    e = e || window.event;  
    if(e.stopPropagation){
        e.stopPropagation();  //W3C阻止冒泡方法  
    }else {  
        e.cancelBubble = true; //IE阻止冒泡方法  
    } 

}


**********全部替换replaceAll
var replaceAll = function(bigStr, str1, str2) {  //把bigStr中的所有str1替换为str2
    var reg = new RegExp(str1, ‘gm‘);
    return bigStr.replace(reg, str2);
    }


**********获取浏览器url中的参数值
var getURLParam = function(name) {
    return decodeURIComponent((new RegExp(‘[?|&]‘ + name + ‘=‘ + ‘([^&;]+?)(&|#|;|$)‘, "ig").exec(location.search) || [, ""])[1].replace(/\+/g, ‘%20‘)) || null;
    };


*********深度拷贝对象
function cloneObj(obj) {
    var o = obj.constructor == Object ? new obj.constructor() : new obj.constructor(obj.valueOf());
    for(var key in obj){
        if(o[key] != obj[key] ){
            if(typeof(obj[key]) == ‘object‘ ){
                o[key] = mods.cloneObj(obj[key]);
            }else{
                o[key] = obj[key];
            }
        }
    }
    return o;
    }


********数组去重
var unique = function(arr) {
    var result = [], json = {};
    for (var i = 0, len = arr.length; i < len; i++){
        if (!json[arr[i]]) {
            json[arr[i]] = 1;
            result.push(arr[i]);  //返回没被删除的元素
        }
    }
    return result;
    };


**********判断数组元素是否重复
var isRepeat = function(arr) {  //arr是否有重复元素
    var hash = {};
    for (var i in arr) {
        if (hash[arr[i]]) return true;
        hash[arr[i]] = true;
    }
    return false;
    };


**********生成随机数
function randombetween(min, max){
    return min + (Math.random() * (max-min +1));
    }


************操作cookie
own.setCookie = function(cname, cvalue, exdays){
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = ‘expires=‘+d.toUTCString();
    document.cookie = cname + ‘=‘ + cvalue + ‘; ‘ + expires;
    };
own.getCookie = function(cname) {
    var name = cname + ‘=‘;
    var ca = document.cookie.split(‘;‘);
    for(var i=0; i< ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ‘ ‘) c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
    }
    return ‘‘;
    };

*************知识技巧总结

数据类型

underfined、null、0、false、NaN、空字符串。他们的逻辑非结果均为true。

闭包格式
好处:避免命名冲突(全局变量污染)。
(function(a, b) {
    console.log(a+b);  //30
    })(10, 20);


截取和清空数组
var arr = [12, 222, 44, 88];
arr.length = 2;   //截取,arr = [12, 222];  
arr.length = 0;   //清空,arr will be equal to [].


获取数组的最大最小值
var numbers = [5, 45822, 120, -215];
var maxInNumbers = Math.max.apply(Math, numbers);   //45822
var minInNumbers = Math.min.apply(Math, numbers);   //-215


浮点数计算问题
0.1 + 0.2 == 0.3   //false
为什么呢?因为0.1+0.2等于0.30000000000000004。JavaScript的数字都遵循IEEE 754标准构建,在内部都是64位浮点小数表示。可以通过使用toFixed()来解决这个问题。

数组排序sort函数
var arr = [1, 5, 6, 3];    //数字数组
arr.sort(function(a, b) {
    return a - b;   //从小到大排
    return b - a;   //从大到小排
    return Math.random() - 0.5;   //数组洗牌
    });
var arr = [{   //对象数组
    num: 1,
    text: ‘num1‘
    }, {
    num: 5,
    text: ‘num2‘
    }, {
    num: 6,
    text: ‘num3‘
    }, {
    num: 3,
    text: ‘num4‘
    }];   
arr.sort(function(a, b) {
    return a.num - b.num;   //从小到大排
    return b.num - a.num;   //从大到小排
    });


对象和字符串的转换
var obj = {a: ‘aaa‘, b: ‘bbb‘};
var objStr = JSON.stringify(obj);    // "{"a":"aaa","b":"bbb"}"
var newObj = JSON.parse(objStr);     // {a: "aaa", b: "bbb"}

 

常用js函数

原文:https://www.cnblogs.com/gzh529/p/8334961.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!