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

vue canvas繪制矩形并解決由clearRec帶來(lái)的閃屏問(wèn)題

 更新時(shí)間:2019年09月02日 12:00:19   作者:搜戴斯  
這篇文章主要介紹了vue canvas繪制矩形并解決由clearRec帶來(lái)的閃屏問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

起因:在cavnas繪制矩形時(shí) 鼠標(biāo)移動(dòng)一直在監(jiān)測(cè)中,所以鼠標(biāo)移動(dòng)的軌跡會(huì)留下一個(gè)個(gè)的矩形框,

要想清除矩形框官方給出了ctx.clearRect() 但是這樣是把整個(gè)畫布給清空了,因此需要不斷

向畫布展示新的圖片,這樣就出現(xiàn)了不斷閃屏的問(wèn)題。

那么怎么解決呢?

microsoft提供了雙緩沖圖形技術(shù),可以點(diǎn)擊看看這邊文章。

具體就是畫圖的時(shí)候做兩個(gè)canvas層,一個(gè)臨時(shí)層 一個(gè)顯示層,鼠標(biāo)的監(jiān)聽事件放在顯示層處理,

每次清空的時(shí)候只清空臨時(shí)層,這樣就可以解決閃屏問(wèn)題了。

  部分代碼如下:

<!--臨時(shí)層-->
<canvas id="customPositionImg2" ref="table2"  style=" display:none;"></canvas>
<!--顯示層 增加鼠標(biāo)按下,移動(dòng),松開事件-->
<canvas id="customPositionImg" ref="table"  @mousedown="mousedown" @mousemove="mousemove" @mouseup="mouseup" style=""></canvas>

顯示層展示圖片:

//因?yàn)轫?xiàng)目是dialog展示自定義畫板,所以圖片展示就寫在了dialog打開的鉤子里,如果需要直接復(fù)制
vue.nextTick里面的代碼就行
show () {
   vue.nextTick(_ => {
     let customCanvas =this.$refs.table;// canvas顯示層
     this.customstyle ='';
     customCanvas.height = 740;
     customCanvas.width = 1460;
     this.customcxt = customCanvas.getContext("2d");
     let img = new Image();
     img.src = this.imgSrc;
     let that = this;
     img.onload = function () {
       that.customRwidth = customCanvas.width / img.width; //原圖與展示圖片的寬高比
       that.customRheight = customCanvas.height / img.height;
       that.customcxt.drawImage(img, 0, 0, customCanvas.width, customCanvas.height); 
     };

   })

},

鼠標(biāo)操作事件

//鼠標(biāo)按下時(shí)執(zhí)行
mousedown(e){
  this.isMouseDownInCanvas = true;
  // 鼠標(biāo)按下時(shí)開始位置與結(jié)束位置相同 防止鼠標(biāo)在畫完矩形后 點(diǎn)擊圖畫形成第二個(gè)圖形
  this.endX = e.offsetX;
  this.endY = e.offsetY;
  this.startX = e.offsetX;
  this.startY = e.offsetY;

},
//鼠標(biāo)移動(dòng)式時(shí)執(zhí)行
mousemove(e){
  if (this.isMouseDownInCanvas){ // 當(dāng)鼠標(biāo)有按下操作時(shí)執(zhí)行
    console.log( e.offsetX,e.offsetY);
    if((this.endX != e.offsetX)||( this.endY != e.offsetY)){
      this.endX = e.offsetX;
      this.endY = e.offsetY;
      let wwidth = this.endX - this.startX;
      let wheigth = this.endY - this.startY;
      let tempCanvas = this.$refs.table2; // canvas臨時(shí)層
      let tempCtx = tempCanvas.getContext('2d');
      tempCanvas.width = 1460; tempCanvas.height = 740; // 設(shè)置寬高
      // 清除臨時(shí)層指定區(qū)域的所有像素
      tempCtx.clearRect(0, 0, 1460, 740);
      // 重新展示圖片
      let img = new Image();
      img.src = this.imgSrc;
      let that = this;
      img.onload = function () {
        that.customcxt.drawImage(img, 0, 0,1460, 740);
      };
      this.customcxt.strokeStyle=" #00ff00"; //矩形框顏色
      this.customcxt.lineWidth="2"; //矩形框?qū)挾?
      this.customcxt.strokeRect(this.startX,this.startY,wwidth,wheigth); //繪制矩形
    }else{
        //鼠標(biāo)按下靜止時(shí)顯示矩形的大小。
      let wwidth2 = this.endX - this.startX;
      let wheigth2 = this.endY - this.startY;
      this.customcxt.strokeRect(this.startX,this.startY,wwidth2,wheigth2)
    }
  }
},
//鼠標(biāo)松開時(shí)執(zhí)行
mouseup(e){
  this.isMouseDownInCanvas = false;
  // 繪制最終的矩形框
  let wwidth = this.endX - this.startX;
  let wheigth = this.endY - this.startY;
  this.customcxt.strokeRect(this.startX,this.startY,wwidth,wheigth)
},

