2010-07-26 4 views
3

J'ai essayé d'utiliser globalCompositeOperation dans une boucle qui passe différent dans le même contexte 2D chaîne (source-atop, source-over etc.) mais je remarqué que Firefox permettez-moi de tirer seulement quelques formes tandis que Opera seul le dernier.globalCompositeOperation

Maintenant, ma question est est-ce que je peux utiliser seulement globalCompositeOperation à temps dans le contexte actuel?

Répondre

4

La raison pour laquelle vous remarquez ce problème est que les modes que vous choisissez ne sont pas correctement pris en charge par le navigateur. Il y a quelques problèmes entre les navigateurs concernant le globalCompositeOperation. A ce moment, il n'y a que quelques modes qui fonctionnent entre les navigateurs (Chrome/Safari/Opera/Firefox) sans bizarreries:

  • source sur
  • source au sommet
  • destination sur
  • destination-out
  • plus léger
  • XOR

Pour en savoir plus consulter la suite lien de liaison;

http://www.rekim.com/2011/02/11/html5-canvas-globalcompositeoperation-browser-handling/

Quant à votre 2ème question, vous ne pouvez utiliser un mode à la fois. C'est dommage, car "light" et "darker" sont plus comme des "blend-modes", et seraient très utiles à utiliser avec certains des autres modes composites. J'aimerais voir ce changement.

1

En bref, oui.

La dernière valeur globalCompositeOperation a lieu avant un rendu, par ex. drawImage(), fillRect().

Vous pouvez modifier immédiatement après le dessin de l'appliquer au dessin suivant comme:

http://jsfiddle.net/eCDRN/

ctx.globalCompositeOperation = "copy"; 
ctx.fillRect(100, 100, 100, 100); 
ctx.globalCompositeOperation = "destination-in"; 
ctx.fillRect(150, 150, 100, 100); 
ctx.globalCompositeOperation = "xor"; 
ctx.fillRect(175, 175, 100, 100);