亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue canvas繪制矩形并解決由clearRec帶來的閃屏問題

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

起因:在cavnas繪制矩形時 鼠標移動一直在監(jiān)測中,所以鼠標移動的軌跡會留下一個個的矩形框,

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

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

那么怎么解決呢?

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

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

每次清空的時候只清空臨時層,這樣就可以解決閃屏問題了。

  部分代碼如下:

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

顯示層展示圖片:

//因為項目是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); 
     };

   })

},

鼠標操作事件

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

},
//鼠標移動式時執(zhí)行
mousemove(e){
  if (this.isMouseDownInCanvas){ // 當鼠標有按下操作時執(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臨時層
      let tempCtx = tempCanvas.getContext('2d');
      tempCanvas.width = 1460; tempCanvas.height = 740; // 設(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{
        //鼠標按下靜止時顯示矩形的大小。
      let wwidth2 = this.endX - this.startX;
      let wheigth2 = this.endY - this.startY;
      this.customcxt.strokeRect(this.startX,this.startY,wwidth2,wheigth2)
    }
  }
},
//鼠標松開時執(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帶來的閃屏問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Vue鼠標滾輪滾動切換路由效果的實現(xiàn)方法

    Vue鼠標滾輪滾動切換路由效果的實現(xiàn)方法

    這篇文章主要介紹了Vue鼠標滾輪滾動切換路由效果的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Vue.js性能優(yōu)化N個技巧(值得收藏)

    Vue.js性能優(yōu)化N個技巧(值得收藏)

    本文主要還是針對 Vue.js 2.x 版本,畢竟接下來一段時間,Vue.js 2.x 還是我們工作中的主流版本,對vue.js性能優(yōu)化技巧相關(guān)知識感興趣的朋友一起看看吧
    2021-09-09
  • antdv vue upload自定義上傳結(jié)合表單提交方式

    antdv vue upload自定義上傳結(jié)合表單提交方式

    這篇文章主要介紹了antdv vue upload自定義上傳結(jié)合表單提交方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 5個Vue3阻止事件冒泡的方法

    5個Vue3阻止事件冒泡的方法

    在?Vue3?項目開發(fā)中,事件冒泡經(jīng)常會導(dǎo)致一些意想不到的問題,本文為大家整理了五個Vue3中阻止事件冒泡的方法,希望對大家有一定的幫助
    2024-11-11
  • Vue3實現(xiàn)動態(tài)面包屑的代碼示例

    Vue3實現(xiàn)動態(tài)面包屑的代碼示例

    這篇文章主要給大家介紹一下Vue3動態(tài)面包屑是如何實現(xiàn)的,實現(xiàn)思路又是什么,以及發(fā)給大家介紹一下面包屑的功能,文章通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • vue實現(xiàn)城市列表選擇功能

    vue實現(xiàn)城市列表選擇功能

    這篇文章主要介紹了vue實現(xiàn)城市列表選擇功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • elementUI的table表格改變數(shù)據(jù)不更新問題解決

    elementUI的table表格改變數(shù)據(jù)不更新問題解決

    最近在做vue的項目時發(fā)現(xiàn)了一個問題,今天就來解決一下,本文主要介紹了elementUI的table表格改變數(shù)據(jù)不更新問題解決,感興趣的可以了解一下
    2022-02-02
  • ?面試問題Vue雙向數(shù)據(jù)綁定原理

    ?面試問題Vue雙向數(shù)據(jù)綁定原理

    這篇文章主要介紹了?面試問題Vue雙向數(shù)據(jù)綁定原理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 搭建element-ui的Vue前端工程操作實例

    搭建element-ui的Vue前端工程操作實例

    下面小編就為大家分享一篇搭建element-ui的Vue前端工程操作實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue實現(xiàn)前端按鈕組件權(quán)限管理

    vue實現(xiàn)前端按鈕組件權(quán)限管理

    這篇文章主要為大家介紹了vue實現(xiàn)前端按鈕組件權(quán)限管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論