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中实现函数数组的方法
Dec 25 Javascript
javascript运行机制之this详细介绍
Feb 07 Javascript
DOM 事件的深入浅出(一)
Dec 05 Javascript
jQuery动态产生select option下拉列表
Mar 15 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
Jun 07 Javascript
教你如何用node连接redis的示例代码
Jul 12 Javascript
详解如何使用router-link对象方式传递参数?
May 02 Javascript
基于Vue中的父子传值问题解决
Jul 27 Javascript
JavaScript setTimeout()基本用法有哪些
Nov 04 Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
Nov 09 Javascript
vue中的可拖拽宽度div的实现示例
Apr 08 Vue.js
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和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
php检测文本的编码
2015/07/26 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
电气技术员岗位职责
2013/11/19 职场文书
元旦促销方案
2014/03/15 职场文书
诚信考试倡议书
2014/04/15 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
超市店庆活动方案
2014/08/31 职场文书
欢迎新生标语
2014/10/06 职场文书
保证书格式
2015/01/16 职场文书
关于长城的导游词
2015/01/30 职场文书
党员个人承诺书
2015/04/27 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
八一建军节主持词
2015/07/01 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