• vue : 检测用户上传的图片的宽高


    需求:

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

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

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

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

    data:

          picArray:[
            {
              0,
              height:0
            },
            {
              0,
              height:0
            },
            {
              0,
              height:0
            },
            {
              0,
              height:0
            },
            {
              0,
              height:0
            },
            {
              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 = {
                   this.naturalWidth,
                  height: this.naturalHeight
                }
                Vue.set(picArray,keys,o)
                console.log('picArray', picArray)
              }
            })
          }      
        },

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

    值得注意的是:获取宽高必须用 this.$nextTick ,里面再写 img.onloadthis.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('可以传图') ...

    $message 是elementUI的组件。

    imageCheck 就是检验图片宽高用的方法。返回布尔值,false表示图片宽高不符合要求(或者没有传图)。

    其中:

    checkboolean 是最终要返回的布尔值。

    check 是装载合法宽高值的对象。因为后3张图可传可不传,所以 width 和 height 都是二阶数组。数字是符合要求的值。

    f1 是检验某一张图宽高的函数,传入宽高值、下标(第几张)、类型(width height),返回布尔值,false表示图片宽高不符合要求(或者没有传图)。

    执行 imageCheck 方法的时候会直接执行循环,如果发现图片不符合要求就跳出并返回 false 给函数外。

    里循环中的 x 代表类型,i 代表下标。

    使用:在提交时执行 imageCheck 方法即可。

  • 相关阅读:
    双屏显示器
    Cheat Engine Tutorial v3翻译Cheat Engine 6.1 tutorial(3)
    [转]VC6创建UNICODE版Windows程序
    fread
    [转]回调函数在MFC中的使用
    [转]C++ 虚函数表解析
    [转]C/C++返回内部静态成员的陷阱
    [转]EVC 中 include 的错误
    【rgw压缩】
    【ceph | 运维】rgw重置
  • 原文地址:https://www.cnblogs.com/foxcharon/p/9371930.html
Copyright © 2020-2023  润新知