24、js工具1-15

83 阅读2分钟
import JSEncrypt from "jsencrypt"
let vueObj = new Vue()
var temp = vueObj.TempParent
export default {}

1、返回当前fontsize

updateFontSize() {
        let availWidth = window.screen.width
        if (!availWidth) {
            return 0
        }
        availWidth = availWidth < 1920 ? 1920 : availWidth
        let fontSize = parseFloat(100 / 1920 * availWidth, 10).toFixed(2)
        let root = document.documentElement || document.body
        root.style.fontSize = fontSize + 'px'
        return fontSize
    },

2、返回当前url中想要获取的参数

GetQueryString: (name) => {
        const param = window.location.href.split('?')[1] ? window.location.href.split('?')[1].split('#')[0] : ""
        if (param) {
            var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
            var r = param.match(reg)
            if (r !== null) {
                return unescape(r[2])
            }
        }
        return null
    },

3、格式化时间

/**
     * @method TimeFormat()格式化时间
     * @param {Date} time 需要格式化的时间 Date对象
     * @param {String} format 需要格式化成的格式
     */
    timeFormat: (time, format) => {
        let [year, month, day, hour, minutes, seconds] = [
            time.getFullYear(),
            (time.getMonth() + 1) >= 10 ? (time.getMonth() + 1) : '0' + (time.getMonth() + 1),
            time.getDate() >= 10 ? time.getDate() : '0' + time.getDate(),
            time.getHours() >= 10 ? time.getHours() : '0' + time.getHours(),
            time.getMinutes() >= 10 ? time.getMinutes() : '0' + time.getMinutes(),
            time.getSeconds() >= 10 ? time.getSeconds() : '0' + time.getSeconds()
        ]
        switch (format) {
        case 'Y-M-D':
            return `${year}-${month}-${day}`
        case 'Y.M.D':
            return `${year}.${month}.${day}`
        case '年-月-日 H:M:S':
            return `${parseInt(year, 10)}${temp.$t('Year')}${parseInt(month, 10)}${temp.$t('Month')}${parseInt(day, 10)}${temp.$t('day')} ${hour}:${minutes}:${seconds}`
        case `年-月-日`:
            return `${parseInt(year, 10)}${temp.$t('Year')}${parseInt(month, 10)}${temp.$t('Month')}${parseInt(day, 10)}${temp.$t('day')}`
        case 'H:M:S':
            return hour + ':' + minutes + ':' + seconds
        default:
            return `${year}-${month}-${day} ${hour}:${minutes}:${seconds}`
        }
    },

4、将鼠标相对屏幕的坐标,转化成canvas画布上的实际坐标

 /**
     * @method windowToCanvas() 将鼠标相对屏幕的坐标,转化成canvas画布上的实际坐标
     * @param {Object} canvas 对象
     * @param {Number} x 相对屏幕的横坐标
     * @param {Number} y 相对屏幕的纵坐标
     * @return {param} 返回实际坐标对象
     */
    windowToCanvas: (canvas, x, y) => {
        let rect = canvas.getBoundingClientRect()
        return {
            x: (x - rect.left) * (canvas.width / rect.width),
            y: (y - rect.top) * (canvas.height / rect.height)
        }
    },

5、 base64图片转化成blob、file类型格式

/**
     * @method toBlob() base64图片转化成blob、file类型格式
     * @param {Object} base64Data base64数据
     * @return
     */
    toBlob(base64Data) {
        let byteString = ''
        if (base64Data.split(',')[0].indexOf('base64') >= 0)
            byteString = atob(base64Data.split(',')[1])
        else
            byteString = unescape(base64Data.split(',')[1]);
        let mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0]
        let ab = new ArrayBuffer(byteString.length)
        let ia = new Uint8Array(ab)
        for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i)
        }
        return new Blob([ia], {
            type: mimeString
        })
    },

6、上传图片的格式转为base64

/**
     * @method fileToDataURL() 上传图片的格式转为base64
     * @param {file} imgFile 要转换的文件
     */
    fileToDataURL(imgFile) {
        // 选择的文件是图片
        if (!imgFile || imgFile.type.indexOf('image') !== 0) {
            return
        }
        return new Promise((resolve, reject) => {
            // 压缩图片需要的一些元素和对象
            var reader = new FileReader()
            // 文件base64化,以便获知图片原始尺寸
            reader.onload = function (e) {
                resolve(e.target.result)
            }
            reader.onerror = function (e) {
                reject(e)
            }
            // 选择的文件是图片
            reader.readAsDataURL(imgFile)
        })
    },

7、计算base64图片大小

countBaseSize(base64url) {
        //获取base64图片大小,返回MB数字
        let str = base64url.replace('data:image/png;base64,', '')
        let equalIndex = str.indexOf('=')
        if (str.indexOf('=') > 0) {
            str = str.substring(0, equalIndex);
        }
        let strLength = str.length
        let fileLength = parseInt(strLength - (strLength / 8) * 2, 10)
        // 由字节转换为MB
        let size = ""
        size = (fileLength / (1024 * 1024)).toFixed(2)
        return size
    },

8、普通图片转化成base64

getImageBase64(img, ext) {
        let canvas = document.createElement("canvas")
        canvas.width = img.width
        canvas.height = img.height
        let ctx = canvas.getContext("2d")
        ctx.drawImage(img, 0, 0, img.width, img.height)
        let dataURL = canvas.toDataURL("image/" + ext)
        canvas = null
        return dataURL
    },

9、对于小于0的进行补零操作

addZero: (time) => {
        let newTime = time > 9 ? time : '0' + time
        return newTime
    },

10、将秒转成时分秒

/**
     * @method toStringBySecond 将秒转成时分秒
     * @param {String} second 要转换的秒
     * @param {String} typeStr = 'h:m:s' || '' ? 'h:m:s' : '时:分:秒'
     */
toStringBySecond(second, typeStr = 'h:m:s') {
        const sec = second < 60 ? this.addZero(second) : this.addZero(second % 60)
        const min = second < 60 ? '00' : second < 3600 ? this.addZero(parseInt(second / 60, 10)) : this.addZero(parseInt(second % 3600 / 60, 10))
        const hour = this.addZero(parseInt(second / 3600, 10))
        return typeStr === 'h:m:s' ? `${hour}:${min}:${sec}` : `${hour}${temp.$t('hour')}${min}${temp.$t('min')}${sec}${temp.$t('sec')}`
    },

11、将秒转成分秒

/**
     * @method toStringBySecond 将秒转成分秒
     * @param {String} second 要转换的秒
     * @param {String} typeStr = 'm:s' || '' ? 'm:s' : '分:秒'
     */
    toStringBySeconds(second, typeStr = 'm:s') {
        if (second === 0 || second === '') {
            return ''
        }
        const sec = second < 60 ? this.addZero(second) : this.addZero(second % 60)
        const min = second < 60 ? '00' : second < 3600 ? this.addZero(parseInt(second / 60, 10)) : this.addZero(parseInt(second % 3600 / 60, 10))
        return typeStr === 'm:s' ? `${min}:${sec}` : `${min}${temp.$t('min')}${sec}${temp.$t('sec')}`
    },

12、数组对象去重

/**
     * @method arrHeavy() 数组对象去重
     * @param sourceArr 原数组
     * @param keyArray 所要以什么字段为参考的数组
     */
    arrHeavy: (sourceArr, keyArray) => {
        let obj = {}
        let arr = []
        sourceArr.forEach((d) => {
            let str = ''
            keyArray.forEach((key) => {
                str += d[key] || d[key] === 0 ? d[key] + '$' : ''
            })
            if (!obj[str]) {
                arr.push(d)
                obj[str] = 1
            }
        })
        return arr
    },

//使用

ces.png

13、从数组对象中获取某个属性,组成新的数组

/**
     * @method getCodeFromArr() 从数组对象中获取某个属性,组成新的数组
     * @param {Array} sourceArr 数组对象
     * @param {Array} attr 希望从arr中获取的属性
     */
    getCodeFromArr: (sourceArr, attr) => {
        let arr = []
        sourceArr.forEach((item) => {
            let param = {}
            attr.forEach((key) => {
                param[key] = item[key]
            })
            arr.push(param)
        })
        return arr
    },

//使用

c22.png

14、guid() 生成uuid

 /**
     * @method guid() 生成uuid
     */
    guid: () => {
        function s4() {
            return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
        }
        return (s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + s4() + s4() + s4())
    },

15、getUTCTime()

getUTCTime: () => {
        var currentTime = new Date()
        return currentTime.getTime() + currentTime.getTimezoneOffset() * 60000
    },