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 相关文章推荐
如何阻止复制剪切和粘贴事件为了表单内容的安全
May 23 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
Jun 26 Javascript
jquery实现增加删除行的方法
Feb 03 Javascript
jQuery超赞的评分插件(8款)
Aug 20 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
Oct 19 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
JavaScript代码实现图片循环滚动效果
Mar 19 Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 Javascript
Vue+axios 实现http拦截及路由拦截实例
Apr 25 Javascript
详解如何在项目中使用jest测试react native组件
Feb 09 Javascript
安装Node.js并启动本地服务的操作教程
May 12 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
Sep 25 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中用文本文件做数据库的实现方法
2008/03/27 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
JS 表单验证大全
2011/11/23 Javascript
JavaScript之IE的fireEvent方法详细解析
2013/11/20 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
python中as用法实例分析
2015/04/30 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
基于python调用psutil模块过程解析
2019/12/20 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
电大自我鉴定
2013/10/27 职场文书
机电一体化大学生求职信
2013/11/08 职场文书
大学自我评价
2014/02/12 职场文书
商标侵权律师函
2015/05/27 职场文书
图文详解matlab原始处理图像几何变换
2021/07/09 Python