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

首頁 > 編程 > HTML > 正文

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

2024-08-26 00:21:19
字體:
來源:轉載
供稿:網友

什么叫橡皮筋式

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

例子如下:point_down:

canvas,橡皮筋式,線條,繪圖

思路

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

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

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

mouseup:drag恢復為false

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

canvas,橡皮筋式,線條,繪圖

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; //記錄圖像數據        let start = new Map([['x',null],['y',null]]);        let drag = false;//記錄是否處于拖動狀態        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>

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


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 手游| 蛟河市| 醴陵市| 石渠县| 荥阳市| 竹山县| 肃北| 乌鲁木齐县| 思茅市| 广德县| 奈曼旗| 江安县| 涟源市| 卓尼县| 竹北市| 东海县| 赣榆县| 高清| 巴彦淖尔市| 花莲市| 赤水市| 兴业县| 万安县| 鲜城| 岳池县| 包头市| 灵山县| 商洛市| 招远市| 镇坪县| 泽库县| 勃利县| 宜黄县| 富裕县| 凤台县| 江城| 东台市| 定陶县| 班玛县| 宣武区| 双辽市|