最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 實(shí)現(xiàn)剪裁圖片并上傳服務(wù)器功能

 更新時(shí)間:2018年03月01日 10:50:15   作者:phoebeCodeSpace  
這篇文章主要介紹了vue 實(shí)現(xiàn)剪裁圖片并上傳服務(wù)器功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

預(yù)覽鏈接點(diǎn)擊預(yù)覽

效果圖如下所示,大家感覺(jué)不錯(cuò),請(qǐng)參考實(shí)現(xiàn)代碼。

 

需求

  • [x] 預(yù)覽:根據(jù)選擇圖像大小自適應(yīng)填充左側(cè)裁剪區(qū)域
  • [x] 裁剪:移動(dòng)裁剪框右側(cè)預(yù)覽區(qū)域可實(shí)時(shí)預(yù)覽
  • [x] 上傳&清空:點(diǎn)擊確認(rèn)上傳裁剪圖片,點(diǎn)擊取消按鈕清空?qǐng)D像
  • [ ] 裁剪框可調(diào)節(jié)大小

實(shí)現(xiàn)步驟

methods:funName() - 對(duì)應(yīng)源碼中methods中的funName方法

data:dataName - 對(duì)應(yīng)源碼中data中的dataName數(shù)據(jù)

1. 圖片選擇與讀取

  • 選擇圖片 :(methods:selectPic) 使用 input[type="file"] 彈出選擇圖片框,js 主動(dòng)觸發(fā)點(diǎn)擊事件;
  • 讀取圖片 : (methods:readImage) 創(chuàng)建圖片對(duì)象,使用createObjectURL顯示圖片。 objectURL = URL.createObjectURL(blob) ;

2. 在canvas中展示圖片

需要掌握的 canvas 相關(guān)知識(shí):

  1. 清空畫(huà)布 ctx.clearRect(x,y,width,height) ;
  2. 填充矩形 ctx.fillRect(x,y,width,height) ;
  3. 繪制圓弧 ctx.arc(x,y,r,startAngle,endAngle,counterclockwise) ; 繪制矩形 ctx.rect(x,y,width,height);
  4. 繪制圖像drawImage

 

# 語(yǔ)法
 ctx.drawImage(image, dx, dy);
 ctx.drawImage(image, dx, dy, dWidth, dHeight);
 ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
 # 參數(shù)
 image    # 繪制的元素(可以為HTMLImageElement,HTMLVideoElement,或者 HTMLCanvasElement。)
 dx,dy    # 目標(biāo)畫(huà)布(destination canvas)左上角的坐標(biāo)
 dWidth,dHeight  # 目標(biāo)畫(huà)布(destination canvas)上繪制圖像寬高
 sx,sy    # 源畫(huà)布(source canvase)左上角的坐標(biāo)
 sWidth,sHeight  # 源畫(huà)布(source canvase)選擇的圖像寬高

5.剪裁圖片 ctx.clip() ;

具體步驟:

  • 計(jì)算canvas寬高 :(methods:calcCropperSize) 根據(jù)圖片大小,計(jì)算canvas寬高(data:cropperCanvasSize),以致圖片能夠在裁剪區(qū)域自適應(yīng)展示,并確定裁剪的左上角位置(data:cropperLocation)。
  • 繪制左側(cè)裁剪區(qū)域圖像 :(methods:renderCropperImg)

裁剪區(qū)域vue data示意圖:

 

  • 繪制右側(cè)預(yù)覽圖片 :(methods:renderPreviewImg)

3. 移動(dòng)裁剪框

知識(shí)點(diǎn): onmousedown、onmousemove、onmouseup

具體實(shí)現(xiàn):

methods:drag()

記錄鼠標(biāo)坐標(biāo),鼠標(biāo)移動(dòng)根據(jù)偏移量計(jì)算圓心位置。

canvas.onmousedown = e => {
  let [lastX, lastY] = [e.offsetX, e.offsetY];
  self.movement = true;
  canvas.onmousemove = e => {
   self.circleCenter = {
   X:
    self.cropperCanvasSize.width > 2 * self.slectRadius
    ? self.circleCenter.X + (e.offsetX - lastX)
    : self.cropperCanvasSize.width / 2,
   Y:
    self.cropperCanvasSize.height > 2 * self.slectRadius
    ? self.circleCenter.Y + (e.offsetY - lastY)
    : self.cropperCanvasSize.height / 2
   };
   self.renderCropperImg();
   [lastX, lastY] = [e.offsetX, e.offsetY];
  };
  canvas.onmouseup = e => {
   self.movement = false;
   canvas.onmousemove = null;
   canvas.onmouseup = null;
  };
  };

4. 上傳圖片至服務(wù)器

知識(shí)點(diǎn):

具體實(shí)現(xiàn):

methods:upload()
this.$refs.preview.toBlob((blob)=> {
  const url = URL.createObjectURL(blob);
  const formData = new FormData();
  formData.append(this.uploadProps.name, blob, `${Date.now()}.png`);
  if(this.data){
   Object.keys(this.uploadProps.data).forEach(key => {
    formData.append(key, this.uploadProps.data[key]);
   });
  }
  const request = new XMLHttpRequest();
  request.open("POST", this.uploadProps.action, true);
  request.send(formData);
  request.onreadystatechange = () => {
   if (request.readyState === 4 && request.status === 200) {
    // ...
   }
  };
  });

總結(jié)

以上所述是小編給大家介紹的vue 實(shí)現(xiàn)剪裁圖片并上傳服務(wù)器功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 基于Vue3實(shí)現(xiàn)前端埋點(diǎn)上報(bào)插件并打包發(fā)布到npm的詳細(xì)過(guò)程

    基于Vue3實(shí)現(xiàn)前端埋點(diǎn)上報(bào)插件并打包發(fā)布到npm的詳細(xì)過(guò)程

    這篇文章主要介紹了基于Vue3實(shí)現(xiàn)一個(gè)前端埋點(diǎn)上報(bào)插件并打包發(fā)布到npm,本項(xiàng)目采用pnpm進(jìn)行Monorepo環(huán)境搭建,因?yàn)槲磥?lái)這個(gè)項(xiàng)目可能會(huì)加入更多的工具包,需要的朋友可以參考下
    2022-10-10
  • Vue路由組件傳遞參數(shù)的六種場(chǎng)景

    Vue路由組件傳遞參數(shù)的六種場(chǎng)景

    在Vue應(yīng)用程序中,路由組件是構(gòu)建單頁(yè)應(yīng)用的關(guān)鍵部分,傳遞參數(shù)給路由組件可以讓我們動(dòng)態(tài)地展示內(nèi)容,處理用戶(hù)輸入,以及實(shí)現(xiàn)各種交互功能,本文就給大家介紹了六種Vue路由組件傳遞參數(shù)場(chǎng)景,需要的朋友可以參考下
    2023-09-09
  • 利用Vue+intro.js實(shí)現(xiàn)頁(yè)面新手引導(dǎo)流程功能

    利用Vue+intro.js實(shí)現(xiàn)頁(yè)面新手引導(dǎo)流程功能

    在同學(xué)們使用某些網(wǎng)站的新版本頁(yè)面的時(shí)候,經(jīng)常會(huì)出現(xiàn)一個(gè)類(lèi)似于新手引導(dǎo)一樣的效果,來(lái)幫助同學(xué)們更好的熟悉新版本頁(yè)面的功能和使用,這篇文章主要給大家介紹了關(guān)于如何利用Vue+intro.js實(shí)現(xiàn)頁(yè)面新手引導(dǎo)流程功能的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • vue如何把字符串中的所有@內(nèi)容,替換成帶標(biāo)簽的

    vue如何把字符串中的所有@內(nèi)容,替換成帶標(biāo)簽的

    這篇文章主要介紹了vue如何把字符串中的所有@內(nèi)容,替換成帶標(biāo)簽的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 關(guān)于element中el-cascader的使用方式

    關(guān)于element中el-cascader的使用方式

    這篇文章主要介紹了關(guān)于element中el-cascader的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • element使用自定義icon圖標(biāo)的詳細(xì)步驟

    element使用自定義icon圖標(biāo)的詳細(xì)步驟

    前端經(jīng)常會(huì)用到UI提供的各種圖表,推薦阿里的圖標(biāo)庫(kù),下面這篇文章主要給大家介紹了關(guān)于element使用自定義icon圖標(biāo)的詳細(xì)步驟,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • vue組件發(fā)布成npm包

    vue組件發(fā)布成npm包

    平常使用Vue開(kāi)發(fā)時(shí),一個(gè)項(xiàng)目中多個(gè)地方需要用到的相同組件通常我們會(huì)封裝為一個(gè)公共組件,所以我們可以將封裝好的組件打包發(fā)布至npm,本文主要介紹了vue組件發(fā)布成npm包,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)完整代碼

    Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)完整代碼

    柱狀圖(或稱(chēng)條形圖)是一種通過(guò)柱形的長(zhǎng)度來(lái)表現(xiàn)數(shù)據(jù)大小的一種常用圖表類(lèi)型,這篇文章主要給大家介紹了關(guān)于Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • vue頁(yè)面切換項(xiàng)目實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的方法

    vue頁(yè)面切換項(xiàng)目實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的方法

    這篇文章主要介紹了vue頁(yè)面切換項(xiàng)目實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 使用table做成樹(shù)形結(jié)構(gòu)的table

    使用table做成樹(shù)形結(jié)構(gòu)的table

    這篇文章主要介紹了使用table做成樹(shù)形結(jié)構(gòu)的table問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論

高邮市| 兴和县| 西盟| 五寨县| 太保市| 乌恰县| 开封县| 庐江县| 牡丹江市| 襄樊市| 娄烦县| 乐业县| 上栗县| 洮南市| 新泰市| 黔江区| 景宁| 兰考县| 察雅县| 台中市| 绩溪县| 西乌| 西丰县| 秀山| 裕民县| 阿勒泰市| 宜阳县| 鸡西市| 邵武市| 康平县| 探索| 德格县| 延吉市| 吉林省| 高雄县| 光泽县| 双流县| 定兴县| 开封县| 九江县| 山西省|