javascript 实用工具函数
整理日常开发中我们常常会使用到的一些工具函数。
var utils = (function(){
var fay = {};
// 返回当前时间的毫秒数
fay.getTime = Date.now()
|| function getTime() {return new Date().getTime();};
// 对象复制
fay.extend = function(target, obj) {
if(obj && typeof obj !== 'object') return throw new Error(obj + 'is not object');
for(var i in obj) {
if(obj.hasOwnProperty(i)) {
target[i] = obj[i];
}
}
};
/*
* 获取 url 的参数
*/
fay.getUrlParams = function (url) {
var url = url || location.search,
params = {},
route = '';
if(url) {
route = url.split("?")[1].split("&");
route.forEach(function (item) {
var item = item.split("=");
if(item) {
params[item[0]] = item[1].replace(/(.*)([.|\#]$)/,"$1");
}
})
}else {
console.log('未找到参数!')
}
return params;
};
// 设置cookies
fay.setCookie = function (name, value, time) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + time);
document.cookie = name + "=" + encodeURIComponent(value)
+ ((time == null) ? "" : ";expires=" + exdate.toUTCString())+";path=/";
};
// 读取cookies
fay.getCookie = function (c_name) {
if (document.cookie.length>0)
{
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1)
{
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
return decodeURIComponent(document.cookie.substring(c_start,c_end))
}
}
return ""
};
// 删除cookies
fay.delCookie = function (name) {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cookieval = this.getCookie(name);
if(cookieval)
document.cookie = name +"="+ cookieval +";expires=" + exp.toUTCString();
};
/**
* mergeArr 合并含有相同value对象元素的数组
* @param {Array} arr 数组
* @param {String} key 字段
* @return {Object}
*
* @example
* var arr = [{m:1,n:22}, {m:1,x:54}, {m:5,e:29},{m:5,k:9}]
* this.mergeArr(arr, 'm')
* {
* 1:[{m:1,n:22},{m:1,x:54}],
* 5:[{m:5,e:29},{m:5,k:9}]
* }
*/
fay.mergeArr = function (arr, key) {
var obj = {};
arr.forEach(function (item, index, arr) {
var m = item[key];
if(!obj[m]) {
obj[m] = [item];
}else {
[].push.call(obj[m],item);
}
});
return obj;
};
/**
* mergeArr 合并含有相同value对象元素的数组
* @param {Array} arr 数组
* @return {Object}
*
* @example
* var arr = [{1:2,8:0,3:5},{1:0,8:8,3:51}]
* this.mergeArr(arr)
* {
* {1:[2,0],3:[5,51],8:[0,8]}
* }
*/
fay.mergeArrByKey = function(arr) {
var obj = {},
result = [],
key;
arr.forEach(function (item, index, arr) {
for(key in item) {
if(!obj[key]){
obj[key] = [];
obj[key].push(item[key])
}else{
obj[key].push(item[key])
}
}
});
for(var i in obj) {
result.push(obj[i])
}
return result;
};
/**
* by 对象数组排序
*
*/
fay.sortBy = function (name) {
return function (o, p) {
var a, b;
if (typeof o === "object" && typeof p === "object" && o && p) {
a = o[name];
b = p[name];
if (a === b) {
return 0;
}
if (typeof a === typeof b) {
return a < b ? -1 : 1;
}
return typeof a < typeof b ? -1 : 1;
}
else {
throw ("error");
}
}
};
/**
* 将时间戳转化为标准时间格式
*
* */
fay.switchTimestamp = function (timestamp, newStandard) {
// 设置需要的时间格式
var newStandard = newStandard || '$2月$3日';
var newDate = new Date();
var standardTime = "",
fullYear='',month = '', day='',
arr = [];
function getArr(newDate) {
fullYear = newDate.getFullYear();
month = newDate.getMonth()+1;
day = newDate.getDate();
arr.push(fullYear);
arr.push(month);
arr.push(day);
if(arr[1] < 10) {
arr[1] = '0'+arr[1]
}
if(arr[2] < 10) arr[2] = '0'+arr[2];
standardTime = arr.join('/');
return standardTime;
}
if(/^\d{13}$/.test(timestamp)) {
newDate.setTime(timestamp);
standardTime = getArr(newDate);
}else if(/^\d{16}$/.test(timestamp)) {
newDate.setTime(timeStamp / 1000);
standardTime = getArr(newDate);
} else {
console.error("时间戳格式不正确");
}
// 返回需要的时间格式
return standardTime.replace(/^(\d{4})\/(\d{1,2})\/(\d{1,2})$/, newStandard);
};
/*
* 将日期字符串转为时间戳
* @param {Date} date(天) "0-31"
* return 1484733218000
*/
fay.toTimeStamp = function (date) {
if(date) {
var d = new Date();
d.setDate(d.getDate() + date);
return d;
}else {
return Date.parse(new Date());
}
};
// 长按事件
fay.longPress = function (ele, cb, clickCb) {
var timeOut = 0;
ele.on({
touchstart: function (e) {
var objTarget = e.target ? e.target : e.srcElement;
console.log($(this).find(".panel_info").attr("data-id"));
timeOut = setTimeout(function () {
var name = prompt("请修改礼品单",'');
}, 500);
return false;
},
touchmove: function (e) {
clearTimeout(timeOut);
timeOut = 0;
return false;
},
touchend: function (e) {
clearTimeout(timeOut);
if(timeOut) {
clickCb;
}
return false;
}
})
};
fay.throttle = function(method, context, delay) {
var delayTime = delay || 1000;
clearTimeout(context.tId);
context.tId = setTimeout(function(){
method.call(context);
}, delayTime);
};
return fay;
})()
function ease(x) {
return Math.sqrt(1 - Math.pow(x - 1, 2));
}
function reverseEase(y) {
return 1 - Math.sqrt(1 - y * y);
}
javascript 实用工具函数的更多相关文章
- JQuery实践--实用工具函数
实用工具函数,$命名空间的一系列函数,但不操作包装集.它要么操作除DOM元素以外的Javascript对象,要么执行一些非对象相关的操作. JQuery的浏览器检测标志可在任何就绪处理程序执行之前使用 ...
- Lodash JavaScript 实用工具库
地址:https://www.lodashjs.com/ Lodash 是一个一致性.模块化.高性能的 JavaScript 实用工具库.
- jQuery实用工具函数
1. 什么是工具函数 在jQuery中,工具函数是指直接依附于jQuery对象.针对jquery对象本身定义的说法,即全局性的函数,我们统称为工具函数,或Utilities函数.它们有一个明显的特征, ...
- 读<jQuery 权威指南>[6]--实用工具函数
官方地址:http://api.jquery.com/category/utilities/ 一.数组和对象操作 1. $.each——遍历 $.each(obj,function(param1,pa ...
- javascript常用工具函数总结(不定期补充)未指定标题的文章
前言 以下代码来自:自己写的.工作项目框架上用到的.其他框架源码上的.网上看到的. 主要是作为工具函数,服务于框架业务,自身不依赖于其他框架类库,部分使用到es6/es7的语法使用时要注意转码 虽然尽 ...
- 你要的几个JS实用工具函数(持续更新)
今天,我们来总结下我们平常使用的工具函数,希望对大家有用.1.封装fetch 源码: /** * 封装fetch函数,用Promise做回调 * @type {{get: (function(*=)) ...
- JavaScript常用工具函数
检测数据是不是除了symbol外的原始数据 function isStatic(value) { return ( typeof value === 'string' || typeof value ...
- JavaScript 设计模式 - 工具函数
1.类式继承,模拟面向对象语言的继承方式 function extend(subClass, superClass) { var F = function() {}; F.prototype = su ...
- JavaScript 实用工具库 : lodashjs
首页地址:https://www.lodashjs.com/
随机推荐
- 13 Maven 编写插件
Maven 编写插件 Maven 的任何行为都是由插件完成的,包括项目的清理.绵编译.测试以及打包等操作都有其对应的 Maven 插件.每个插件拥有一个或者多个目标,用户可以直接从命令行运行这些插件目 ...
- Spring Boot 集成 Mybatis(druid 数据库连接池 以及 分页配置)
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射,目前很大一部分互联网.软件公司都在使用这套框架 关于Mybatis-Generator的下载可以到这个地址:http ...
- 2018.09.15 秘密的牛奶管道SECRET(次小生成树)
描述 约翰叔叔希望能够廉价连接他的供水系统,但是他不希望他的竞争对手知道他选择的路线.一般这样的问题需要选择最便宜的方式,所以他决定避免这种情况而采用第二便宜的方式. 现在有W(3 <= W & ...
- java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing,
缺少一个java包,然后我在这个网址找到了http://central.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1. ...
- null 解决方法
在iOS开发过程中经常需要与服务器进行数据通讯,Json就是一种常用的高效简洁的数据格式. 问题现象 但是几个项目下来一直遇到一个坑爹的问题,程序在获取某些数据之后莫名崩溃.其实很早就发现了原因:由于 ...
- Android传感器——加速度传感器
步骤如下: 1. 调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager,SensorManager对象代表系统的传感器 ...
- POJ1511来回最短路
POJ1511 问你从1到其它点得所有最短路之和 与 其他点到1得所有最短路之和 得总和 思路很明确就是两次最短路,翻转一次地图就好了 一开始就是两次spfa之间处理好数据得更新管理就好 vect ...
- Android adb shell data目录,Permission denied
Android adb shell进入data目录,Permission denied 权限被拒绝 在shell里面输入su root,去申请root权限,注意:有小部分手机是需要点击授权,再次执行c ...
- SQL Server OS 调度
--SQL SERVER OS 采用合作模式的线程调度模式,即除非Worker主动放弃CPU,否则SQL OS 不会强制剥夺其CPU,从而减少Context Switch --默认设置下,SQL SE ...
- SQL 取两日期的记录
SELECT TOP 1000 [ID] ,[SourcePageID] ,[PlatformType] ,[CreateTime] FROM [home_sendor ...