1

パレットに従って色付けできる SVG キャンバス上の要素があります。特定の色がクリックされた場合は塗りつぶしなしのオプションを追加し、他の色が選択された場合はその属性を削除しようとしています。

js コード:

if(!$selectedElems){return;}                                                                                

$selectedElems.each(function(){

$(this)[($(this).prop('tagName') === 'g' ? 'find' : 'filter')]('text[fill],rect[fill],circle,path').attr('fill',colour);

var $noFillColour =     $('#mainToolFill div.toolPopup a.color15');
var $otherColour =      $('#mainToolFill div.toolPopup a:not("color15")');

if($($noFillColour).bind('click')) {
    alert ($noFillColour);
    $selectedElems.attr('fill-opacity', '0');
}else{
  ($($otherColour).bind('click'));
    alert ($otherColour);
    $selectedElems.removeAttr('fill-opacity');
}

変数に問題があると思われます。アラートに Object オブジェクトが表示されます。最初のイベントが発生しているため、選択した要素に塗りつぶし不透明度が適用されていますが、これは選択された色に関係ありません。また、別の色をクリックすると、塗りつぶしの不透明度属性が削除されます。

また、:not セレクターに問題があるのではないかと考えました。私も試しました:

var $otherColour = $('#mainToolFill div.toolPopup a').not('#mainToolFill div.toolPopup a.color15');

誰かがこれに光を当てることができれば幸いです。これは、これを実装する最も経済的な方法ではない可能性があることに注意してください。

さらにコードが必要な場合はお知らせください。

4

1 に答える 1

0

私は何かが働いていると思います:

$('#mainToolFill div.toolPopup a.color15').bind('click',function() {
        $selectedElems.attr('fill-opacity','0');
});

$('#mainToolFill div.toolPopup a:not(".color15")').bind('click',function() {
        $selectedElems.removeAttr('fill-opacity');
});

これに関する唯一の問題は、コストがかかる可能性があることです。fill-opacity は、color15 が選択された場合にのみ追加されますが、他の色は、存在しない場合でも、定期的に fill-opacity 属性を削除します (場合を除いて)色の 15)。

于 2012-05-11T07:31:31.847 に答える