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


Posted in Javascript onFebruary 06, 2020

需求:

用户可上传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('可以传图')
...

$message 是elementUI的组件。

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

其中:

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

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

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

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在textarea中屏蔽js的某个function的javascript代码
Apr 20 Javascript
js实现快速分享功能(你的文章分享工具)
Jun 25 Javascript
javascript工厂方式定义对象
Dec 26 Javascript
JS获取鼠标相对位置的方法
Sep 20 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
node中使用es5/6以及支持性与性能对比
Aug 11 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
Sep 21 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
Dec 21 Javascript
vue和webpack打包项目相对路径修改的方法
Jun 15 Javascript
浅谈Vue 函数式组件的使用技巧
Jun 16 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
JS Canvas接口和动画效果大全
Apr 29 Javascript
vue中对象数组去重的实现
Feb 06 #Javascript
2019最新21个MySQL高频面试题介绍
Feb 06 #Javascript
node.JS路径解析之PATH模块使用方法详解
Feb 06 #Javascript
node.JS二进制操作模块buffer对象使用方法详解
Feb 06 #Javascript
JavaScript实现左右滚动电影画布
Feb 06 #Javascript
6种JavaScript继承方式及优缺点(小结)
Feb 06 #Javascript
使用node.JS中的url模块解析URL信息
Feb 06 #Javascript
You might like
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
PHP 基本语法格式
2009/12/15 PHP
php购物网站支付paypal使用方法
2010/11/28 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
php+ajax实现文章自动保存的方法
2014/12/30 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
python获得一个月有多少天的方法
2015/06/04 Python
理解Python垃圾回收机制
2016/02/12 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
python新手学习可变和不可变对象
2020/06/11 Python
秋季运动会表扬稿
2014/01/16 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
降价通知函
2015/04/23 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS