打造自己的javascript库

  作为一线程序猿,要想少加班、抽空把妹,就要想办法提高工作效率。这里提一个小点,我们在业务开发过程中,经常会重复用到 日期格式化url参数转对象浏览器类型判等一类函数,这些工具类函数,基本上在每个项目都会用到,为避免不同项目多次复制粘贴的麻烦,我们可以统一封装,可以定义自己的*.js文件或发布到 npm,以提高开发效率。

// 1,获取滚动条至顶部的距离
    // 返回num

1 function getScrollTop(){
2         return (document.documentElement &&
3                 document.documentElement.scrollTop) ||
4                 document.body.scrollTop
5     }

// 2,随机生成颜色
    // 返回str

1    function randomColor(){
2         return  ‘#‘ +
3         (function(color){
4             return (color +=  ‘0123456789abcdef‘[Math.floor(Math.random()*16)])
5               && (color.length == 6) ?  color : arguments.callee(color);
6           })(‘‘);
7     }

// 3,获取浏览器类型和版本
    // 返回str

 1  function getExplore() {
 2         var sys = {},
 3                 ua = navigator.userAgent.toLowerCase(),
 4                 s;
 5                 (s = ua.match(/rv:([\d.]+)\) like gecko/)) ? sys.ie = s[1]:
 6                 (s = ua.match(/msie ([\d\.]+)/)) ? sys.ie = s[1] :
 7                 (s = ua.match(/edge\/([\d\.]+)/)) ? sys.edge = s[1] :
 8                 (s = ua.match(/firefox\/([\d\.]+)/)) ? sys.firefox = s[1] :
 9                 (s = ua.match(/(?:opera|opr).([\d\.]+)/)) ? sys.opera = s[1] :
10                 (s = ua.match(/chrome\/([\d\.]+)/)) ? sys.chrome = s[1] :
11                 (s = ua.match(/version\/([\d\.]+).*safari/)) ? sys.safari = s[1] : 0;
12
13                 // 根据关系进行判断
14                 if(sys.ie) return (‘IE: ‘+ sys.ie)
15                 if (sys.edge) return (‘EDGE: ‘ + sys.edge)
16                 if (sys.firefox) return (‘Firefox: ‘ + sys.firefox)
17                 if (sys.chrome) return (‘Chrome: ‘ + sys.chrome)
18                 if (sys.opera) return (‘Opera: ‘ + sys.opera)
19                 if (sys.safari) return (‘Safari: ‘+ sys.safari)
20                 return ‘Unkonwn‘
21     }
1   //4 指定范围随机数
2     //返回num
3     function randomNum(min, max) {
4         return Math.floor(min + Math.random() * (max - min));
5     } 
1 // 5判断是否为邮箱地址
2     // 返回true/false
3     function isEmail(str) {
4         return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(str);
5     }
1    // 6判断是否为省份证
2     // 返回true/false
3     function isIdCard(str) {
4     return /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/.test(str)
5     }
1     // 7判断是否为手机号
2      // 返回true/false
3     function isPhoneNum(str) {
4         return /^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/.test(str)
5     }
1    // 8判断是否为url地址
2     // 返回true/false
3     function isUrl(str) {
4            return /[[email protected]:%._\+~#=]{2,256}\.[a-z]{2,6}\b([[email protected]:%_\+.~#?&//=]*)/i.test(str);
5     }
 1   // 9现金转大写
 2     // 返回str
 3     function digitUppercase(n) {
 4         var fraction = [‘角‘, ‘分‘];
 5         var digit = [‘零‘, ‘壹‘, ‘贰‘, ‘叁‘, ‘肆‘,‘伍‘, ‘陆‘, ‘柒‘, ‘捌‘, ‘玖‘];
 6         var unit = [[‘元‘, ‘万‘, ‘亿‘],[‘‘, ‘拾‘, ‘佰‘, ‘仟‘]];
 7         var head = n < 0 ? ‘欠‘: ‘‘;
 8         var n = Math.abs(n);
 9         var s = ‘‘;
10         for (var i = 0; i < fraction.length; i++) {
11                 s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, ‘‘);
12            }
13         s = s || ‘整‘;
14         n = Math.floor(n);
15         for (var i = 0; i < unit[0].length && n > 0; i++) {
16             var p = ‘‘;
17             for (var j = 0; j < unit[1].length && n > 0; j++) {
18                 p = digit[n % 10] + unit[1][j] + p;
19                    n = Math.floor(n / 10);
20                }
21                s = p.replace(/(零.)*零$/, ‘‘).replace(/^$/, ‘零‘) + unit[0][i] + s;
22             }
23
24         return head + s.replace(/(零.)*零元/, ‘元‘).replace(/(零.)+/g, ‘零‘).replace(/^整$/, ‘零元整‘);
25     };
 1  // 10,序列化对象
 2         function stringfyQueryString(obj) {
 3             if (!obj) return ‘‘;
 4             var pairs = [];
 5             for (var key in obj) {
 6                 var value = obj[key];
 7                 if (value instanceof Array) {
 8                     for (var i = 0; i < value.length; ++i) {
 9                         pairs.push(encodeURIComponent(key + ‘[‘ + i + ‘]‘) + ‘=‘ + encodeURIComponent(value[i]));
10                     }
11
12                     continue;
13                 }
14                 pairs.push(encodeURIComponent(key) + ‘=‘ + encodeURIComponent(obj[key]));
15             }
16             return pairs.join(‘&‘);
17         }
   // 11,数组转字符串
        function arrayToString(arr){
            var string=arr.join(‘,‘);
            return string;
        }
