HTML5 Canvas 塗鴉牆

來源:互聯網
上載者:User

http://jsfiddle.net/46Gy4/


想要練習一下canvas,沒事寫個玩玩,可惜電腦上沒裝photoshop,要不然能更好看些。

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style>#a {    display: block;    margin: 0 auto;    border:3px solid;    cursor:url('pencil.png'),auto;}h1 {    text-align:center;}.operation {    margin: 0 auto;width: 400px;height: 100px;}.operation ul {    list-style:none;    }ul li {    margin-top: 6px;}li.range {    padding-left: 44px;}li.color {    padding-left: 97px;}#rangeValue {    vertical-align: super;    margin-left: 10px;}</style></head><body><div class="content"><h1>Canvas 塗鴉牆</h1><div class="operation">  <ul>      <li>        <label>畫筆樣式</label><select id="type"><option value="arc">圓形筆刷</option><option value="rect">矩形筆刷</option></select> </li><li class="range"><label>畫筆大小</label><input id="rangeInput" type="range" min="1" max="50" value="25"><span id="rangeValue">25</span></li><li class="color"><label>畫筆顏色</label><input id="colorInput" type="color"></li></ul></div><canvas id="a" width="600px" height="600px"></canvas><button id="translate">Translate</button>        <img id="canvasImg"></div><script>var ctx;var x;var y;var a;var dragFlag = false;var rangeInput,colorInput,type;function circle(x,y,r,color) {      ctx.beginPath();      ctx.arc(x, y, r, 0, Math.PI*2, true);      ctx.closePath();    ctx.fillStyle = color;    ctx.fill();  }function drawRect(x,y,w,h,color) {  ctx.beginPath();  ctx.rect(x,y,w,h);  ctx.closePath();  ctx.fillStyle = color;ctx.fill();  } function init() {  var canvas = document.getElementById("a");rangeInput = document.getElementById("rangeInput");colorInput = document.getElementById("colorInput");type = document.getElementById("type");rangeInput.addEventListener("change",changeRange);ctx = canvas.getContext("2d");document.getElementById("translate").addEventListener("click",translate);canvas.addEventListener("mousemove",mouseMove);  canvas.addEventListener("mousedown",mousedown);  canvas.addEventListener("mouseup",mouseup);  //a = setInterval(draw, 10);  }function translate(e){document.getElementById("canvasImg").src = ctx.canvas.toDataURL();}function changeRange(e){var range = e.currentTarget.value;    document.getElementById("rangeValue").innerHTML = range;}function draw(){//circle(x,y,10);}function mousedown(){dragFlag = true;}function mouseup(){dragFlag = false;}function mouseMove (e){var rect = e.currentTarget.getBoundingClientRect();      var gravityPoint = {              x: e.clientX - rect.left,              y: e.clientY - rect.top            };    x = gravityPoint.x;    y = gravityPoint.y;    if (dragFlag) {    if (type.value == "arc") {    circle(x,y+40,rangeInput.value,colorInput.value);    } else {    drawRect(x,y,rangeInput.value,rangeInput.value,colorInput.value)    }    }}init();</script></body></html>

總結: 


  • 用原生JS實現drag效果,需要3個事件,mousemove,mousedown,mouseup,當mousedown為true時才執行mousemove,當觸發mouseup時停止。

  • 變換滑鼠的樣式,cursor:url(‘aa.png’),auto;

  • 將canvas轉換成image:canvas.toDataURL(),得到是base64編碼的字串。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.