HTML5 Canvas, shadowColor & shadowBlur - PullRequest
       3

HTML5 Canvas, shadowColor & shadowBlur

4 голосов
/ 13 марта 2011

Мой вопрос касается этой функции shadowBlur, используемой во втором (внешнем) прямоугольнике ниже.Функция shadowBlur применяется к каждой фигуре после этого прямоугольника.(Если вы закомментируете строки shadowColor и shadowBlur 21 и 22, а затем раскомментируйте строки shadowColor и shadowBlur в строках 14 и 15, вы должны увидеть, что я имею в виду.) Мой вопрос заключается в том, как применить shadowBlur к одной определенной частирисование холста без применения этой функции к каждой последующей части холста.В этом примере я попытался создать отдельную переменную для каждого холста и контекста, но проблема все еще сохраняется.

Атрибуция: Эти примеры основаны на примерах из html5canvastutorials.com


<!DOCTYPE html> 
<html lang="en"
<head>
<script type="text/javascript">
    function addRect(){
        var canvas1=document.getElementById("myCanvas");
        var ctx=canvas1.getContext("2d");

        var canvas3=document.getElementById("myCanvas");
        var ctx3=canvas3.getContext("2d");

        ctx.rect(60,60,180,80);
        ctx.fillStyle="green";
        //ctx.shadowColor="black";
        //ctx.shadowBlur = 10;
        ctx.fill(); 


        ctx3.lineWidth = 3;
        ctx3.strokeStyle='red'; 
        ctx3.shadowColor="black";
        ctx3.shadowBlur = 10;       
        ctx3.strokeRect(45,45,210,110); 
    }

    function addOval(){
        var canvas2=document.getElementById("myCanvas");
        var context=canvas2.getContext("2d");

        // define center of oval
        var centerX = 288;
        var centerY = 250;

        // define size of oval
        var height = 100;
        var width = 250;

        var controlRectWidth = width  * 1.33;

        context.beginPath();
        context.moveTo(centerX,centerY - height/2);
        // draw left side of oval
        context.bezierCurveTo(centerX-controlRectWidth/2,centerY-height/2,
            centerX-controlRectWidth/2,centerY+height/2,
            centerX,centerY+height/2);

        // draw right side of oval
        context.bezierCurveTo(centerX+controlRectWidth/2,centerY+height/2,
            centerX+controlRectWidth/2,centerY-height/2,
            centerX,centerY-height/2);

        context.fillStyle="red";
        context.fill();
        context.lineWidth=5;
        context.strokeStyle="blue"; 
        context.stroke();   
        context.closePath();    
    }
</script>

</head>
<body onload="addRect(); addOval();">
    <canvas id="myCanvas" width="700" height="400">
    Your browser does not support the canvas element.
    </canvas>
</body>
</html>

Ответы [ 3 ]

6 голосов
/ 13 марта 2011

Используйте это:

ctx.save();
  ctx.shadowColor="black";
  ctx.shadowBlur = 10;       
  ctx.strokeRect(45,45,210,110); 
ctx.restore();

Или это:

ctx.shadowColor="black";
ctx.shadowBlur = 10;       
ctx.strokeRect(45,45,210,110); 
ctx.shadowColor= undefined; 
ctx.shadowBlur = undefined;       

Я не уверен насчет 'undefined' во втором случае - что-то, чтобы обнулить / сбросить значение.

1 голос
/ 13 марта 2011
    var canvas3=document.getElementById("myCanvas");
    var ctx3=canvas1.getContext("2d");

изменить холст1 на холст3 во второй строке.Ваш ctx3 на самом деле указывает на canvas1, что я считаю неправильным.

0 голосов
/ 28 декабря 2012

Вы также можете установить цвет тени «прозрачный» вместо неопределенного или нулевого.Похоже, это тоже помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...