设为首页 收藏本站
开启辅助访问 快捷导航
菜单
猿人部落 主页 资讯 查看内容

前端常用方法封装

2019-7-26 18:08 发布者: qiyu001 评论 0 查看 1057
1.图片压缩 /** * 图片base64转换 图片压缩 * @param this * @param file * @param {boolean} 选参,默认压

1.图片压缩


/**
 * 图片base64转换 图片压缩
 * @param  this
 * @param  file
 * @param  {boolean} 选参,默认压缩
 * @param {Array}  选参,默认支持的图片范例 jpeg ,png ,bmp
 * @param {Number}  选参,默认10M
 * @param {Number}  选参,压缩图片目标宽度,默认413px
 * @param {Number} 选参,压缩图片目标高度,默认626px
 * @param {Number} 选参,导出的图片质量,默认值是0.85
 * @date 2019/03/22
 * @version 0.0.1
 */
export const UPLOAD_PICTURE = function (obj, file, zip = true, fileType = ['jpeg', 'png', 'bmp'], s = 10, w = 413, h = 626, q = 0.85) {
  let that = obj
  return new Promise(function (resolve, reject) {
    // 限定图片巨细
    const isLt10M = file.size / 1024 / 1024 < s

    // 限定图片格式
    let isFormat = 0
    for (var i = 0; i < fileType.length; i++) {
      if ('image/' + fileType[i] === file.type) {
        isFormat++
      }
    }
    let ft = fileType.join(',')
    if (!isFormat) {
      return that.$message.error(`上传头像图片仅限于 ${ft} 格式!`)
    }

    if (!isLt10M) {
      that.$message.error(`上传头像图片巨细不能凌驾 ${s}MB!`)
      return false
    }

    // 选择的文件是图片
    if (file.type.indexOf('image') === 0) {
      // 压缩图片须要的一些元素和对象
      let reader = new FileReader()
      // 创建一个img对象
      let img = new Image()

      reader.readAsDataURL(file)
      // 文件base64化,以便获知图片原始尺寸
      reader.onload = function (e) {
        img.src = e.target.result
        if (!zip) {
          resolve(img.src)
        }
      }

      if (!zip) {
        return false
      }

      // base64地点图片加载完毕后实验
      img.onload = function () {
        // 缩放图片须要的canvas(也可以在DOM中直接界说canvas标签,如许就能把压缩完的图片不转base64也能直接体现出来)
        let canvas = document.createElement('canvas')
        let context = canvas.getContext('2d')

        // 图片原始尺寸
        let originWidth = this.width
        let originHeight = this.height

        // 最大尺寸限定,可通过设置宽高来实现图片压缩水平
        let maxWidth = w
        let maxHeight = h
        // 目标尺寸
        let targetWidth = originWidth
        let targetHeight = originHeight
        // 图片尺寸凌驾300x300的限定
        if (originWidth > maxWidth || originHeight > maxHeight) {
          if (originWidth / originHeight > maxWidth / maxHeight) {
            // 更宽,按照宽度限定尺寸
            targetWidth = maxWidth
            targetHeight = Math.round(maxWidth * (originHeight / originWidth))
          } else {
            targetHeight = maxHeight
            targetWidth = Math.round(maxHeight * (originWidth / originHeight))
          }
        }
        // canvas对图片举行缩放
        canvas.width = targetWidth
        canvas.height = targetHeight
        // 扫除画布
        context.clearRect(0, 0, targetWidth, targetHeight)
        // 图片压缩
        context.drawImage(img, 0, 0, targetWidth, targetHeight)
        /* 第一个参数是创建的img对象;第二三个参数是左上角坐标,背面两个是画布地域宽高 */

        // 压缩后的图片转base64 url
        /* canvas.toDataURL(mimeType, qualityArgument),mimeType 默认值是'image/png';
         * qualityArgument体现导出的图片质量,只有导出为jpeg和webp格式的时间此参数才有用,默认值是0.92 */
        let newUrl = canvas.toDataURL('image/jpeg', q)// base64 格式
        resolve(newUrl)
      }
    }
  })
}
/**
 * 图片base64转换 裁剪图片
 * @param  myCroppa
 */
export const UPLOAD_PICTURE_CROP = function (myCroppa) {
  return new Promise(function (resolve, reject) {
    myCroppa.generateBlob((blob) => {
      // console.log(blob)
      resolve(myCroppa.generateDataUrl())
    }, 'image/png', 1.0)
  })
}
  1. 深拷贝
/**
 * 深拷贝对象,可以精确序列化日期
 * @param {*} obj
 */
export const DEEP_CLONE = function (obj) {
  let objClone = Array.isArray(obj) ? [] : {}
  if (obj && typeof obj === 'object') {
    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        // 判定ojb子元素是否为对象,假如是,递归复制
        if (obj[key] && typeof obj[key] === 'object') {
          // 深拷贝日期范例
          if (obj[key] instanceof Date) {
            objClone[key] = new Date(obj[key].valueOf())
            // console.log('deepClone', objClone[key])
          } else {
            objClone[key] = DEEP_CLONE(obj[key])
          }
        } else {
          // 假如不是,简朴复制
          objClone[key] = obj[key]
        }
      }
    }
  }
  return objClone
}



路过

雷人

握手

鲜花

鸡蛋
收藏 邀请
上一篇:今天开始写一下学习java中级每一天的知识点总结下一篇:手机上30%的实用功能都被遗忘,赶快了解下实用功能有哪些

相关阅读

一周热门

头条攻略!

日排行榜

相关分类