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 相关文章推荐
原生js仿jquery animate动画效果
Jul 13 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
Aug 27 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
Mar 29 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
详解用vue.js和laravel实现微信支付
Jun 23 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
javascript中如何判断类型汇总
May 14 Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
Sep 01 Javascript
解决VUE双向绑定失效的问题
Oct 29 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
Aug 03 Javascript
前端框架ECharts dataset对数据可视化的高级管理
Dec 24 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
PHP数据过滤的方法
2013/10/30 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
jQuery 名称冲突的解决方法
2011/04/08 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
python学生管理系统
2019/01/30 Python
Python笔试面试题小结
2019/09/07 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
思想专业自荐信范文
2013/12/25 职场文书
大学生评语大全
2014/04/18 职场文书
社区矫正工作方案
2014/06/04 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
大学生自荐信范文
2015/03/05 职场文书
出国导师推荐信
2015/03/25 职场文书
药店营业员岗位职责
2015/04/14 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL