当前位置 主页 > 网站技术 > 代码类 >

    vue 检测用户上传图片宽高的方法

    栏目:代码类 时间:2020-02-06 21:09

    需求:

    用户可上传3-6张图片(第 1 2 3 张必须传),上传的图片必须是540 * 330 像素。

    第一步,获取上传的图片的宽高。

    初始化一个对象数组,宽高均设为0。

    如果用户上传的图片没有上限,可以动态修改这个对象数组。

    data:

      picArray:[
      {
       width:0,
       height:0
      },
      {
       width:0,
       height:0
      },
      {
       width:0,
       height:0
      },
      {
       width:0,
       height:0
      },
      {
       width:0,
       height:0
      },
      {
       width:0,
       height:0
      }
      ],

    HTML:

    <myupload :keys="index" @getBase="getUpImg">
        
    </myupload>

    myupload是上传图片的组件,略。 

    methods:

     getUpImg(imgurl, keys){
      if(keys === 9){
      this.submitData.logo_img = imgurl
      this.logoImgCount = true
      } else {
      Vue.set(this.imgListArray,keys,imgurl)
      
      this.$nextTick(function(){
       let img = document.getElementById('picId' + keys)
       // console.log(img)
       let picArray = this.picArray
       img.onload = function () {
       console.log(keys)
       console.log(this.naturalWidth)
       console.log(this.naturalHeight)
       let o = {
        width: this.naturalWidth,
        height: this.naturalHeight
       }
       Vue.set(picArray,keys,o)
       console.log('picArray', picArray)
       }
      })
      }  
     },
    

    关键的代码用红色标出了。

    值得注意的是:获取宽高必须用 this.$nextTick ,里面再写 img.onload 。this.naturalWidth 是图片原本的宽高。此时 this 指的是当前图片对象。

     第二步,提交之前检验图片的宽高。

    methods:

     imageCheck(){
      let checkboolean = true
      let check = {
      'width': [[540],[0,540]],
      'height': [[330],[0,330]]
      }
      let f1 = function (num,index,type) {
      let n = num
      let i = index
      let t = type
      let b = false
      // console.log(n,i,t)
      for (let x = 0; x < check[type][i].length; x++) {
       if (check[type][i][x] === num) {
       // console.log('>>>>>>>>>>>>>' + check[type][i][x] + '===' + num + '>>>>>>>>>>>>>>>>' )
       b = true
       }   
      }
      return b
      }
      for (let i = 0; i < this.picArray.length; i++) {
    
      let cb = true
    
      for (let x in this.picArray[i]) {
       let number = this.picArray[i][x]
       // console.log(x,number)
       if (x === 'width' && i < 3) {
       checkboolean = f1(number, 0, 'width')
       if (!checkboolean) {
        // console.log('=================',i,x,number,'return false')
        cb = false
        break
       }
       } else if (x === 'width' && i >= 3) {
       checkboolean = f1(number, 1, 'width')
       if (!checkboolean) {
        // console.log('=================',i,x,number,'return false')
        cb = false
        break
       }
       } else if (x === 'height' && i < 3) {
       checkboolean = f1(number, 0, 'height')
       if (!checkboolean) {
        // console.log('=================',i,x,number,'return false')
        cb = false
        break
       }
       } else if (x === 'height' && i >= 3) {
       checkboolean = f1(number, 1, 'height')
       if (!checkboolean) {
        // console.log('=================',i,x,number,'return false')
        cb = false
        break
       }
       }
      }
    
      if (!cb) {
       break
      }
      }
      return checkboolean
     },
    
    
    // sumbit function
    ...
      if(!this.imageCheck()){
      this.$message({
       message: this.MASSAGE_imagecheck,
       type: 'error'
      });
      return false
      }
      alert('可以传图')
    ...
    
    
    
CallmeJust:从一个面试官的角度谈软件工程师的面试 小创:React 入门-redux 和 react-redux Mr-Tsing:Redis-第五章节-8种数据类型 leesf:Lakehouse: 统一数据仓库和高级分析的新一代开放平台 嵌入式与Linux那些事:程序员如何写一份合格的简历?(附简历模 zzssdd2:QT串口助手(三):数据接收 NeilZhang:对“微信十年产品思考”的思考 r1chard:一种获取context中keys和values的高效方法 | golang 熊泽-学习中的苦与乐:温习数据算法―贪吃蛇 小林coding:图解 ECDHE 密钥交换算法 c语言程序从哪里开始执行 c++清屏函数是什么 c++中不能重载的运算符有哪些 企业需谨防域名被抢注 互联网时代创业 价值共创时代 linux远程拷贝文件命令rcp,远程文件复制 linux远程拷贝文件夹命令, scp远程拷贝文件及文件夹写法 linux远程拷贝文件断点续传(linux限速和断点续传) linux远程拷贝文件到本地命令(复制远程主机上的文件到本地) linux远程拷贝文件到本地命令及用法 利用Python函数实现一个万历表完整示例 Python字符串对齐、删除字符串不需要的内容以及格式化打印字符 Java中ArrayList集合的常用方法大全 一个简单的Spring容器初始化流程详解 js简单粗暴的发布订阅示例代码 godoc命令不存在的解决方法 python获取当前时间 教你用php读写csv格式的文件 网站优化中怎么提高网站的转化率? 互联网的归宿和轻重结合的新市场