簡體   English   中英

創建漸變/彩虹筆觸樣式html5畫布

[英]creating gradient/rainbow strokeStyle html5 canvas

我在玩HTML5畫布很開心。 到目前為止,我有這個很酷的繪圖應用程序,我希望筆觸樣式為不同顏色的漸變。 我將如何去做? 這是我到目前為止所擁有的。 http://jsfiddle.net/claireC/4kt38/

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

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

//puts a circle where the user clicks the mouse

var radius = 10,
dragging = false;

context.lineWidth = radius*2;

var putPoint = function(e){
if(dragging){
    context.lineTo(e.clientX, e.clientY);
    context.stroke();
    context.beginPath();
    context.arc(e.clientX, e.clientY, radius, 0, Math.PI*2);
    context.fill();
    context.beginPath();
    context.moveTo(e.clientX, e.clientY);
   }
};

var engage = function(e){
dragging = true;
putPoint(e);
};

var disengage = function(){
dragging = false;
context.beginPath();
};

canvas.addEventListener('mousedown', engage);
canvas.addEventListener('mousemove', putPoint);
canvas.addEventListener('mouseup', disengage);

嘗試添加context.fillStyle = grad; 后:

var grad= context.createLinearGradient(50, 50, 150, 150);
grad.addColorStop(0, "red");
grad.addColorStop(1, "green");
context.fillStyle = grad;

我對這樣的快速努力並不滿意,但是這是嘗試彩虹漸變筆畫的開始。

此代碼僅捕獲拖動鼠標的位置和沿拖動的筆觸。

對該代碼的改進將是簡化路徑,而不是抓住每個鼠標移動。

它通過繪制大量垂直於所需路徑的線性漸變線來工作。 愚弄人以為它看到了漸變筆畫。

示例代碼和演示: http : //jsfiddle.net/m1erickson/36F4T/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
    body{ background-color: ivory; }
    #canvas{border:1px solid red;}
</style>
<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");
    var $canvas=$("#canvas");
    var canvasOffset=$canvas.offset();
    var offsetX=canvasOffset.left;
    var offsetY=canvasOffset.top;
    var scrollX=$canvas.scrollLeft();
    var scrollY=$canvas.scrollTop();

    var PI=Math.PI;
    var points=[];
    var isDown=false;
    var linewidth=15;
    var steps=50;
    var lastPointX,lastPointY;

    ctx.lineWidth=linewidth;

    function addPoint(x,y){
        var dx=x-lastPointX;
        var dy=y-lastPointY;
        var angle=Math.atan2(dy,dx)-PI/2;

        ctx.strokeStyle=calcGradient(x,y,angle);

        ctx.beginPath();
        ctx.moveTo(lastPointX,lastPointY);
        for(var i=-8;i<steps;i++){
            var xx=lastPointX+dx*i/(steps-1);
            var yy=lastPointY+dy*i/(steps-1);
            ctx.lineTo(xx,yy);
        }
        ctx.stroke();

        lastPointX=x;
        lastPointY=y;
    }

    function calcGradient(x,y,angle){
        // calc the topside and bottomside points of the tangent line
        var offX1=x+linewidth/2.25*Math.cos(angle);
        var offY1=y+linewidth/2.25*Math.sin(angle);
        var offX2=x+linewidth/2.25*Math.cos(angle-PI);
        var offY2=y+linewidth/2.25*Math.sin(angle-PI);
        // create a gradient stretching between 
        // the calculated top & bottom points
        var gradient=ctx.createLinearGradient(offX1,offY1,offX2,offY2);
        gradient.addColorStop(0.00, 'red'); 
        gradient.addColorStop(1/6, 'orange'); 
        gradient.addColorStop(2/6, 'yellow'); 
        gradient.addColorStop(3/6, 'green') 
        gradient.addColorStop(4/6, 'aqua'); 
        gradient.addColorStop(5/6, 'blue'); 
        gradient.addColorStop(1.00, 'purple'); 
        return(gradient);
    }

    function handleMouseDown(e){
      e.preventDefault();
      e.stopPropagation();

      lastPointX=parseInt(e.clientX-offsetX);
      lastPointY=parseInt(e.clientY-offsetY);

      isDown=true;
    }

    function handleMouseUp(e){
      e.preventDefault();
      e.stopPropagation();
      isDown=false;
    }

    function handleMouseMove(e){
      if(!isDown){return;}
      e.preventDefault();
      e.stopPropagation();

      mouseX=parseInt(e.clientX-offsetX);
      mouseY=parseInt(e.clientY-offsetY);

      addPoint(mouseX,mouseY);

    }

    $("#canvas").mousedown(function(e){handleMouseDown(e);});
    $("#canvas").mousemove(function(e){handleMouseMove(e);});
    $("#canvas").mouseup(function(e){handleMouseUp(e);});
    $("#canvas").mouseout(function(e){handleMouseUp(e);});

}); // end $(function(){});
</script>
</head>
<body>
    <canvas id="canvas" width=300 height=300></canvas>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM