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 相关文章推荐
JQuery 自定义CircleAnimation,Animate方法学习笔记
Jul 10 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
Sep 13 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
Jan 16 Javascript
引用外部脚本时script标签关闭的写法
Jan 20 Javascript
全面解析Bootstrap表单使用方法(表单样式)
Nov 24 Javascript
JavaScript判断对象是否为数组
Dec 22 Javascript
JavaScript 详解预编译原理
Jan 22 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 Javascript
react 创建单例组件的方法
Apr 26 Javascript
手把手教你实现 Promise的使用方法
Sep 02 Javascript
vue实现标签云效果的示例
Nov 09 Javascript
JavaScript中arguments的使用方法详解
Dec 20 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模拟HTTP认证
2006/10/09 PHP
PHP n个不重复的随机数生成代码
2009/06/23 PHP
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
php下Memcached入门实例解析
2015/01/05 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
YII框架http缓存操作示例
2019/04/29 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
Js+XML 操作
2006/09/20 Javascript
获取Javscript执行函数名称的方法
2006/12/22 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
简单的Python2.7编程初学经验总结
2015/04/01 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
django_orm查询性能优化方法
2018/08/20 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
python监控nginx端口和进程状态
2019/09/06 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
nohup的用法
2014/08/10 面试题
超市采购员岗位职责
2014/02/01 职场文书
高二物理教学反思
2014/02/08 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
无罪辩护词范文
2015/05/21 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
教师个人教学反思
2016/02/23 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
python游戏开发Pygame框架
2022/04/22 Python