一、防止ie浏览器按backspace回退页面

//防止后退返回页面,如果非文本框、密码框、文本域控件,或控件非可用装填,则禁用后退按键
var ua=navigator.userAgent.toLowerCase();
var isIE=ua.indexOf("msie")>-1;
window.document.onkeydown =function(e){var e = e;var obj;        //事件源var t;            //控件类型var keyCode;    //按键ascii码if(isIE){e = event || window.event;keyCode = e.keyCode;}else{keyCode = e.keyCode || e.which;if(keyCode==undefined||keyCode==null||keyCode==''){keyCode=String.fromCharCode(e.charCode);}}obj = e.target || e.srcElement; //获取事件源 t = obj.type || obj.getAttribute('type'); if (e.keyCode==8 && (obj.readOnly || obj.disabled || (t != "password" && t != "text" && t != "textarea" && obj.tagName!=='INPUT'))) {return false;}
};

二、获取页面传参

// 获取参数var name = window.location.search;  //获取?后面的字符串
function getUrlParam(name) {var urlArr = [],urlObj={};name = decodeURI(name);urlArr=name.substring(1).split('&');for(var i =0;i<urlArr.length;i++){var valueArr=urlArr[i].split('=');urlObj[valueArr[0]]=valueArr[1];}return urlObj;
}

三、加载动画(避免重复点击机制),初始化ajax(以jquery为例)

 1 jQuery.bootstrapLoading = {
 2     start: function (options) {
 3         var defaults = {
 4             opacity: 1,
 5             //loading页面透明度
 6             backgroundColor: "rgba(0,0,0,0.3)",
 7             //loading页面背景色
 8             borderColor: "#bbb",
 9             //提示边框颜色
10             borderWidth: 0,
11             //提示边框宽度
12             borderStyle: "solid",
13             //提示边框样式
14             loadingTips: "",
15             //提示文本
16             TipsColor: "#666",
17             //提示颜色
18             delayTime: 1000,
19             //页面加载完成后,加载页面渐出速度
20             zindex: 99999999,
21             //loading页面层次
22             sleep: 0,
23             //设置挂起,等于0时则无需挂起
24             width: '150px',
25             height: '165px',
26         }
27         var options = $.extend(defaults, options);
28
29         //获取页面宽高
30         var _PageHeight = document.documentElement.clientHeight,
31         _PageWidth = document.documentElement.clientWidth;
32         //获取页面路径
33         var baseUrl = window.document.location.protocol + "//" + window.document.location.host + "/";
34           var shortenedUrl = window.document.location.href.replace(baseUrl, "").replace(/\/\//g, "/").replace("//", "/");
35           if(shortenedUrl.startsWith("/")){
36               shortenedUrl = shortenedUrl.substring(1);
37           }
38           if(shortenedUrl.indexOf("web/")==0){
39               baseUrl = baseUrl + shortenedUrl.substring(0, shortenedUrl.indexOf("/"));
40           }
41         //在页面未加载完毕之前显示的loading Html自定义内容
42         var _LoadingHtml = '<div id="loadingPage" style="position:fixed;left:0;top:0;_position: absolute;width:100%;height:' + _PageHeight + 'px;background:' + options.backgroundColor + ';opacity:' + options.opacity + ';filter:alpha(opacity=' + options.opacity * 100 + ');z-index:' + options.zindex +
43         ';"><div id="loadingTips" class="loadingTips" style="position: absolute; cursor1: wait; border-color:' + options.borderColor +
44         ';background-position:50%; width: '+options.width+';height:'+options.height+';border-style:' + options.borderStyle + ';border-width:' + options.borderWidth + 'px; line-height:80px; padding: 15px;border-radius:10px;  background: url('+baseUrl+'/images/loading.gif) no-repeat center; color:' + options.TipsColor + ';font-size:20px;">'
45         + options.loadingTips + '</div></div>';
46
47         //呈现loading效果
48         $("body").append(_LoadingHtml);
49         //获取loading提示框宽高
50         var _LoadingTipsH = document.getElementById("loadingTips").clientHeight,
51         _LoadingTipsW = document.getElementById("loadingTips").clientWidth;
52
53         //计算距离,让loading提示框保持在屏幕上下左右居中
54         var _LoadingTop = _PageHeight > _LoadingTipsH ? (_PageHeight - _LoadingTipsH) / 2 : 0,
55         _LoadingLeft = _PageWidth > _LoadingTipsW ? (_PageWidth - _LoadingTipsW) / 2 : 0;
56
57         $(".loadingTips").css({
58             "left": _LoadingLeft + "px",
59             "top": _LoadingTop + "px"
60         });
61
62         //监听页面加载状态
63         // document.onreadystatechange = PageLoaded;
64
65         //当页面加载完成后执行
66         // function PageLoaded() {67         //     if (document.readyState == "complete") {68         //         var loadingMask = $('#loadingPage');
69
70         //         setTimeout(function () {71         //             loadingMask.animate({72         //                 "opacity": 0
73         //             },
74         //             options.delayTime,
75         //             function () {76         //                 $(this).hide();
77
78         //             });
79
80         //         },
81         //         options.sleep);
82
83         //     }
84         // }
85     },
86     end: function () {
87         $("#loadingPage").remove();
88     }
89 }
90 //初始化ajax
91 $.ajaxSetup({
92     beforeSend:function(xhr){
93         $.bootstrapLoading.start();
94     },
95         complete: function () {
96             $.bootstrapLoading.end();
97         }
98 });

4、时间格式化

Date.prototype.format=function(fmt) {         var o = {         "M+" : this.getMonth()+1, //月份         "d+" : this.getDate(), //日         "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时         "H+" : this.getHours(), //小时         "m+" : this.getMinutes(), //分         "s+" : this.getSeconds(), //秒         "q+" : Math.floor((this.getMonth()+3)/3), //季度         "S" : this.getMilliseconds() //毫秒
    };         var week = {         "0" : "/u65e5",         "1" : "/u4e00",         "2" : "/u4e8c",         "3" : "/u4e09",         "4" : "/u56db",         "5" : "/u4e94",         "6" : "/u516d"        };         if(/(y+)/.test(fmt)){         fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));         }         if(/(E+)/.test(fmt)){         fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);         }         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;
} function getDate(strDate){if(strDate && strDate!=""){var date = eval('new Date(' + strDate.replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')');return date;}return undefined;
}function formatDate(date, fmt){var format = fmt || "yyyy-MM-dd hh:mm:ss";if(date instanceof Date){return date.format(format);}else if(typeof date == 'string'){var d = getDate(date);if(d){return d.format(format);}return '';}else{return date;}
}

