jstooler
Version:
208 lines (199 loc) • 6.25 kB
JavaScript
// 对象转url参数
function objToQuery(obj) {
let arr = [];
for (let k in obj) {
let str = k + '=' + obj[k];
arr.push(str);
}
return arr.join('&')
}
/**
* 防止计算丢失精度(乘法)
* @param arg1 {string|number}
* @param arg2 {string|number}
* @returns {number}
*/
const accMul = function (arg1, arg2) {
var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
try {
m += s1.split(".")[1].length;
} catch (e) {
}
try {
m += s2.split(".")[1].length;
} catch (e) {
}
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}
//获取一级域名domain
function cookieDomain() {
var hostArr, e, domainString
try {
hostArr = window.location.hostname.split(".")
domainString = 0 <= (e = hostArr[hostArr.length - 1]) && 255 >= e ? [window.location.hostname] : "." + hostArr.slice(-2).join(".")
} catch (r) {
domainString = [window.location.hostname]
}
return domainString
}
/** 设置cookie
* @param json {json} json 键值对
* @param exdays {number} 结束时间 (小时)
* @param completeDomain 是否是二级域名
* */
const setCookie = function (json, exdays, completeDomain) {
if (json) {
for (let k in json) {
var cookieString = k + "=" + json[k];
//判断是否设置过期时间
if (exdays > 0 && exdays) {
var d = new Date();
d.setTime(d.getTime() + exdays * 1000 * 60 * 60); //天 *1000 * 60 * 60 * 24
cookieString = cookieString + "; expires=" + d.toGMTString();
}
//设置domain
if (!completeDomain) cookieString += "; domain=" + cookieDomain()
cookieString += ";path=/"
document.cookie = cookieString;
}
}
}
/**
* 获取cookie
* @param {string} key 想要获取的cookie的键
* @return {string} 想要获取的cookie的值
*/
const getCookie = function (key) {
let arr = document.cookie.split(";");
let newArr = [];
for (let i = 0; i < arr.length; i++) {
newArr.push(arr[i].trim());
}
for (let i = 0; i < newArr.length; i++) {
let keyAndValueArr = newArr[i].split("=");
if (keyAndValueArr[0] == key) {
return keyAndValueArr[1];
}
}
}
/**
* 删除指定cookie
* @param key {string} cookie捡
* @param [domain] {string} 删除的cookie的domain
*/
const deleteCookie = function (key, domain) {
if (!key) {
throw new Error('键名不能为空')
}
let date = new Date();
let deleteCookieStr = ""
date.setTime(date.getTime() - 10000);
deleteCookieStr = key + "=" + getCookie(key) + "; expires=" + date.toGMTString() + ";path=/"
if (domain) deleteCookieStr += ";domain=" + domain
document.cookie = deleteCookieStr
}
/**
* 指定年数
* @param years {number} 写年数
* @param [time] {number|string} 从哪年开始加,不写默认现在时间
* @returns {string} 返回多多少年
*/
const addYear = function (years, time) {
if (!years) {
throw new Error('请输入增加年数')
}
let d;
if (!time) {
d = new Date()
} else {
d = new Date(time)
}
let y = d.getFullYear();
let m = d.getMonth() + 1;
let nowDay = d.getDate();
y += years;
m = m.toString().length < 2 ? '0' + m : m;
nowDay = nowDay.toString().length < 2 ? '0' + nowDay : nowDay;
return y + '-' + m + '-' + nowDay
};
/**
* 增加天数
* @param [days=0] {number} 指定天数
* @returns {string}
*/
const addDay = function (days = 0) {
let date = new Date();
let year, month, day;
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
year = date.getFullYear();
month = date.getMonth() + 1;
day = date.getDate();
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
}
/**
* 图片压缩,默认同比例压缩
* @param {string} path
* pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照相图片储存的绝对路径
* @param {function} callback
* 回调函数有一个参数,base64的字符串数据
*/
const dealImage = function (path, callback) {
let img = new Image();
img.src = path;
img.onload = function () {
//this为img对象
let that = this;
// 默认按比例压缩
let w = that.width,
h = that.height,
scale = w / h;
console.log('w', w, 'h', h, 'scale', scale)
w = 630;
h = (w / scale);
let quality = 0.2; // 默认图片质量为0.7
//3为左旋
let canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
// 创建属性节点
let anw = document.createAttribute("width");
let anh = document.createAttribute("height");
//非正常情况,顺着拍的
let degree
if (scale < 1) {
anw.nodeValue = h;
anh.nodeValue = w;
canvas.setAttributeNode(anw);
canvas.setAttributeNode(anh);
//左旋
degree = 3 * 90 * Math.PI / 180;
ctx.rotate(degree)
ctx.drawImage(that, -w, 0, w, h);
} else {
anw.nodeValue = w;
anh.nodeValue = h;
canvas.setAttributeNode(anw);
canvas.setAttributeNode(anh);
// 不动
degree = 0
ctx.rotate(degree)
ctx.drawImage(that, 0, 0, w, h);
}
//生成canvas
// quality值越小,所绘制出的图像越模糊
let base64 = canvas.toDataURL('image/jpeg', quality);
// 回调函数返回base64的值
if (typeof (callback) == 'function') callback(base64);
}
}
module.exports = {
objToQuery,
accMul,
setCookie,
getCookie,
deleteCookie,
addYear,
addDay,
dealImage
}