在页面刷新之间记住jQuery可拖动工具选项板的位置

在页面刷新之间记住jQuery可拖动工具选项板的位置,jquery,jquery-ui,state,draggable,Jquery,Jquery Ui,State,Draggable,我有一个工具选项板,当管理员用户登录到一个站点时显示。调色板是可拖动的(通过jQueryUI.draggable),我希望它记住页面/刷新之间的位置。。。有没有一种标准的方法可以做到这一点,或者我应该使用一个插件,或者我需要自己使用(通过cookies或其他方式)?我不知道有什么插件或标准可以做到这一点(尽管它们很可能存在),但无论如何,这不是一个非常复杂的操作。饼干是实现它的一种方式 存储这种类型的客户端状态的首选方法是设置回调函数,该函数通过Ajax将新状态传递给服务器。然后,我可以随心所欲

我有一个工具选项板,当管理员用户登录到一个站点时显示。调色板是可拖动的(通过jQueryUI.draggable),我希望它记住页面/刷新之间的位置。。。有没有一种标准的方法可以做到这一点,或者我应该使用一个插件,或者我需要自己使用(通过cookies或其他方式)?

我不知道有什么插件或标准可以做到这一点(尽管它们很可能存在),但无论如何,这不是一个非常复杂的操作。饼干是实现它的一种方式


存储这种类型的客户端状态的首选方法是设置回调函数,该函数通过Ajax将新状态传递给服务器。然后,我可以随心所欲地使用它。通常,我会将其存储在会话中,但有时我会决定某些内容应该永久保留,并将其从会话移动到数据库中。将此存储在服务器端可以让您轻松地进行更改。我建议首先通过Ajax回调将其存储在会话中,然后在pageload上检索它。

我认为cookies是一个很好的解决方案。甚至还有一个jquery cookie插件。您可以将坐标保存在计算机上的cookie中。当页面更改时,您可以检查cookie是否存在,如果存在,则更改可拖动页面上的css

你可以把它保存在服务器上的数据库中,但这对我来说似乎有点过分了。因为您必须更改您的模式


Kevin建议使用保存坐标。这样,您就不必在每次拖动停止时都写入cookie。

Cookies是一个很好的选项-您可以这样使用:

$('#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);
     } });

虽然这是我最初的答案。。。请记住,在客户端存储cookie会产生影响。对于每个页面请求,它们总是传输到服务器端。->更多的流量。@elcuco但这只对管理员而言,再加上在服务器上存储可能意味着额外的数据库查询。在服务器上存储可能会获得更好的性能,但整个“个性化”功能的成本将远高于cookie。而且,每当调色板被移动时,都会有一个ajax请求来保存位置,这也是一种开销。无论如何,将静态资源保留在一个无cookie的子域上是最好的选择。有没有理由不等到卸载事件发生后再保存坐标?无论您选择AJAX路由还是cookie路由,这都会为您节省一些开销。我认为这是最简单的,特别是在ppk代码中默认设置了cookie的情况下。。。但是,有一个小问题-调色板是使用位置显示的:已修复,即当滚动窗口内容时,它保持不变,尽管我可以看到您的解决方案应该可以工作,但它不能;-)是-cookie正在正确存储和更新。但在页面刷新时,调色板仍在默认位置加载。代码执行,firebug显示样式已更改。。。但是它仍然存在——因此css中存在一些错误。我会再打给你的。问题在于如何使用数字$(调色板)css({top:$.cookie(“调色板”)*1,左:$.cookie(“调色板”)*1})。可拖动({stop:function(event,ui){$.cookie(“paletteX”,ui.position.left);$.cookie(“paletteY”,ui.position.top);});多么经典的错误:)我很高兴你找到了!