美文网首页程序员
canvas实现橡皮筋画红绿方块

canvas实现橡皮筋画红绿方块

作者: infi_ | 来源:发表于2018-01-16 17:47 被阅读0次

    先放镇楼图 ~~吸引火力



    canvas真是一个灰常有意思的东西,
    在原来橡皮筋式线段绘制的基础上实现的,由橡皮筋线段的始末两点构成矩形,
    根据橡皮筋线段的颜色绘制不同颜色的矩形
    注意:
    这里的颜色变换只加入了两种颜色 ,根据起始端点的X轴位移量决定,绝对值用Math.abs即可

     var canvas=document.getElementById("canvas")
     var context=canvas.getContext("2d");
     var canvas_mouse_move={};
     var canvas_mouse_obj={};
     var save_image_data=null;
     var drag=null
     
     var windowToCanvas=function(x1,y1){
        var left=canvas.getBoundingClientRect().left;
        var top=canvas.getBoundingClientRect().top;
    
        return{
            x:x1-left,
            y:y1-top
        }
    
     }
     var save_image=function(){
        save_image_data=context.getImageData(0,0,canvas.width,canvas.height)
    
     }
     var put_image=function(){
         context.putImageData(save_image_data,0,0)
     }
    
    canvas.onmousedown=function(e){
        var mousedown_left=e.clientX;
        var mousedown_top=e.clientY;
        
        save_image()
        canvas_mouse_obj=windowToCanvas(mousedown_left,mousedown_top)
        drag=true;
    
    }
    canvas.onmousemove=function(e){
        if(drag){
            put_image()
            canvas_mouse_move=windowToCanvas(e.clientX,e.clientY)
            context.beginPath()
            context.moveTo(canvas_mouse_obj.x,canvas_mouse_obj.y)
            
            context.lineTo(canvas_mouse_move.x,canvas_mouse_move.y)
            
            var num_length=Math.abs(canvas_mouse_move.x-canvas_mouse_obj.x)
            if(200>num_length>0){context.strokeStyle="red";context.fillStyle="red"}
            if(num_length>200){context.strokeStyle="green";context.fillStyle="green"}
          
            context.stroke()
            
            
        }
    }
    canvas.onmouseup=function(e){
    
        var endx=e.clientX;
        var endy=e.clientY;
        var end=windowToCanvas(endx,endy)
        context.beginPath()
        context.moveTo(canvas_mouse_obj.x,canvas_mouse_obj.y)
        context.lineTo(end.x,end.y)
        context.stroke()
    
         context.beginPath();
         context.rect(canvas_mouse_obj.x,canvas_mouse_obj.y,end.x-canvas_mouse_obj.x,end.y-canvas_mouse_obj.y)
        context.fill()
        drag=false;
    }
    

    相关文章

      网友评论

        本文标题:canvas实现橡皮筋画红绿方块

        本文链接:https://www.haomeiwen.com/subject/blceoxtx.html