js 常用自定义方法

转换类

对象数据转formdata格式

/**
 * 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;
}

像素和尺寸单位之间互相转换

//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-------');

判断类

判断变量是否为空

/**
 * 判断变脸是否为空
 * @param v
 * @returns {boolean}
 */
function isEmpty(v) {
    switch (typeof v) {
        case 'undefined':
            return true;
        case 'string':
            if (v.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true;
            break;
        case 'boolean':
            if (!v) return true;
            break;
        case 'number':
            if (0 === v || isNaN(v)) return true;
            break;
        case 'object':
            if (null === v || v.length === 0) return true;
            for (var i in v) {
                return false;
            }
            return true;
    }
    return false;
}

判断字符串是否相等,不区分大小写

/**
 * 判断字符串是否相等,不区分大小写
 * @constructor
 */
function CheckEquals(str1,str2) {
    if(str1.length === str2.length && str1.toLowerCase() === str2.toLowerCase()) {
        return true;
    }
    return false;
}

判断字符串是否以指定字符开头

/**
 * 判断是否以指定字符开头
  * @param str 待检索字符串
 * @param strHead 开头字符串
 */
function isStringHead(str, strHead) {
    if(isEmpty(str) || isEmpty(strHead)){
        return false;
    }
    if(str.substr(0, strHead.length) === strHead){
        return true;
    }

    return false;
}

判断字符串是否以指定字符结尾

/**
 * 判断是否以指定字符结尾
 * @param str 待检索字符串
 * @param strHead 结尾字符串
 */
function isStringEnd(str, strEnd) {
    if(isEmpty(str) || isEmpty(strEnd)){
        return false;
    }
    if(str.substr(str.length - strEnd.length, strEnd.length) === strEnd){
        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));
            }
        };
    });
}
/**
 * 根据横向分辨率和纵向分辨率计算计算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-------');
posted @ 2020-08-04 20:00  makalo  阅读(353)  评论(0编辑  收藏  举报