vue : 检测用户上传的图片的宽高
需求:
用户可上传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 方法即可。
vue : 检测用户上传的图片的宽高的更多相关文章
- AntDesign VUE:上传组件图片/视频宽高、文件大小、image/video/pdf文件类型等限制(Promise、Boolean)
文件大小限制 - Promise checkFileSize(file, rules) { return new Promise((resolve, reject) => { file.size ...
- vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案
现在前端基本不是vue技术栈就是react技术栈. vue技术栈最常用的就是element-ui的ui框架了. 在项目中,我们经常会碰到这种需求:批量上传文件 element-ui 确实也为我们提供了 ...
- BBS(第三天) 如何吧用户上传的图片文件保存到本地
1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务器会对外公开一下服务器静 ...
- elementUI 图片上传限制上传图片的宽高
文件上传,需当上传的文件类型为图片的时候,需要限制图片的宽高. 此处采用了new Promise异步加载的方式,等图片上传加载完成后, 页面代码: <el-form-item label=&qu ...
- vue element-ui 组件上传图片 以及对 图片的 宽高 和 大小 格式等 做出限制
vue 文件: 自行引用 elemen-ui <el-upload action=" 让后端给你上传地址 " ...
- js上传压缩图片
原文链接:http://blog.csdn.net/iefreer/article/details/53039848 手机用户拍的照片通常会有2M以上,这对服务器带宽产生较大压力. 因此在某些应用下( ...
- MVC应用程序显示上传的图片
MVC应用程序显示上传的图片 前两篇<MVC应用程序实现上传文件>http://www.cnblogs.com/insus/p/3590907.html和<MVC应用程序实现上传文件 ...
- Django项目实战之用户上传与访问
1 将文件保存到服务器本地 upload.html <!DOCTYPE html> <html lang="en"> <head> <me ...
- easyui+webuploader+ckeditor实现插件式多图片上传-添加图片权限(图片上传人是谁,只能看到自己的图片)
需求: 实现过程及思路 1.先页面布局 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=" ...
随机推荐
- Jmeter工具环境搭建
Jmeter工具什么 1 多线程框架-支持多并发操作 2 用于对服务器模拟负载 3 支持web,数据库,FTP服务器系统的性能测试 4 开源,可二次定制开发 下载Java JDK 下载地址: http ...
- 报错 version `GLIBCXX_3.4.22' not found
from . import pypocketfft as pfft ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GL ...
- 栈的顺序存储和链式存储c语言实现
一. 栈 栈的定义:栈是只允许在一端进行插入或删除操作的线性表. 1.栈的顺序存储 栈顶指针:S.top,初始设为-1 栈顶元素:S.data[S.top] 进栈操作:栈不满时,栈顶指针先加1,再到栈 ...
- 《算法笔记》6.6小节 问题 A: 任务调度
这道题我一开始看到的时候,想到的是拓补排序,可是这么菜又这么懒的我怎么可能用呢,既然出现在优先队列里面,那么久一定和他有关了 可是并没有使用优先队列 思路: 对于这道题,我们肯定是对他们定义优先级,然 ...
- 07 . Kubernetes之Service
kubernetes有三种网络 1. Node Network 2. Pod Network 3. Cluster Network Service-网络代理模式 **userspce: 1.1- ** ...
- Mac安装文件已勾选“允许任何来源”,还是提示“文件已损坏”的解决方案
Mac安装文件已勾选"允许任何来源",还是提示"文件已损坏"的解决方案 打开终端,在终端中粘贴下面命令:[sudo xattr -r -d com.apple. ...
- IdentityServer4 4.x版本 配置Scope的正确姿势
前言 IdentityServer4 是为ASP.NET Core系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证的框架 IdentityServer4官方文档:ht ...
- css如何设置不可点击?
通过设置元素的pointer-events属性设置为none,来实现元素不可点击.此方法是通过设置元素的鼠标事件失效来实现元素不可点击. css设置不可点击: css代码: .disable { po ...
- Docker容器和镜像的区别
docker容器和镜像区别 转自 https://www.cnblogs.com/bethal/p/5942369.html 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(conta ...
- Django---进阶2
目录 数据的查,改,删 django orm中如何创建表关系 django请求生命周期流程图(必会) 路由层 路由匹配 无名分组 有名分组 无名有名是否可以混合使用 反向解析 作业 数据的查,改,删 ...