国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

hidogs / 2648人閱讀

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

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

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

?


  
  
  
  Document
  


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

下面是重點的js

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

簡單來說 clip()方法總是在上一次的剪輯區(qū)域基礎(chǔ)上進行操作,所以說我們要把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){ //這個函數(shù)的作用是捕捉鼠標點在canvas上的坐標
  var bbox=canvas.getBoundingClientRect()
  return {
    x:x-bbox.left,
    y:y-bbox.top
  }
}
function saveDrawingSurface(){  //這個函數(shù)的作用是初始化讀取畫布信息并儲存起來
  drawingSurfaceImageData=context.getImageData(0,0,canvas.width,canvas.height)
}
function restoreDrawingSurface(){ //這個函數(shù)的作用是讀取畫布信息
  context.putImageData(drawingSurfaceImageData,0,0)
}
function drawGrid(){ //這個函數(shù)的作用是填充進橡皮擦的剪輯區(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ū)域功能實現(xiàn)橡皮擦效果,希望對大家有所幫助

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99354.html

相關(guān)文章

  • 使用Canvas和JavaScript做一個畫板

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

    asce1885 評論0 收藏0
  • Canvas畫板---手機上也可以用的畫板

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

    oogh 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<