5、格式化数据(树状结构)

 1 TreeDataFormat = {
 2     format : function(conf) {
 3         var idField, textField, parentField, iconClsField;
 4         idField = conf.idField ||  'id';
 5         textField = conf.textField || 'text';
 6         parentField = conf.parentField || 'pid';
 7         iconClsField = conf.iconClsField || 'iconCls';
 8         data = conf.data
 9         var i, l, treeData = [], tmpMap = [];
10         for (i = 0, l = data.length; i < l; i++) {
11             data[i]['id'] = data[i][idField];
12             data[i]['text'] = data[i][textField];
13             data[i]['pid'] = data[i][parentField];
14             data[i]['iconCls'] = data[i][iconClsField] || 'anticon icon-nav';
15             data[i]['children'] = [];
16             tmpMap[data[i][idField]] = data[i];
17         }
18         for (i = 0, l = data.length; i < l; i++) {
19             if (tmpMap[data[i][parentField]] && data[i][idField] != data[i][parentField]) {
20                 if (!tmpMap[data[i][parentField]]['children'])
21                     tmpMap[data[i][parentField]]['children'] = [];
22                 data[i][parentField]
23                 data[i]['text'] = data[i][textField];
24                 tmpMap[data[i][parentField]]['children'].push(data[i]);
25             } else {
26                 data[i]['text'] = data[i][textField];
27                 treeData.push(data[i]);
28             }
29         }
30         return treeData;
31     },
32     getChildrenByPid:function(treeData, pidField, pid, result){
33         result = result || [];
34         for (var i = 0; i < treeData.length; i++) {
35             if (treeData[i][pidField] === pid)
36                 result.push(treeData[i]);
37             else {
38                 if (treeData[i].hasOwnProperty("children")) {
39                     result = this.getChildrenByPid(treeData[i].children, pidField, pid, result);
40                 }
41             }
42         }
43         return result;
44     }
45 }

转载于:https://www.cnblogs.com/cutone/p/7125507.html

