javascript - 网格线切换 HMTL5 Canvas

标签 javascript html canvas

我想用开关(开/关)制作网格线 x 和 y,但即使在 ctx.clearRect 之后,HTML5 Canvas 也会渲染以前绘制的线,我只想使用相同的按钮打开和关闭线。这是我的 fiddle

http://jsfiddle.net/5uayd/1/

var canvas = document.getElementById('canvas'),
    ctx = canvas.getContext('2d');

  var gridline_x = false,gridline_y = false;

  var grid_x = function(){
      gridline_x = (gridline_x)?false:true;
      GridLines();
  };

  var grid_y = function(){
      gridline_y = (gridline_y)?false:true;
      GridLines();
  };


  var GridLines = function(){

        var ctx = canvas.getContext('2d');
        ctx.clearRect(0,0,canvas.width,canvas.height);


        console.log('Grid  X: '+gridline_x + ' Grid Y: '+gridline_y);
        ctx.save(); 

        if(gridline_y)
        for(var i = 1; i < canvas.width; i += 50) {

            ctx.moveTo( i, 0 );
            ctx.lineTo( i, canvas.height);

        }


        if(gridline_x)
        for(var i = 1; i < canvas.height ; i += 50) {

            ctx.moveTo( 0, i );
            ctx.lineTo( canvas.width, i);
        }

        ctx.strokeStyle = 'hsla(0, 0%, 40%, .5)';
        ctx.stroke();
        ctx.restore();



        //ctx.restore();
    };

第二次点击时线条不会被删除

最佳答案

ctx.beginPath() 放在 ctx.save 之后。

beginPath 告诉浏览器您已完成之前的路径绘制并开始新的绘制。

如果没有beginPath,所有之前的绘图都将被重绘——即使是在clearRect之后

关于javascript - 网格线切换 HMTL5 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24154500/

相关文章:

javascript - 防止http请求后提交表单数据

javascript - 为什么运行index.html文件时我的代码不起作用?

canvas - EaselJS:单击鼠标更改形状填充颜色

html - Tympanus 使用 CSS3 在注释叠加效果中使注释可点击

html - 无法将 Base64 字符串加载到 Canvas

javascript - 如何根据增加/减少值制作仪表动画

javascript - 如何延迟 jQuery-ui slider 事件中的函数

javascript - 跳上云端 HackerRank

PHP - MySQLi 正在处理查询两次或错误

javascript - 使用 Bootstrap Slider 一个 Slider 结果是另外两个 Slider 的总和