日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

基于Vue2實(shí)現(xiàn)移動(dòng)端圖片上傳、壓縮、拖拽排序、拖拽刪除功能

瀏覽:31日期:2022-10-12 14:40:38

用Vue2實(shí)現(xiàn)移動(dòng)端圖片上傳、壓縮、拖拽排序、拖拽刪除功能 圖片上傳圖片壓縮拖拽排序、拖拽刪除 之前在公司開發(fā)過一段時(shí)間的移動(dòng)端H5頁面,有個(gè)功能就是要上傳圖片+壓縮。參考了一下網(wǎng)上的方法,外加自己摸索的過程,最終實(shí)現(xiàn)了這個(gè)功能。后面在家閑的時(shí)候又加多了個(gè)長按選中圖片,并且可以拖拽排序、拖拽到指定位置刪除的功能。

github地址:代碼地址

下面直接進(jìn)入正題:

圖片上傳

圖片上傳用的是HTML的input標(biāo)簽實(shí)現(xiàn)的。核心就是把獲取到的文件通過FileReader轉(zhuǎn)換成圖片,代碼如下:

<input type='file' accept='image/*' capture='camera' @change='selectFile'>selectFile(event:any){ this.showAlert = false if (event.target.files && event.target.files.length > 0) { this.isLoading = true let file:any = event.target.files[0] let fr:any = new FileReader() fr.readAsDataURL(file) fr.onload = (imgObj:any) => { let img:any = new Image() img.src = imgObj.target.result img.onload = (e:any) => { // 這里就可以獲取到上傳的圖片了 }) } } }}圖片壓縮

圖片壓縮用的是canvas重繪的方法實(shí)現(xiàn)的,具體代碼如下:

// 省略上面的代碼fr.onload = (imgObj:any) => {// 獲取到圖片文件后 let img:any = new Image() img.src = imgObj.target.result img.onload = (e:any) => { Compress(img,e.path[0].height,e.path[0].width,(newImg:any) => { this.imgList.push(newImg) this.isLoading = false // 待添加拖拽功能 }) }}/** * 圖片壓縮 * @param img 圖片對(duì)象 */export function Compress(img:any,height:number,width:number,callback:Function) { let canvas:any = document.createElement(’canvas’) let context:any = canvas.getContext(’2d’) canvas.width = width canvas.height = height context.clearRect(0,0,width,height) context.drawImage(img,0,0,width,height) callback(canvas.toDataURL('image/jpeg', 0.75))}拖拽排序、拖拽刪除

拖拽排序、拖拽到指定位置刪除是通過監(jiān)聽touch事件來實(shí)現(xiàn)的。核心思路:1、獲取到圖片dom元素,給圖片dom元素添加ontouchstart、ontouchend、ontouchmove 方法。2、在ontouchstart方法中new一個(gè)時(shí)間節(jié)點(diǎn),在ontouchend中也new一個(gè)時(shí)間節(jié)點(diǎn),通過判斷兩個(gè)時(shí)間節(jié)點(diǎn)之間的時(shí)間間隔判斷是點(diǎn)擊事件還是長按事件。3、ontouchstart中設(shè)置settimeout方法是延時(shí)判斷是點(diǎn)擊方法還是長按方法,如果是長按方法的則獲取圖片的所在頁面中的位置,設(shè)置圖片的位置為點(diǎn)擊屏幕的位置,改變圖片的布局方式,在ontouchmove方法中設(shè)置圖片的位置跟隨觸摸屏幕的位置變化。4、移動(dòng)圖片后松開手時(shí),觸發(fā)ontouchend方法,判斷手指離開后,圖片所在的位置是否處在刪除的區(qū)域當(dāng)中,如果在則刪除圖片,并且重新渲染圖片列表,重新添加touch方法。如果不在刪除的區(qū)域中,則進(jìn)行圖片位置排序,排序后還原圖片樣式。并強(qiáng)制重新渲染圖片列表。

代碼如下:

Compress(img,e.path[0].height,e.path[0].width,(newImg:any) => { this.imgList.push(newImg) this.isLoading = false // 在這里給加入方法 setTimeout(() => { this.addTouchEvent() });})addTouchEvent(){ let domList:any = document.querySelectorAll(’.show-img’) if (domList) { let domMoveFlag:boolean = true domList.forEach((item:any,index:any) => { item.ontouchstart = null item.ontouchmove = null item.ontouchend = null item.ontouchstart = (startEvent:any) => { startEvent.preventDefault() console.log(startEvent) this.touchStartTime = new Date() setTimeout(() => { if (domMoveFlag) {console.log(’執(zhí)行元素位置操作過程’) this.showDeleteArea = true let domClient:any = item.getBoundingClientRect() console.log(domClient) this.firstPosition = { x:startEvent.changedTouches[0].pageX, y:startEvent.changedTouches[0].pageY } item.style.position = ’fixed’ item.style.height = domClient.height + ’px’ item.style.width = domClient.width + ’px’ item.style.top = domClient.top + ’px’ item.style.left = domClient.left + ’px’ item.style.padding = 0 item.style.zIndex = 9 // 添加拖拽事件 item.ontouchmove = (moveEvent:any) => { // console.log(moveEvent) item.style.top = moveEvent.changedTouches[0].pageY - this.firstPosition.y + domClient.top + ’px’ item.style.left = moveEvent.changedTouches[0].pageX - this.firstPosition.x + domClient.left + ’px’ } } }, 600); } item.ontouchend = (endEvent:any) => { let time:any = new Date() console.log(time - this.touchStartTime) if (time - this.touchStartTime <= 400) { domMoveFlag = false item.click() setTimeout(() => { this.addTouchEvent() }); } else { let newItemCenter:any = item.getBoundingClientRect() let centerY:any = newItemCenter.top + newItemCenter.height / 2 let centerX:any = newItemCenter.left + newItemCenter.width / 2 let deleteDom:any = document.querySelector('.deleteImg') let deleteArea:any = deleteDom.getBoundingClientRect() if (centerY >= deleteArea.top) { let _imgList = JSON.parse(JSON.stringify(this.imgList)) let currentImg:any = _imgList.splice(index,1) this.imgList = [] this.showDeleteArea = false setTimeout(() => { this.imgList = _imgList setTimeout(() => {this.addTouchEvent()}); }); return } this.showDeleteArea = false // 計(jì)算所有圖片元素所在頁面位置 let domParentList:any = document.querySelectorAll(’.imgCtn’) domParentList && domParentList.forEach((domParent:any,cindex:any) => { let domPos:any = (domParent.getBoundingClientRect()) if (centerY >= domPos.top&& centerY <= domPos.bottom&& centerX >= domPos.left && centerX <= domPos.right ) { // 重新排序 console.log(’在目標(biāo)區(qū)域內(nèi),重新排序’) let _imgList = JSON.parse(JSON.stringify(this.imgList)) let currentImg:any = _imgList.splice(index,1) _imgList.splice(cindex,0,...currentImg) this.imgList = [] setTimeout(() => {this.imgList = _imgListsetTimeout(() => { this.addTouchEvent() }); }); } }); // 還原樣式 item.style.position = ’absolute’; item.style.height = ’100%’ item.style.width = ’100%’ item.style.top = ’0’ item.style.left = ’0’ item.style.padding = ’10px’ } } }) }}

至此,圖片的上傳、壓縮、拖拽排序、拖拽刪除功能就已經(jīng)完成了。

到此這篇關(guān)于基于Vue2實(shí)現(xiàn)移動(dòng)端圖片上傳、壓縮、拖拽排序、拖拽刪除功能的文章就介紹到這了,更多相關(guān)vue實(shí)現(xiàn)圖片上傳拖拽排序內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本三级亚洲精品| 99精品视频精品精品视频| 日韩综合在线| 精品国产不卡一区二区| 毛片不卡一区二区| 精品视频高潮| 红桃视频亚洲| 国产精品精品国产一区二区| 精品日本视频| 影音国产精品| 日韩中文字幕区一区有砖一区| 亚洲手机视频| 中日韩男男gay无套| 日韩精品一区第一页| 99视频精品全国免费| 久久国产日韩欧美精品| 国产中文字幕一区二区三区| 欧美理论视频| 日本亚洲最大的色成网站www | 国产+成+人+亚洲欧洲在线| 亚洲免费一区三区| 亚洲精选av| 日韩美女精品| 国产精品久久| 91综合网人人| 亚洲电影在线一区二区三区| 在线国产日韩| 国产欧美精品| 久久精选视频| 午夜视频一区二区在线观看| 日韩三区免费| 日韩在线观看中文字幕| 777久久精品| 欧美日韩精品一区二区视频| 亚洲一区激情| 欧美亚洲国产一区| 国产精品久久久久久久久久久久久久久 | 国产一区二区三区视频在线| 日韩 欧美一区二区三区| 日韩不卡一二三区| 亚洲综合婷婷| 啪啪亚洲精品| 日韩免费高清| 久久亚洲美女| 国产精品99久久久久久董美香| 免费观看在线综合| 日本午夜免费一区二区| 成人日韩在线| 黄色免费成人| 亚洲国内精品| 欧美1级日本1级| 夜夜精品视频| 国产另类在线| 国产精品色婷婷在线观看| 欧美在线观看天堂一区二区三区| 中文精品电影| 欧美国产一级| 久久精品毛片| 亚洲一区二区av| 91精品一区国产高清在线gif| 日本一二区不卡| **爰片久久毛片| 亚洲精品亚洲人成在线观看| 欧美韩一区二区| 国产一区二区三区天码| 亚洲图片久久| 国产欧美日韩一区二区三区四区 | 日本午夜精品视频在线观看| 91欧美国产| 日本麻豆一区二区三区视频| 欧美日韩激情在线一区二区三区| 日韩成人免费| 国产精品亚洲片在线播放| 爽爽淫人综合网网站| 欧美精选视频一区二区| 国产高潮在线| 国产精品久久久久久久免费软件| 日韩一区二区三区在线看| 亚洲影视一区二区三区| 欧美va天堂| 神马久久午夜| 日本一区二区高清不卡| 亚洲精品极品| 日本不卡不码高清免费观看 | 女人av一区| 风间由美中文字幕在线看视频国产欧美| 97精品资源在线观看| 国产精品毛片| 噜噜噜躁狠狠躁狠狠精品视频| 日韩精品免费一区二区在线观看| 亚洲天堂1区| 女生影院久久| 免费看一区二区三区| 色婷婷精品视频| 免费av一区二区三区四区| 国产精品15p| 日本vs亚洲vs韩国一区三区二区| 日本欧美在线看| 日本一区二区三区视频在线看| 日本精品一区二区三区在线观看视频| 欧美视频一区| 欧美在线精品一区| 久久毛片亚洲| 日韩成人综合| 国产精品资源| 99视频在线精品国自产拍免费观看| 国产精品一线| 国产一区2区| 国产精品毛片一区二区在线看| 视频精品一区| 国产精品www.| 成人台湾亚洲精品一区二区| 在线视频精品| 精品一区电影| 美女视频一区在线观看| 国产成人精品一区二区三区视频 | 99re国产精品| 亚洲精品护士| 国产高清日韩| 偷拍精品精品一区二区三区| 日韩中文字幕亚洲一区二区va在线| 亚洲国产专区校园欧美| 西西人体一区二区| 国产一区亚洲| 精品国产黄a∨片高清在线| 麻豆成人91精品二区三区| 国产精品免费不| 欧美国产美女| 久久国产欧美| 9色国产精品| 欧美永久精品| 国产中文字幕一区二区三区| 欧美日韩精品免费观看视欧美高清免费大片| 999精品一区| 青青草国产成人99久久| 精品一区电影| 国产精品av一区二区| 中文在线资源| 亚洲精品在线二区| 日韩毛片视频| 久久不卡日韩美女| 久久av在线| 日本а中文在线天堂| 久久国产人妖系列| 欧美亚洲国产日韩| 色8久久久久| 不卡一区2区| 欧美成人精品一级| 99国产精品| 精品视频网站| 欧美精品三级在线| 麻豆mv在线观看| 国产精品地址| 日韩高清中文字幕一区二区| 欧美91在线| 国产在线|日韩| 日韩中文字幕一区二区高清99| 国产日韩电影| 久久91视频| 欧美精品一区二区三区精品| 99久久久久国产精品| 欧美日韩伊人| 亚洲一区二区三区四区电影| 自拍自偷一区二区三区| 一本色道久久精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产精品久久观看| 国产精品13p| 亚洲一区二区三区四区五区午夜| 成人精品高清在线视频| 日产精品一区| 久热re这里精品视频在线6| 日韩和欧美一区二区三区| 国产一区二区三区四区二区| 亚洲另类黄色| 亚洲免费专区| 国产一区二区三区免费在线| 欧美日韩水蜜桃| 国产精品22p| 在线日韩电影| 日韩欧美1区| 免播放器亚洲| 国产精品www.| 日韩国产一区| 日本aⅴ亚洲精品中文乱码| 欧美亚洲tv| 亚洲性视频h| 欧美亚洲三区| 免费在线成人| 麻豆精品av| 久久精品国产久精国产| 日韩在线免费| 日韩精品91| 国产一区二区三区久久| 亚洲女同av| 美女日韩在线中文字幕| 日韩欧美久久| 99久久亚洲精品蜜臀| 国产精品视频一区二区三区综合| 日韩精品久久久久久久电影99爱|