1     // 12,字符串转数组
2         function stringToArray(str){
3             var array = str.split(‘,‘);
4             return array;
5         }
 1      //13,在min和max之间取出n个随机不重复的数
 2         function getNum(n,min,max){
 3             for(var i=0,arr=[];i<n;i++){
 4                 var r=Math.floor(Math.random()*(max-min+1)+min);
 5                 if(arr.indexOf(r)==-1){
 6                     arr.push(r);
 7                 }else{
 8                     i--;
 9                 }
10             }
11             return arr;
12         }
 1         //14,在min和max之间取出n个不重复的随机数
 2         function get(n,min,max){
 3             for(var i=0,arr=[];i<n;i++){
 4                 arr[i]=Math.floor(Math.random()*(max-min+1)+min);
 5                 for(var j=0;j<i;j++){
 6                     if(arr[i]==arr[j]){
 7                         i--;
 8
 9                     }
10                 }
11             }
12             return arr;
13         }
 1         //原生js仿jq中ajax()请求
 2
 3         //支持跨域
 4
 5         function ajax(obj) {
 6             var xmlhttp, type, url, async, dataType, data;
 7             if (typeof(obj) != ‘object‘)  return false;
 8
 9             type = obj.type == undefined ? ‘POST‘ : obj.type.toUpperCase();
10             url = obj.url == undefined ? window.location.href : obj.url;
11             async = obj.async == undefined ? true : obj.type;
12             dataType = obj.dataType == undefined ? ‘HTML‘ : obj.dataType.toUpperCase();
13             data = obj.data == undefined ? {} : obj.data;
14
15
16             var formatParams = function () {
17                 if (typeof(data) == "object") {
18                     var str = "";
19                     for (var pro in data) {
20                         str += pro + "=" + data[pro] + "&";
21                     }
22                     data = str.substr(0, str.length - 1);
23                 }
24                 if (type == ‘GET‘ || dataType == ‘JSONP‘) {
25                     if (url.lastIndexOf(‘?‘) == -1) {
26                         url += ‘?‘ + data;
27                     } else {
28                         url += ‘&‘ + data;
29                     }
30                 }
31             }
32             if (window.XMLHttpRequest) {
33                 xmlhttp = new XMLHttpRequest();
34             } else {
35                 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
36             }
37
38
39             if (dataType == ‘JSONP‘) {
40                 if (typeof(obj.beforeSend) == ‘function‘)obj.beforeSend(xmlhttp);
41                 var callbackName = (‘jsonp_‘ + Math.random()).replace(".", "");
42                 var oHead = document.getElementsByTagName(‘head‘)[0];
43                 data.callback = callbackName;
44                 var ele = document.createElement(‘script‘);
45                 ele.type = "text/javascript";
46                 ele.onerror = function () {
47                     console.log(‘请求失败‘);
48                     obj.error && obj.error("请求失败");
49                 };
50
51                 oHead.appendChild(ele);
52                 window[callbackName] = function (json) {
53                     oHead.removeChild(ele);
54                     window[callbackName] = null;
55                     obj.success && obj.success(json);
56                 };
57                 formatParams();
58                 ele.src = url;
59
60
61                 return ;
62             } else {
63                 formatParams();
64                 xmlhttp.open(type, url, async);
65                 xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
66                 if (typeof(obj.beforeSend) == ‘function‘)obj.beforeSend(xmlhttp);
67                 xmlhttp.send(data);
68                 xmlhttp.onreadystatechange = function () {
69
70                     if (xmlhttp.status != 200) {
71                         console.log(xmlhttp.status + ‘错误‘);
72                         obj.error && obj.error(xmlhttp.status + ‘错误‘);
73                         return ;
74                     }
75
76                     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
77
78                         if (dataType == ‘JSON‘) {
79                             try {
80                                 res = JSON.parse(xmlhttp.responseText);
81                             } catch (e) {
82                                 console.log(‘返回的json格式不正确‘);
83                                 obj.error(‘返回的json格式不正确‘);
84                             }
85
86                         } else if (dataType == ‘XML‘) {
87                             res = xmlhttp.responseXML;
88                         } else {
89                             res = xmlhttp.responseText;
90                         }
91
92                         obj.success && obj.success(res);
93
94                     }
95                 }
96             }
97         };

来源:前端大视界

原文地址:https://www.cnblogs.com/mhxy13867806343/p/8447925.html

