2009-08-25 9 views
2

管理者ユーザーがサイトにログインしたときに表示されるツールパレットがあります。パレットはドラッグ可能です(jQueryUI.draggable経由で)。ページ/リフレッシュ間の位置を覚えておきたいのですが...これを行うための標準的な方法か、プラグインを使用する必要がありますか?自分自身をロールする(クッキーなど)?ページリフレッシュ間にjQueryのドラッグ可能なツールパレットの位置を記憶しています

答えて

5

クッキーは細かいオプションです - あなたは、このようfunctions by PPKを使用することができます。これは私のオリジナルの答えですが

$('#palette') 
    .css({ top: readCookie("palletteY")*1, left: readCookie("palletteX")*1 }) 
    .draggable({ stop: function (event, ui) { 
     createCookie("palletteX", ui.position.left, 100); 
     createCookie("palletteY", ui.position.top, 100); 
    } }); 
+0

私はこれが最も簡単だと思います。 ppkコード内のクッキーのデフォルト設定を与えられています...しかし、ちょっとしたしわ - パレットは位置を使って表示されます:つまり、ウィンドウコンテンツがスクロールされたときに置かれます。 *うまくいくはずです;-) – Dycey

+0

かなり変です! ui.positionは正しい値を保持していますか? –

+0

はい - Cookieが正しく格納され、更新されています。しかし、ページをリフレッシュすると、パレットはまだデフォルトの場所にロードされます。コードが実行され、ファイヤーバグはスタイルが変更されたことを示しています...まだそれはそのまま残ります。私はあなたに戻ってきます。 – Dycey

1

私はこれを行うためのプラグインまたは標準については気づきませんが(存在する可能性はありますが)、それはあまりにも複雑な操作ではありません。クッキーはそれを達成する一つの方法です。

このタイプのクライアント側の状態を格納するための私の好ましい方法は、新しい状態をAjax経由でサーバーに配信するコールバック関数を設定することです。それで、私はそれで喜んですることができます。一般的に、私はセッションでそれを保存しますが、特定のものを永続的に保持し、セッションからデータベースに移動する必要があると判断したときがあります。このサーバー側を保存することで、変更を簡単に行うことができます。私は、Ajaxコールバックを介してセッションに格納し、pageloadで取得することをお勧めします。

1

私はクッキーは良い解決策だと思います。 jquery cookieプラグインhereもあります。 stop eventのクッキーに座標を保存することができます。ページが変わったら、クッキーが存在するかどうかをチェックし、そうであればドラッグ可能なCSSを変更します。

データベースにサーバーに保存することはできますが、それはちょっと残酷すぎるようです。スキーマを変更する必要があるためです。

Kevinはunload eventを使用して座標を保存することを推奨しました。この方法では、ドラッグが停止するたびにCookieに書き込む必要はありません。

+0

...クライアント側のクッキーを保存することの効果を持っていることを覚えておいてください。すべてのページ要求に対して、それらは常にサーバー側に送信されます。 - >はるかに多くのトラフィック。 – elcuco

+0

@elcucoしかし、管理者だけでなく、サーバーに格納することは、おそらく追加のデータベースクエリを意味するでしょう。 – MrHus

+0

サーバーに格納するとパフォーマンスは向上しますが、「パーソナライゼーション」機能全体にはクッキー以上のコストがかかります。また、パレットが移動されると、オーバーヘッドである位置を保存するために、Ajaxリクエストが発生します。 –

関連する問題