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 相关文章推荐
[原创]用javascript实现检测指定目录是否存在的方法
Jan 12 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
Sep 29 Javascript
javascript(js)的小数点乘法除法问题详解
Mar 07 Javascript
javascript模拟命名空间
Apr 17 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
Dec 08 Javascript
JavaScript中localStorage对象存储方式实例分析
Jan 12 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
Nov 20 Javascript
javascript面向对象三大特征之继承实例详解
Jul 24 Javascript
Vue.js实现大屏数字滚动翻转效果
Nov 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
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
用php实现的下载css文件中的图片的代码
2010/02/08 PHP
ThinkPHP分页实例
2014/10/15 PHP
以文件形式缓存php变量的方法
2015/06/26 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
package.json文件配置详解
2017/06/15 Javascript
使用D3.js制作图表详解
2017/08/13 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
python的正则表达式re模块的常用方法
2013/03/09 Python
python实现超简单端口转发的方法
2015/03/13 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
Python lambda函数基本用法实例分析
2018/03/16 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
银行求职推荐信范文
2013/11/30 职场文书
生物技术专业毕业生求职信范文
2013/12/14 职场文书
学校安全检查制度
2014/01/27 职场文书
正科级干部考察材料
2014/05/29 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
党校学习党性分析材料
2014/12/19 职场文书
大学生个人学年总结
2015/02/15 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
体育部部长竞选稿
2015/11/21 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python