總結(jié)

以上所述是小編給大家介紹的vue cavnas繪制矩形并解決由clearRec帶來(lái)的閃屏問(wèn)題,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • 詳解vue.js組件化開發(fā)實(shí)踐

    詳解vue.js組件化開發(fā)實(shí)踐

    本篇文章主要介紹了vue.js組件化開發(fā)實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • VUE+element開發(fā)后臺(tái)管理的搜索功能

    VUE+element開發(fā)后臺(tái)管理的搜索功能

    這篇文章主要為大家詳細(xì)介紹了VUE+element開發(fā)后臺(tái)管理的搜索功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 使用vue3+TS實(shí)現(xiàn)簡(jiǎn)易組件庫(kù)的全過(guò)程

    使用vue3+TS實(shí)現(xiàn)簡(jiǎn)易組件庫(kù)的全過(guò)程

    當(dāng)市面上主流的組件庫(kù)不能滿足我們業(yè)務(wù)需求的時(shí)候,那么我們就有必要開發(fā)一套屬于自己團(tuán)隊(duì)的組件庫(kù),下面這篇文章主要給大家介紹了如何使用vue3+TS實(shí)現(xiàn)簡(jiǎn)易組件庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Vue概念及常見命令介紹(1)

    Vue概念及常見命令介紹(1)

    這篇文章主要為大家詳細(xì)介紹了Vue概念及常見命令,介紹了vue.js聲明式渲染、雙向綁定及常用指令,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • vue利用vue meta info設(shè)置每個(gè)頁(yè)面的title與meta信息

    vue利用vue meta info設(shè)置每個(gè)頁(yè)面的title與meta信息

    這篇文章主要給大家介紹了關(guān)于vue如何利用vue meta info設(shè)置每個(gè)頁(yè)面的title與meta信息的相關(guān)資料,文中將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-10-10
  • vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例

    vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例

    本篇文章主要介紹了vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Vant?如何修改van-collapse-item右側(cè)圖標(biāo)

    Vant?如何修改van-collapse-item右側(cè)圖標(biāo)

    這篇文章主要介紹了Vant?如何修改van-collapse-item右側(cè)圖標(biāo),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue+element tabs選項(xiàng)卡分頁(yè)效果

    vue+element tabs選項(xiàng)卡分頁(yè)效果

    這篇文章主要為大家詳細(xì)介紹了vue+element tabs選項(xiàng)卡分頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • vue?button的@click方法無(wú)效鉤子函數(shù)沒(méi)有執(zhí)行問(wèn)題

    vue?button的@click方法無(wú)效鉤子函數(shù)沒(méi)有執(zhí)行問(wèn)題

    這篇文章主要介紹了vue?button的@click方法無(wú)效鉤子函數(shù)沒(méi)有執(zhí)行問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解如何實(shí)現(xiàn)在Vue中導(dǎo)入Excel文件

    詳解如何實(shí)現(xiàn)在Vue中導(dǎo)入Excel文件

    這篇文章主要介紹了如何在Vue中導(dǎo)入Excel文件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-01-01

最新評(píng)論

海门市| 胶州市| 玉树县| 平泉县| 江源县| 桐乡市| 临颍县| 竹北市| 澄江县| 临武县| 英山县| 肇州县| 九台市| 望都县| 富锦市| 新营市| 长丰县| 衡阳县| 万全县| 茶陵县| 镇巴县| 霍城县| 新邵县| 七台河市| 玉屏| 桐城市| 淮北市| 沭阳县| 托克托县| 平塘县| 酒泉市| 陇西县| 武邑县| 茂名市| 南投县| 青龙| 辽中县| 竹山县| 中卫市| 剑川县| 马山县|