一个前端框架应该有的一些公共函数相关推荐

  1. Day 2---vue2 从0开始 写一个前端框架

    项目背景:vue2 业务需求:用Vue+Element 写一个前端框架 今日主线任务:完成静态登陆页面 项目地址: https://gitee.com/whwbs/my_project.git 准备工 ...

  2. bootstrap怎么在一个页面渲染多个表格_推荐一个前端框架

    拼图Pintuer-跨屏响应式布局前端开发CSS框架 几个推荐理由: 国产: 跨屏响应式,这是最基本的: 使用简单,只需引入jquery.js.pinter.js.pinter.css三个文件即可: ...

  3. Web前端开发的十佳前端框架优缺点

    用户体验是网站.Web应用程序最重要的部分,再强大的特性和功能,如果没有良好的用户体验,那也只能是个摆设.这需要使用前端框架来简化交互式.以用户为中心的网站的开发.凭借我们作为 Web 开发公司的经验 ...

  4. 新兴前端框架 Svelte 从入门到原理

    在这篇文章中,我们将会介绍 Svelte 框架的特性.优缺点和底层原理. 本文尽量不会涉及 Svelte 的语法,大家可以放心食用.因为 Svelte 的语法极其简单,而且官方教程学习曲线平缓http ...

  5. 最接近原生APP体验的高性能前端框架——MUI

      前  言 MUI有三大特点: 轻量 追求性能体验,是我们开始启动MUI项目的首要目标,轻量必然是重要特征: MUI不依赖任何第三方JS库,压缩后的JS和CSS文件仅有100+K和60+K 原生UI ...

  6. 一个前端的10年前端职业路

    前言 也许是自己的关注点变了,也许是跟自己年纪相仿的同行都成了行业大牛,最近时常看到一些前端大佬的总结分享,例如:<工作10年谈谈XXX>.<在阿里做了五年技术主管,XXX>. ...

  7. 【译】前端框架技术选型 React vs. Vue (vs. Angular)

    这是该系列文章的第2部分:"Fundbox的前端技术选型".第1部分介绍了Fundbox的技术现状以及我们重新设计它的动机.第2部分介绍了选择新框架背后的考虑:是迁移到React, ...

  8. 陈本峰:HTML5跨屏前端框架Amaze UI的开源之道

    编者按 \\ 对陈本峰的采访,源于技术圈内的一个饭局,虽然大家对他的云适配创业经历很感兴趣,但是他却在自我介绍中反复提到了"开源"和"Amaze UI",言谈举 ...

  9. 初识一款开源简单好用的前端框架——easyUI

    easyUI入门 前言:关于前端框架 正文:easyUI的使用 番外:如何开发自己的前端框架 前言:关于前端框架 前端框架的本质:个人理解实际上就是一大堆封装好的css和js文件,再作为外部引用在界面 ...

最新文章

  1. 【C++】Google C++编码规范(四):其他C++
  2. 数据分析工具Pandas(1):Pandas的数据结构
  3. javascript搜索框联想搜索_js实现类似于联想关键词的搜索功能(附代码)
  4. jenkins-git-gradle配置项目
  5. java异常在哪一层捕获_当在一个方法的代码中抛出一个检测异常时,该异常或被方法中的 ( )结构 捕获,或者在方法的 ( ) 中声明_学小易找答案...
  6. 将Java程序作成exe文件的几种方法【转载】
  7. linux练习 串口跟进程6,linux下串口测试程序
  8. oracle登录日志查看_last命令详解--查看Linux 登录日志+实例说明
  9. android 输出字节数组,Android蓝牙通信字节数组的数据类型转换 求教!
  10. GitHub:为什么我们最终选择放弃了 jQuery
  11. mysql修改有外键约束的表结构
  12. java ee 设计模式解析与应用_《Java EE 设计模式解析与应用》PDF 下载
  13. java 24种设计模式
  14. 运用软件配置管理加强风险管理
  15. STM32智能家居系统设计(门禁、人体感应、GSM远程控制)
  16. centos 7(桌面应用)-桌面的应用合集
  17. Android学习记录
  18. 尚硅谷 clickHouse
  19. “源”来是你-Vol.33 | 浙江大应科技 Aloudata 招聘开源社区运营
  20. sql语句查询,多字段like模糊查询优化

热门文章

  1. linux ftp下载函数函数,FTP下载的函数
  2. vim复制、删除和粘贴一行
  3. uniapp 表单页面_uniapp自定义表单模板经验分享
  4. zookeeper 默认端口_ZooKeeper知识点汇总
  5. 宝塔php安装那个合_使用宝塔面板安装nextcloud | 启用本地存储 | 安装smbclient
  6. linux添加video驱动,linux下video驱动源码位置
  7. ajax会占用服务器端内存吗,javascript - 为什么不允许在jquery datatable服务器端处理ajax成功使用? - 堆栈内存溢出...
  8. android car bt模块,大谷蓝牙小车BT Car/Android Car手机控制 重力控制小车 安卓操控小车...
  9. real time linux pdf,【整理】ubuntu real time Linux
  10. java 素数乘积,求助2424379123 = 两个素数的乘积,求这两个素数?