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 相关文章推荐
IE6下js通过css隐藏select的一个bug
Aug 16 Javascript
使用jquery实现select添加实现后台权限添加的效果
May 28 Javascript
jquery利用event.which方法获取键盘输入值的代码
Oct 09 Javascript
javascript不可用的问题探究
Oct 01 Javascript
jquery分页对象使用示例
Apr 01 Javascript
编写自己的jQuery提示框(Tip)插件
Feb 05 Javascript
jquery动态改变div宽度和高度
Feb 09 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
Jul 01 Javascript
详解AngularJs中$resource和restfu服务端数据交互
Sep 21 Javascript
深入理解基于vue-cli的vuex配置
Jul 24 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
Nov 22 Javascript
flexible.js实现移动端rem适配方案
Apr 07 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基础知识:控制结构
2006/12/13 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
图片自动更新(说明)
2006/10/02 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
js实现仿Discuz文本框弹出层效果
2015/08/13 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
Python ljust rjust center输出
2008/09/06 Python
python 实现归并排序算法
2012/06/05 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
Python列表解析配合if else的方法
2018/06/23 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python修改列表值问题解决方案
2020/03/06 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
党课知识竞赛主持词
2014/04/01 职场文书
党支部综合考察意见
2015/06/01 职场文书
教师节晚会主持词
2015/06/30 职场文书
早安问候语大全
2015/11/10 职场文书
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技