马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1. 地址栏参数操作
1.1 获取参数
- /**
- * 根据地址栏参数名获取地址栏参数对象
- **/
- const getParams = () => {
- let oldUrl = window.location.href;
- let maodiaoInd = oldUrl.length;
- let arr = oldUrl.substring(oldUrl.indexOf("?") + 1, maodiaoInd).split("&");
- let obj = {};
- for (var i = 0; i < arr.length; i++) {
- arr[i] = arr[i].split("=");
- obj[arr[i][0]] = arr[i][1];
- }
- return obj;
- };
复制代码 1.2 修改参数
- /**
- * 修改指定的url中指定的参数名对应的参数值
- * @param {string} url 待修改url
- * @param {string} name 待修改的参数名
- * @param {string} value 准备赋值给指定参数的值
- * @returns {string} 修改完成的url
- */
- function changeUrlParam(url, name, value) {
- let pattern = name + "=([^&]*)";
- let replaceText = name + "=" + value;
- if (url.match(pattern)) {
- let tmp = "/(" + name + "=)([^&]*)/gi";
- tmp = url.replace(eval(tmp), replaceText);
- return tmp;
- } else {
- if (url.match("[?]")) {
- return url + "&" + replaceText;
- } else {
- return url + "?" + replaceText;
- }
- }
- }
复制代码 1.3 不刷新页面修改URL参数
www.cnblogs.com/wuting/p/89…
1.4 URL编码解码
JavaScript 提供四个 URL 的编码/解码方法。
- encodeURI()
- encodeURIComponent()
- decodeURI()
- decodeURIComponent()
2. 判断程序运行情况
2.1 PC 还是移动端
- /**
- * 判断当前程序运行环境为PC端还是移动端
- **/
- function judgeEquipment() {
- if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
- console.log("当前处于移动端");
- } else {
- console.log("当前处于PC");
- }
- return;
- }
复制代码 2.2 是否为 IOS
- /**
- * 判断当前程序运行环境是否为ios
- **/
- function isIos() {
- let flag = navigator.userAgent.match(
- /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
- );
- if (flag && flag[0] == "iPhone") {
- console.log("当前处于IOS系统");
- }
- return;
- }
复制代码 2.3 是否为微信浏览器
- //是否微信浏览器
- function isWeixin() {
- if (
- navigator.userAgent.toLowerCase().match(/MicroMessenger/i) ==
- "micromessenger"
- )
- return true;
- else return false;
- }
复制代码 3. 验证手机号码
- /**
- * 验证输入的手机号码是否合规
- * @param {string} mobile 输入的手机号码
- * @return {boolean} 手机号码是否合规
- **/
- function mobileAvailable(mobile) {
- let myreg = /^[1][3,4,5,7,8][0-9]{9}$/;
- if (!myreg.test(mobile)) {
- return false;
- } else {
- return true;
- }
- }
复制代码 4. 隐藏手机号
- /**
- * 隐藏手机号码中间四位数字
- * @param {string} mobile 手机号码
- * @return {string} 隐藏后的手机号码
- **/
- function hideMobile(mobile) {
- let reg = /^(\d{3})\d{4}(\d{4})$/;
- mobile = mobile.replace(reg, "$1****$2");
- return mobile;
- }
复制代码 5. 隐藏身份证
- /**
- * 隐藏身份证中间几位数字
- * @param {string} id 身份证号
- * @return {string} 隐藏后的身份证号
- **/
- function hideIdCard(id) {
- id = id.replace(/^(.{4})(?:\d+)(.{4})$/, "$1******$2");
- return id;
- }
复制代码 6. 页面滚动指定位置
- /**
- * 页面滚动到指定位置,(0,0)为顶部
- * @param {number} x 横轴坐标
- * @param {number} y 纵轴坐标
- **/
-
- function scrollTo(x, y) {
- window.scrollTo(x, y);
- }
复制代码 7. 时间戳格式化
- /**
- * @description 时间戳转化为年 月 日 时 分 秒
- * @method formatTime(timestap,format)
- * @param {number} [timestap = new Date().getTime()] 时间戳,默认使用当前时间戳, new Date().getTime(); 获取当前时间戳(毫秒)
- * @param {string} [format='YYYY-mm-dd HH:MM:SS'] 时间格式,不填时默认使用'YYYY-mm-dd HH:MM:SS'格式,更改只需替换中间连接符号就行'YYYY年mm月dd日 HH时MM分SS秒'
- * @example
- * var sjc = 1472048779952; //js一般获取的时间戳是13位,PHP一般是10位
- formatTime(sjc, 'YYYY-mm-dd HH:MM:SS')
- */
-
- const formatTime = (timestap, format = 'YYYY-MM-DD hh:mm:ss') => {
- let ret; let date; let renum;
- // 处理时间戳,将10位的时间戳处理为13位
- if (timestap.toString().length === 10) {
- date = new Date(parseInt(timestap.toString()) * 1000);
- } else {
- date = new Date(parseInt(timestap.toString()));
- }
- const option = {
- Y: date.getFullYear().toString(), // 年
- M: (date.getMonth() + 1).toString(), // 月
- D: date.getDate().toString(), // 日
- h: date.getHours().toString(), // 时
- m: date.getMinutes().toString(), // 分
- s: date.getSeconds().toString() // 秒
- };
-
- for (let key in option) {
- ret = new RegExp(`(${key}+)`).exec(format);
- if (ret) {
- renum = ret[1].length === 1 ? option[key] : option[key].padStart(ret[1].length, '0'); // 根据复数前面是否补零,如“mm”补零,单“m”前面不补零
- format = format.replace(ret[1], renum); // 替换
- }
- }
-
- return format;
- };
复制代码 8. 保留小数
- /**
- * 保留小数
- * @param {number} num 要保留小数的数字
- * @param {number} bit 要保留小数的位数,默认保留两位
- * @return {number} 完成保留小数的数字,如果不是数字则返回"--"
- **/
- function keepDecimal(num, bit = 2) {
- let number = Number(num);
- if (!isNaN(number)) return number.toFixed(bit);
- return "--";
- }
复制代码 9.保留小数并加单元
- /**
- * 保留小数,并根据传入数字添加单位
- * @param {number} num 要保留小数的数字
- * @param {number} bit 要保留小数的位数,默认保留两位
- * @return {number} 完成保留小数的数字,如果不是数字则返回"--"
- **/
- function keepDecimal(num, bit = 2) {
- let number = Number(num);
- if (!isNaN(number)) {
- // 万级别
- if (Math.abs(number) >= 10000 && Math.abs(number) < 100000000) {
- number = (number / 10000).toFixed(bit) + "万";
- }
- // 亿级别
- else if (Math.abs(num) > 100000000) {
- number = (number / 100000000).toFixed(bit) + "亿";
- }
- // 其他
- else {
- number = number.toFixed(bit);
- }
- return number;
- } else {
- return "--";
- }
- }
复制代码 10. 去除空格
- /**
- * 去除字符串中的空格
- * @param {string} value 要去除空格的字符串
- * @param {number} trim 去除空格的方式,trim: 1-所有空格 2-前后空格 3-前空格 4-后空格
- * @return {string} 去除空格后的字符串
- **/
- function trim(value, trim) {
- switch (trim) {
- case 1:
- return value.replace(/\s+/g, "");
- case 2:
- return value.replace(/(^\s*)|(\s*$)/g, "");
- case 3:
- return value.replace(/(^\s*)/g, "");
- case 4:
- return value.replace(/(\s*$)/g, "");
- default:
- return value;
- }
- },
复制代码 11. 范例判断
- /**
- * 判断传入的变量是什么数据类型
- * @param {任意类型} variable 任意数据类型的变量
- * @return {string} 对应的数据类型,['object','array','number','string','boolean','null','undefined','date','math','regex']
- **/
- function type(variable){
- let s = Object.prototype.toString.call(o);
- return s.match(/[object (.*?)]/)[1].toLowerCase();
- }
复制代码 12. 防抖与节流
防抖和节流的作用都是在高频变乱中防止函数被多次调用,是一种性能优化的方案。
区别在于,防抖函数只会在高频变乱结束后 n 毫秒调用一次函数,节流函数会在高频变乱触发过程当中每隔 n 毫秒调用一次函数。
12.1 防抖函数
触发高频变乱后一段时间(wait)只会实行一次函数,假如指定时间(wait)内高频变乱再次被触发,则重新计算时间。
应用场景:
- scroll 变乱滚动触发变乱
- 搜索框输入查询,假如用户一直在输入中,没有必要不停地调用去请求服务端接口,等用户制止输入的时间,再调用,设置一个符合的时间隔断,有效减轻服务端压力。
- 表单验证
- 按钮提交变乱。
- 浏览器窗口缩放,resize 变乱(如窗口制止改变巨细之后重新计算结构)等。
- /**
- * 防抖,高频事件结束后 n 毫秒调用一次函数
- * @param {function} func 要调用防抖的函数
- * @param {number} wait 间隔调用的毫秒数
- * @return {function} 返回的执行函数
- **/
- function debounce(func, wait) {
- let timeout = null;
- return function() {
- let context = this;
- let args = arguments;
- if (timeout) clearTimeout(timeout);
- timeout = setTimeout(() => {
- func.apply(context, args);
- }, wait);
- };
- }
复制代码 12.2 节流函数
规定在一个单元时间内,只能触发一次函数。假如这个单元时间内触发多次函数,只有一次生效。
常见的应用场景都是利用高频变乱来调用函数的过程当中,好比应用于 window 对象的 resize、scroll 变乱,拖拽时的 mousemove 变乱,文字输入、自动完成的 keyup 变乱。
应用场景:
- DOM 元素的拖拽功能实现(mousemove)
- 搜索遐想(keyup)
- 计算鼠标移动的距离(mousemove)
- Canvas 模仿画板功能(mousemove)
- 射击游戏的 mousedown/keydown 变乱(单元时间只能发射一颗子弹)
- 监听滚动变乱判断是否到页面底部自动加载更多
- [/code] [code]/**
- * 节流,在高频事件触发过程当中每隔 n 毫秒调用一次函数
- * @param {function} func 要调用防抖的函数
- * @param {number} wait 间隔调用的毫秒数
- * @return {function} 返回的执行函数
- **/
- function throttle(func, wait) {
- let timeout = null;
- return function() {
- let context = this;
- let args = arguments;
- if (!timeout) {
- timeout = setTimeout(() => {
- timeout = null;
- func.apply(context, args);
- }, wait);
- }
- };
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |