0

現在の状態

私のリンクから、マップ上のさまざまな地域を選択できます。以前に選択した郡を再選択するまで、すべてが機能しているようです。各パスに保存されたデータ値によって、それがisSelectedか かが決まりnotSelectedます。クリックしthisたばかりの要素データを変更しても問題ありませんが、要素データを変更できる方法で選択した最後の要素を保存する方法が見つかりません。つまり、最初に前の郡をクリックして、その要素データをに設定する必要がありますnotSelected

最初に を定義しますvar currentcountyselected = "";。これにより、paths[arr[this.id]].name;. 新しいパスをクリックすると、最後のパス塗りつぶしを次のように変更できます$('#'+currentcountyselected).attr({fill: attributes.fill});

Raphael の for ループではobj.data('selected', 'notSelected');、すべてのパス要素が に設定されるように設定しましたnotSeelected

だから私が必要とするのは、要素データを変更できるように最後のパスを保存する方法です

これは、実際の例からクリーンアップされたクリック関数です。

obj.click(function(){
if(this.data('selected') == 'notSelected')
    {this.animate({fill: '#698B22'  }, 300);                
    this.data('selected', 'isSelected');
    $('#'+currentcountyselected).attr({fill: attributes.fill}); 
    paths[arr[this.id]].value = "isSelected";
    currentcountyselected = paths[arr[this.id]].name;
    }
else
    {this.animate({fill: '#32CD32'}, 300);                  
    paths[arr[this.id]].value = "notSelected"; /* set path value*/
    this.data('selected', 'notSelected');                       
    }   
});/* end mark selections */

私はしばらくこのプロジェクトに取り組んできましたが、クライアントは今、インターフェイスを別の方法で動作させたいと考えています。これは本当に私の時間を食い尽くしました。


編集:
単純に削除することで解決策を見つけましたがif/else、以前のパス(またはその問題の任意のパス)で要素データを取得する方法を知りたいです。

4

1 に答える 1

0

これが私の解決策であり、誰かを助けるかもしれないと投稿されています。私の質問のリンクには、クリック満足度の高いユーザーに問題があります。


グローバル

var previouscountyselected = "Mayo"; /* default start, can be any county(path) */
var start = true;
var past = null;

変更されたコード

obj.click(function(){
if(paths[arr[this.id]].value == 'notSelected')
    {
    this.animate({fill: '#698B22'}, 200);
    paths[previouscountyselected].value = "notSelected";
    paths[arr[this.id]].value = "isSelected";
    previouscountyselected = paths[arr[this.id]].name;

    if (!start && past != this)
        {
            past.animate({ fill: '#fff' }, 200);
        }
    past = this;
    start = false;                  
}
else if(paths[arr[this.id]].value == 'isSelected')
{
    this.animate({fill: '#32CD32'}, 200);
    paths[arr[this.id]].value = "notSelected"; /* set path value */ 
}
});

概要 if (!start && past != this)は少し変わっており、必要であるか、アニメーション化されたフェードが台無しになり、途切れ途切れになります。パスが初めてクリックされた場合、フェードはトリガーされず、1 つのパスをハンマーでクリックしただけでは、白にフェードしません。メインのif/elseは、実際のコントロール値を処理します。jsfiddle を取得するまで、このリンクは目的の動作を示します。


ノート!このリンクのドロップ メニューは機能しません。

ハッピーフレンドリーをクリック

于 2012-06-25T16:53:56.680 に答える