vue 檢測用戶上傳圖片寬高的方法
需求:
用戶可上傳3-6張圖片(第 1 2 3 張必須傳),上傳的圖片必須是540 * 330 像素。
第一步,獲取上傳的圖片的寬高。
初始化一個對象數(shù)組,寬高均設(shè)為0。
如果用戶上傳的圖片沒有上限,可以動態(tài)修改這個對象數(shù)組。
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)
}
})
}
},
關(guān)鍵的代碼用紅色標出了。
值得注意的是:獲取寬高必須用 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 都是二階數(shù)組。數(shù)字是符合要求的值。
f1 是檢驗?zāi)骋粡垐D寬高的函數(shù),傳入寬高值、下標(第幾張)、類型(width height),返回布爾值,false表示圖片寬高不符合要求(或者沒有傳圖)。
執(zhí)行 imageCheck 方法的時候會直接執(zhí)行循環(huán),如果發(fā)現(xiàn)圖片不符合要求就跳出并返回 false 給函數(shù)外。
里循環(huán)中的 x 代表類型,i 代表下標。
使用:在提交時執(zhí)行 imageCheck 方法即可。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue數(shù)據(jù)驅(qū)動試圖的實現(xiàn)方法及原理
當Vue實例中的數(shù)據(jù)(data)發(fā)生變化時,與之相關(guān)聯(lián)的視圖(template)會自動更新,反映出最新的數(shù)據(jù)狀態(tài), Vue的數(shù)據(jù)驅(qū)動視圖是通過其響應(yīng)式系統(tǒng)實現(xiàn)的,以下是Vue數(shù)據(jù)驅(qū)動視圖實現(xiàn)的核心原理,需要的朋友可以參考下2024-10-10
Vue3處理大數(shù)據(jù)量渲染和優(yōu)化的方法小結(jié)
在現(xiàn)代Web應(yīng)用中,隨著用戶數(shù)據(jù)和交互的復雜性增加,如何高效地處理大數(shù)據(jù)量渲染成為了前端開發(fā)的重要環(huán)節(jié),本文將以Vue 3為例,探討如何優(yōu)化大數(shù)據(jù)量渲染,提升應(yīng)用性能,需要的朋友可以參考下2024-07-07
Vue使用v-model收集各種表單數(shù)據(jù)、過濾器的示例詳解
這篇文章主要介紹了Vue使用v-model收集各種表單數(shù)據(jù)、過濾器的示例,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-08-08
vue2如何使用face-api.js實現(xiàn)人臉識別功能
本文介紹了如何在Vue.js項目中利用face-api.js實現(xiàn)人臉識別功能,首先需要安裝Vue.js和face-api.js以及其依賴TensorFlow.js,接著,下載并配置必要的模型文件到項目目錄,之后,將人臉識別功能封裝成Vue組件,并在組件中通過視頻流進行人臉檢測和結(jié)果展示2024-09-09

