/**
* js 对象转FormData
* 如:{"a": 2, "b": 3}
* @param object
* @returns {FormData}
*/
function jsToFormData(object) {
var formData = new FormData();
//遍历对象
for(var key in object){
//添加到FormData
formData.append(key,object[key]);
}
return formData;
}
判断字符串是否相等,不区分大小写
/**
* 判断字符串是否相等,不区分大小写
* @constructor
*/
function CheckEquals(str1,str2) {
if(str1.length === str2.length && str1.toLowerCase() === str2.toLowerCase()) {
return true;
}
return false;
}
获取对象属性 指定属性前缀的所有属性键名
/**
* 获取对象属性 指定属性前缀的所有属性键名
* @param prefix
*/
function getObjectPrefixKeys(object,prefix) {
var prefixArr = new Array();
//遍历对象
for(var key in object){
if(CheckEquals(key.substring(0, prefix.length), prefix)){
prefixArr.push(key);
}
}
return prefixArr;
}
通过表单ID 获取表单转换成js对象
/**
* 通过表单ID 获取表单数组转换成js对象
* @param fromId
*/
function fromToJsObjectByFromId(fromId) {
//获取表单的所有内容
var fromArray = $('#'+fromId).serializeArray();
//console.log(fromArray, '-------------------fromArray--------------');
var params = {};
for(var i = 0; i < fromArray.length; i++){
//处理表单如果有多选框的情况
if(fromArray[i].name.indexOf('[]') !== -1 ){//多选框
//去掉[]的前缀
var prefix = fromArray[i].name.substring(0,fromArray[i].name.indexOf('[]'));
//console.log(prefix);
var key = prefix + '['+getObjectPrefixKeys(params, prefix).length+']';
params[key] = fromArray[i].value;
}else{
params[fromArray[i].name] = fromArray[i].value;
}
}
//处理表单的文件 单文件
var filesInput = $('#'+fromId+' input[type=file]');
if(filesInput.length > 0){
for(var i = 0; i < filesInput.length; i++) {
var key = filesInput[i].name;
var value = filesInput[i].files[0];
params[key] = value;
}
}
return params;
}
发送ajax 请求到后台(Promise 结构保证异步回调返回正常)
/**
* 发送ajax 请求到后台
* Promise 结构
* @param params 参数列表对象 如{"a": 2, "b": 3}
* @param requestMethod 字符串 请求方式 如:GET POST
* @param url 字符串 后台地址
*/
function sendAjax (params,requestMethod, url) {
//console.log(params, '-------------------params--------------');
return new Promise(function(resolve, reject){
if (window.XMLHttpRequest){
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行的代码
xmlhttp=new XMLHttpRequest();
}
else{
//IE6, IE5 浏览器执行的代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//xmlhttp.open("GET","gethint.php?q="+str,true);
xmlhttp.open(requestMethod,url,true);
//检查是否是post
if(CheckEquals(requestMethod, 'POST') === true){
//将参数列表对象转换成fromdata对象并发送
xmlhttp.send(jsToFormData(params));
}else{
xmlhttp.send();
}
//响应
xmlhttp.onload = function () {
if (xmlhttp.status === 200) {
resolve(xmlhttp.responseText);
} else {
reject(new Error(xmlhttp.statusText));
}
};
});
}
发送ajax 请求 获取表单提交 弹出提示 重载表格 关闭模态框
/**
* 发送ajax 请求 弹出提示 重载表格 关闭模态框
* @param url ajax url
* @param fromId from 表单的id
* @param tableId 表格的id
* @param modalId 模态框的id
*/
function submitPostFromAjax(url, fromId, tableId, modalId) {
sendAjax(fromToJsObjectByFromId(fromId), 'POST', url).then(function(value){
//console.log('内容是:' + value);
var res = JSON.parse(value);
alert(res.msg);
if(res.code == 200){
//关闭模态框并刷新表格
$('#'+modalId).modal('hide');
$('#'+tableId).DataTable().ajax.reload();
}
}).catch(function onRejected(error){
alert('错误:' + error);
});
}
像素和尺寸单位之间互相转换
//http://www.gaituba.com/px2cm/ 测试单位换算
//百度单位换算
//dpi 一般使用300 dpi 即可
/**
* 像素和尺寸单位之间互相转换
* @param width 宽度
* @param heigth 高度
* @param inputType 输入的单位类型 px cm mm in
* @param outType 要转换的单位类型 px cm mm in
* @param dpi 图像每英寸长度内的像素点数
* @returns {string}
*/
function unitConvert(width, heigth, inputType, outType, dpi){
/*
px 转 cm mm in
实际尺寸(英寸)= 像素/DPI;
1英寸(in) = 2.54厘米(cm)
尺寸 转 px
像素 = 英寸 * DPI
1cm = 0.3937008 英寸
*/
//统一尺寸 px
var uniformWidth = width;
var uniformHeigth = heigth;
//将输入的尺寸,统一转成px处理
if(inputType !== 'px'){
//cm 转 px
if(inputType === 'cm'){
uniformWidth = width * 0.3937008 * dpi;
uniformHeigth = heigth * 0.3937008 * dpi;
}
//mm 转 px
if(inputType === 'mm'){
uniformWidth = (width / 10) * 0.3937008 * dpi;
uniformHeigth = (heigth / 10) * 0.3937008 * dpi;
}
//in 转 px
if(inputType === 'in'){
uniformWidth = width * dpi;
uniformHeigth = heigth * dpi;
}
}
var result = {};
result.width = uniformWidth;
result.heigth = uniformHeigth;
if(outType !== 'px'){
//px 转 cm
if(outType === 'cm'){
result.width = (uniformWidth/dpi) * 2.54;
result.heigth = (uniformHeigth/dpi) * 2.54;
}
//px 转 mm
if(outType === 'mm'){
result.width = (uniformWidth/dpi) * 2.54 * 10;
result.heigth = (uniformHeigth/dpi) * 2.54 * 10;
}
//px 转 in
if(outType === 'in'){
result.width = uniformWidth/dpi ;
result.heigth = uniformHeigth/dpi;
}
}
return JSON.stringify(result);
}
console.log(unitConvert(20, 20, 'cm', 'px', 300), 'cm to px 300dpi------');
console.log(unitConvert(20, 20, 'mm', 'px', 300), 'mm to px 300dpi------');
console.log(unitConvert(20, 20, 'in', 'px', 300), 'in to px 300dpi------');
console.log(unitConvert(200, 200, 'px', 'cm', 300), 'px to cm 300dpi------');
console.log(unitConvert(200, 200, 'px', 'mm', 300), 'px to cm 300dpi------');
console.log(unitConvert(200, 200, 'px', 'in', 300), 'px to in 300dpi------');
根据横向分辨率和纵向分辨率计算计算dpi
/**
* 根据横向分辨率和纵向分辨率计算计算dpi
* @param widthPx
* @param heigthPx
* @returns {number}
*/
function getDPI(widthPx, heigthPx){
/*
dpi 图像每英寸长度内的像素点数
dpi=(√(横向分辨率^2+纵向分辨率^2))/图片尺寸(英寸)
图片的DPI(Dot Per Inch的缩写)一般是指每英寸的像素,类似于密度,即每英寸图片上的像素点数量,用来表示图片的清晰度
*/
return Math.sqrt( widthPx * widthPx + heigthPx * heigthPx);
}
console.log(getDPI(1920, 1080), 'getDPI-------');
console.log(getDPI(300, 300), 'getDPI-------');