成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

基于canvas剪輯區(qū)域功能實(shí)現(xiàn)橡皮擦效果

hidogs / 2703人閱讀

摘要:這篇文章主要介紹了基于剪輯區(qū)域功能實(shí)現(xiàn)橡皮擦效果非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下這是基礎(chǔ)結(jié)構(gòu)沒(méi)什么好說(shuō)的下面是重點(diǎn)的這里有個(gè)坑要十分注意調(diào)用方法的時(shí)候,所定義的剪輯區(qū)域總是局限于期初的那個(gè)剪輯區(qū)域范圍。

這篇文章主要介紹了基于canvas剪輯區(qū)域功能實(shí)現(xiàn)橡皮擦效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

這是基礎(chǔ)結(jié)構(gòu) 沒(méi)什么好說(shuō)的

?


  
  
  
  Document
  


    
Stroke color: Fill color: 582735936 Draw Erase Eraser: 582735936 Eraser width:

下面是重點(diǎn)的js

這里有個(gè)坑要十分注意 調(diào)用clip()方法的時(shí)候,所定義的剪輯區(qū)域總是局限于期初的那個(gè)剪輯區(qū)域范圍。

簡(jiǎn)單來(lái)說(shuō) clip()方法總是在上一次的剪輯區(qū)域基礎(chǔ)上進(jìn)行操作,所以說(shuō)我們要把clip()方法放在save()和restore()方法中

var canvas = document.getElementById("canvas"),
context = canvas.getContext("2d"),
strokeStyleSelect = document.getElementById("strokeStyleSelect"),  //畫圖的描邊顏色
fillStyleSelect = document.getElementById("fillStyleSelect"),    //畫圖填充顏色
drawRadio = document.getElementById("drawRadio"),          //畫圖按鈕
eraserRadio = document.getElementById("eraserRadio"),       //橡皮擦按鈕 
eraserShapeSelect = document.getElementById("eraserShapeSelect"), //橡皮擦形狀
eraserWidthSelect = document.getElementById("eraserWidthSelect"), //橡皮擦寬度
ERASER_LINE_WIDTH = 1,
drawingSurfaceImageData,
lastX,
lastY,
mousedown = {},
rubberbandRect = {},
dragging = false
function windowToCanvas(x,y){ //這個(gè)函數(shù)的作用是捕捉鼠標(biāo)點(diǎn)在canvas上的坐標(biāo)
  var bbox=canvas.getBoundingClientRect()
  return {
    x:x-bbox.left,
    y:y-bbox.top
  }
}
function saveDrawingSurface(){  //這個(gè)函數(shù)的作用是初始化讀取畫布信息并儲(chǔ)存起來(lái)
  drawingSurfaceImageData=context.getImageData(0,0,canvas.width,canvas.height)
}
function restoreDrawingSurface(){ //這個(gè)函數(shù)的作用是讀取畫布信息
  context.putImageData(drawingSurfaceImageData,0,0)
}
function drawGrid(){ //這個(gè)函數(shù)的作用是填充進(jìn)橡皮擦的剪輯區(qū)域
  context.save()
  context.fillStyle="#fff"
  context.fillRect(0,0,canvas.width,canvas.height)
  context.restore()
}
function drawrubber(x,y){
  context.beginPath()
  context.arc(x,y,eraserWidthSelect.value,0,Math.PI*2,false)
  context.clip()   582735936
}
function drawCri(x,y){
  var x_width=Math.abs(x-mousedown.x)
  var y_width=Math.abs(y-mousedown.y)
  var radius=Math.sqrt(x_width*x_width+y_width*y_width)
 context.save()
  context.beginPath()
  context.fillStyle=fillStyleSelect.value;
  context.arc(mousedown.x,mousedown.y,radius,0,Math.PI*2,false)
  context.fill()
 context.restore()
}
canvas.onmousedown=function(e){
  var loc=windowToCanvas(e.clientX,e.clientY)
  mousedown.x=loc.x
  mousedown.y=loc.y
  lastX=loc.x
  lastY=loc.y
  saveDrawingSurface()
  dragging=true
}
canvas.onmousemove=function(e){
  if(dragging){
    var loc=windowToCanvas(e.clientX,e.clientY)
    if(drawRadio.checked){ //如果是畫圖狀態(tài)
      // 
      restoreDrawingSurface()
      drawCri(loc.x,loc.y)
    }else{ //如果是橡皮擦狀態(tài)
      context.save()
      drawrubber(loc.x,loc.y)
      drawGrid()
      context.restore()
    }
  }
}
canvas.onmouseup=function(e){
  dragging=false;
  var loc=windowToCanvas(e.clientX,e.clientY)
  if(drawRadio.checked){
  lastX=loc.x;
  lastY=loc.y;
  restoreDrawingSurface()
  drawCri(lastX,lastY)
  }else{
  context.save()
  drawrubber(loc.x,loc.y)
  drawGrid()
  context.restore()
  }
}

總結(jié)

以上所述是小編給大家介紹的基于canvas剪輯區(qū)域功能實(shí)現(xiàn)橡皮擦效果,希望對(duì)大家有所幫助

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/99354.html

相關(guān)文章

  • 使用Canvas和JavaScript做一個(gè)畫板

    摘要:本文同步于個(gè)人博客前些天學(xué)習(xí)了的元素,今天就來(lái)實(shí)踐一下,用做一個(gè)畫板。實(shí)現(xiàn)一個(gè)簡(jiǎn)單的畫板實(shí)現(xiàn)思路監(jiān)聽(tīng)鼠標(biāo)事件,用方法把記錄的數(shù)據(jù)畫出來(lái)。為時(shí),移動(dòng)鼠標(biāo)使用剪裁擦除畫布。 本文同步于個(gè)人博客:https://zhoushuo.me/blog/2018/03/11/drawing-borad/ 前些天學(xué)習(xí)了HTML5的元素,今天就來(lái)實(shí)踐一下,用canvas做一個(gè)畫板。 showImg(ht...

    asce1885 評(píng)論0 收藏0
  • Canvas畫板---手機(jī)上也可以用的畫板

    摘要:方法可以獲取到上下文二制作畫板畫板功能可以繪制不同顏色和粗細(xì)的線條,畫板上有橡皮擦功能,一鍵清除功能,下載功能。我們可以用來(lái)監(jiān)聽(tīng)三種狀態(tài)。 學(xué)習(xí)制作畫板之前,我們先來(lái)了解一下canvas標(biāo)簽 一.canvas標(biāo)簽 1.canvas標(biāo)簽與img標(biāo)簽相似,但是canvas標(biāo)簽是一個(gè)閉合標(biāo)簽,并且沒(méi)有src alt屬性2.canvas標(biāo)簽有兩個(gè)屬性,width,height。我們?cè)陧?yè)面上用c...

    oogh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<