canvas 橡皮筋式线条制图运用方式

日期:2021-01-19 类型:科技新闻 

关键词:商城网站建设,微商好助手,微商引流,电商网站模板,微信商家小程序

什么是橡皮筋式

指画图时橡皮筋1样伸缩轻松。。

事例以下:point_down:

思路

思路很简易,仅有橡皮筋式绘图作用要留意,下列总结mousedown,mousemove,mouseup3个环节的思路

mousedown:纪录start部位,drag(纪录是不是处在拖拽情况)设定为true,getImageData( 橡皮筋实际效果重要1 )

mousemove:获得拖拽时的部位pos,putImageData( 对应getImageData,橡皮筋实际效果重要2 ),依据pos与start画平行线

mouseup:drag修复为false

重要 就在于putImageData()与getImageData()这两个canvas的方式,putImageData()纪录了电脑鼠标点下时的图象,getImageData()对应复原。假如沒有实行这两个方式就会出現下列的实际效果

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>

以上便是本文的所有內容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多适用脚本制作之家。