2011-12-20 4 views
0

Essayer de faire quelque chose le long de ces lignes. Changer la couleur de l'objet de toile quand $ cette css est .currentJquery html5 canvas changer la couleur variable

var links = $("ul#nav-main a"); 

links.each(function() { 
    var linkWidth = $(this).outerWidth(); 
    var canvas = $("<canvas></canvas>"); 
    canvas.attr({width: linkWidth, height: 48}); 
    var ctx = canvas.get(0).getContext("2d"); 
    var linkColor = "rgba(27, 73, 218, 0.5)"; 
    if links.css('.current'){ 
     linkColor = "red" 
    } 
    ctx.save(); 
      ctx.beginPath(); 
      ctx.moveTo(linkWidth, 45.0); 
      ctx.lineTo(6.5, 46.3); 
      ctx.lineTo(0.0, 0.0); 
      ctx.lineTo(linkWidth-2, 2.0); 
      ctx.lineTo(linkWidth-4, 45.0); 
      ctx.closePath(); 
      ctx.fillStyle('linkColor'); 
      ctx.fill(); 
      ctx.restore(); 

    var image = canvas.get(0).toDataURL("image/png"); 
    $(this).hover(function() { 
       $(this).css({background: "url('"+image+"') no-repeat"}); 
    }, function() { 
    $(this).css({background: ""}); 
    }); 
}); 

Répondre

0

Remplacer cette partie

if links.css('.current'){ 
    linkColor = "red" 
} 

avec

if $(this).hasClass('current') { 
    linkColor = "#f00"; 
} 

$(this) referres à l'élément courant dans la boucle each() en tant qu'objet jQuery et hasClass() renvoie true si l'attribut de classe elements contient la classe CSS.

Pour ne pas encore connaître l'élément canvas, je pense également que vous devriez remplacer ctx.fillStyle('linkColor'); par ctx.fillStyle = linkColor;.

Pourquoi appelez-vous ctx.save(); avant de définir la couleur (et d'autres) et puis ctx.restore(); une fois que vous avez?

MISE À JOUR

créé un solution at jsFiddle pour vous, profitez! :)

+0

Salut Stefan merci beaucoup. Im tâtonnant à travers ce moi-même, comme vous pouvez le dire :) Je ne suis même pas sûr de la raison de ctx.save/restaurer – James

+0

Mis à jour ma réponse avec un exemple vivant de la solution complète. J'espère que ça aide: http://jsfiddle.net/QzrnC/ – Stefan