2012-05-07 14 views

Odpowiedz

41

Użyj globalAlpha. Będziesz także musiał rysować za pomocą fillRect. clearRect po prostu usuwa piksele. Nie można go częściowo wymazać, więc będziesz musiał użyć fillRect lub innych prymitywów do rysowania.

z w3schools.com:

ctx.globalAlpha = 0.2; 
    ctx.fillRect(50,50,75,50); 
    ctx.globalAlpha = 1.0; 
+0

To sprawia, że ​​całe płótno przezroczysty (Chrome conajmniej) –

+0

Brian, nie wyczyścić całe płótno, tylko rozmiar i położenie ją podać . Oto te 4 liczby; pierwsze dwa to współrzędna X na płótnie, a następnie Y coordin., a następnie rozmiar X i Y prostokąta, który chcesz usunąć. (Należy pamiętać, że wartości Y zwiększają się w miarę jak spadają, w kanwie) –

+4

Należy pamiętać, że po tych dwóch wierszach należy wywołać 'ctx.globalAlpha = 1;', aby uniemożliwić dalsze wywoływanie ciągów (nawet poprzednie jedni, wierzcie lub nie) z częściowo przejrzystych. –

46

clearRect usuwa to, co było i pozostawia to pole puste. Najlepszym sposobem jest użycie wartości fillStyle rgba, ponieważ sprawi ona, że ​​prostokąt (lub jakikolwiek inny kształt, który rysujesz) będzie przezroczysty. Kod będzie:

ctx.fillStyle = 'rgba(225,225,225,0.5)'; 
ctx.fillRect(25,72,32,32); 

(dzięki How to change the opacity (alpha, transparency) of an element in a canvas element after it has been drawn?)

+4

Preferuję to nad wybraną odpowiedzią, ponieważ nie wpływa ona globalnie na cały rysunek po użyciu. –

+0

Możesz zapisać i przywrócić kontekst, aby nie wpłynął globalnie, używając 'ctx.save()' i 'ctx.restore()' owiniętych wokół innych zmian kontekstu. –

+0

Wolę to od najpopularniejszego, ponieważ jest bardziej konkretny: mówi o przejrzystości wypełnienia (chcę "wyczyścić" prostokąt), a nie o przejrzystości jakiejkolwiek operacji. Dwa rozwiązania wymagają 4 wierszy (ponieważ ctx.save() i ctx.restore() w celu zachowania kontekstu). W każdym razie oba rozwiązania są dla mnie dobre. – ddcovery