国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > HTML5 > 正文

canvas 橡皮筋式線條繪圖應用方法

2024-09-05 07:22:48
字體:
來源:轉載
供稿:網友

什么叫橡皮筋式

指畫圖時橡皮筋一樣伸縮自如。。

例子如下:point_down:

思路

思路很簡單,只有橡皮筋式繪制功能要注意,以下總結mousedown,mousemove,mouseup三個階段的思路

mousedown:記錄start位置,drag(記錄是否處于拖動狀態(tài))設置為true,getImageData( 橡皮筋效果關鍵1 )

mousemove:獲取拖動時的位置pos,putImageData( 對應getImageData,橡皮筋效果關鍵2 ),根據(jù)pos與start畫直線

mouseup:drag恢復為false

關鍵 就在于putImageData()與getImageData()這兩個canvas的方法,putImageData()記錄了鼠標點下時的圖像,getImageData()對應還原。如果沒有執(zhí)行這兩個方法就會出現(xiàn)以下的效果

putImageData()相當于把“掃描”出來的線都擦掉

代碼

  <canvas id="canvas" width="600" height="400" style="border: 1px solid black;"> </canvas>    <script type="text/javascript">        let canvas = document.getElementById('canvas'),            ctx = canvas.getContext('2d'),            canvasLeft = canvas.getBoundingClientRect().left, //getBoundingClientRect()獲取元素位置            canvasTop = canvas.getBoundingClientRect().top;        let imageData; //記錄圖像數(shù)據(jù)        let start = new Map([['x',null],['y',null]]);        let drag = false;//記錄是否處于拖動狀態(tài)        canvas.onmousedown = function (e) {            let pos = positionInCanvas(e, canvasLeft, canvasTop);            start.set('x', pos.x);            start.set('y', pos.y);            drag = true;            //記錄imageData            imageData = ctx.getImageData(0,0,canvas.width,canvas.height);        }        canvas.onmousemove = function (e) {            if(drag === true){               let pos = positionInCanvas(e, canvasLeft, canvasTop);               //相當于把掃描出來的線都擦掉,重新畫               ctx.putImageData(imageData, 0, 0);               ctx.beginPath();               ctx.moveTo(start.get('x'), start.get('y'));               ctx.lineTo(pos.x, pos.y);               ctx.stroke();            }        }        canvas.onmouseup = function  (e) {            drag = false;        }        function positionInCanvas (e, canvasLeft, canvasTop) {//獲取canvas中鼠標點擊位置         return {                  x:e.clientX - canvasLeft,                  y:e.clientY - canvasTop          }               }        </script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黔南| 泗阳县| 普安县| 察隅县| 孟连| 巩义市| 江华| 永新县| 高台县| 建湖县| 井研县| 法库县| 肃宁县| 安福县| 安仁县| 石棉县| 米脂县| 恭城| 平山县| 迁西县| 井研县| 长春市| 玛纳斯县| 双峰县| 兰考县| 巴林右旗| 铁岭县| 北海市| 嘉定区| 澄迈县| 晋州市| 拜城县| 建昌县| 普兰县| 密山市| 射阳县| 梅州市| 凤凰县| 台东市| 屏南县| 峨山|