时间: 2024-07-31 18:45:13

打造自己的javascript库的相关文章

流行的JavaScript库 ——jQuery

1.为了简化 JavaScript 的开发, 一些 JavsScript 库诞生了. JavaScript 库封装了很多预定义的对象和实用函数.能帮助使用者建立有高难度交互的 Web2.0 特性的富客户端页面, 并且兼容各大浏览器.当前流行的 JavaScript 库有:jQuery, MooTools, Prototype, Dojo, YUI, EXT_JS  DWR 2.jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team. j

19个很有用的 JavaScript库推荐

流行的 JavaScript 库有jQuery,MooTools,Prototype,Dojo和YUI等,这些 JavaScript 库功能丰富,加上它们众多的插件,几乎能实现任何你需要的功能 然而需要实现一些特定的功能,则可以选择功能更专一的轻量库,今天这篇文章与大家分享16个很有用的 JavaScript 库. Blackbird: Open Source JavaScript Logging UtilityBlackbird 是一款非常酷的 JavaScript 调试工具,带有一个漂亮的界

Device.js——检测设备平台、操作系统的Javascript 库

http://segmentfault.com/a/1190000000373735 Device.js 是一个可以让你检测设备的平台,操作系统和方向 JavaScript 库,它会自动在 <html> 标签添加一些设备平台,操作系统,方向相关的 CSS class,这样就能让你针对不同设备撰写不同的 CSS,并且还提供一些 Javascript 函数来判断设备. Device.js 通过操作系统(比如 iOS,安卓,黑莓,Windows,Firefox OX),方向(横屏或者竖屏),类型(平

通过javascript库JQuery实现页面跳转功能代码

通过javascript库JQuery实现页面跳转功能代码的四段代码实例如下. 实例1: 1 2 3 4 $(function(){ var pn = $("#gotopagenum").val();//#gotopagenum是文本框的id属性 location.href = "NewList.aspx?pagenum="+pn;//location.href实现客户端页面的跳转 }); 实例2: 实现跳转:window.location = 'user!add.

Numeral.js – 格式化和操作数字的 JavaScript 库

Numeral.js 是一个用于格式化和操作数字的 JavaScript 库.数字可以格式化为货币,百分比,时间,甚至是小数,千位,和缩写格式,功能十分强大.支持包括中文在内的17种语言. 您可能感兴趣的相关文章 太赞了!超炫的页面切换动画效果[附源码下载] 创意无限!一组网页边栏过渡动画[附源码下载] 真是好东西!13种非常动感的页面加载动画效果 你见过吗?9款超炫的复选框(Checkbox)效果 时尚设计!三种奇特网格加载效果[附源码下载] 源码下载      在线演示 本文链接:Numer

开发者必备的 12 个 JavaScript 库

现在 web 设计是最有趣的了,做好 web 设计不仅要熟练使用 Javascript,css 和 html 等,还要有自己的创意设计.为了方便大家发挥自己的创意,就产生了很多 JS 框架,Node.js 扩展等等.有了这些工具,开发者们就能专注于创意设计了,而不用为某个功能而花费太多精力.这里我们介绍的是 12 个开发者们必备的 JavaScript 库,都是一些很基础功能很强大的库.有了这些库,开发者们可以节省很多时间,大大提高开发的效率,所以大家赶紧收藏起来吧:) 1) Headroom.

Javascript库,前端框架(UI框架),模板引擎

JavaScript库:JQuery,undoscore,Zepto 纯Javascript语言封装, 前端框架(UI框架):Bootstrap,Foundation,Semantic UI,Pure.css 前端框架.UI框架,或者叫UI模板 HTML + CSS + (JavaScript)? 模板引擎: 叫HTML模板引擎?  模板文件(HTML)+(CSS)?+数据(JSON) =输入=> 模板引擎  =输出=>HTML (客户端)前端模板引擎(渲染),(服务器)后端模板引擎(渲染)

推荐8个实现 SVG 动画的 JavaScript 库

SVG 是一种分辨率无关的图形(矢量图形).这意味着它在任何类型的屏幕都不会遭受任何质量损失.除此之外,你可以让 SVG 灵活现一些动画效果.这篇文章就给大家推荐8个实现 SVG 动画的 JavaScript 库. 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12款经典的白富美型 jQuery 图片轮播插件 1. W

Feature.js-轻量级浏览器特性检测JavaScript库插件

简要教程 Feature.js是一款轻量级的浏览器特性检测JavaScript库插件.该插件运行速度快,使用简单,文件只有1kb大小.通过Feature.js你可以检测客户浏览器是否支持某些特性,并针对这些特性编写代码. Feature.js会自动在页面初始化时进行加载,但是它不会自动进行特性检测,直到你在代码中调用它时才会进行指定特性的检测. 通过Feature.js你可以对浏览器进行特性检测,例如检测浏览器是否支持CSS 3D transforms,为支持该特性的浏览器编写代码来操纵元素进行