【问题标题】:How do you handle the back button in jQuery?你如何处理jQuery中的后退按钮?
【发布时间】:2012-01-27 16:05:20
【问题描述】:

我只是找不到令人满意的方式来处理浏览器的历史记录。当然有像History.js 这样的可爱插件,它适用于较小的东西。但是让我举个例子:

我有一个多页表单,它要求用户提供不同的东西。每次提交到下一页后(其实也一样,只是根据HTTP-POST变量改变视图),页面上会有一些动画和变化:

  • 主要内容更改为下一个表单(带有slideUp/slideDown)
  • 进度条通过动画改变其状态
  • 在此栏下方,一些关于一些输入的信息淡入

所以现在这很基本,但我已经在苦苦挣扎,因为所有动画(最后两部分)在每个状态(不同的 div,不同的输入源)上都是不同的,我不知道如何制作它们如此通用,我不必单独指定它们。

虽然我可以忍受,但是当用户点击后退按钮时,我必须再次重新定义所有这些动画(反向)。内容加载肯定没问题,它基本上只是用 ajax-load 重新加载文件:

  • 我在提交时执行pushstate,输入数据为stateObj
  • 所以我可以在绑定的“statechange”事件中执行内容加载

尽管如此,其余的让我发疯。

【问题讨论】:

    标签: php javascript jquery model-view-controller pushstate


    【解决方案1】:

    您可以尝试JavaScriptMVC,其中包括 jQuery。不确定它是否符合您的确切要求,但它是 JavaScript 和 MVC...

    【讨论】:

    • 你能给我一些例子,它对我的​​情况有什么帮助吗?我实际上不是框架的忠实拥护者,因为我希望一切都尽可能苗条,没有多余的重量。我的项目不是很大,我是唯一的开发者,我的 php mvc 也是手工制作的。
    • 目前,不,我只有非常有限的互联网访问权限,而且我的开发设备被装箱了......但是,我有一个后端开发同事,对 JavaScript 的了解有限,最近在个人项目中使用了 JMVC 并对其发誓 - 非常易于使用并与后端挂钩,而且它是模块化的,因此您只需使用实际需要的位,而不必每次都使用整个框架。就我个人而言,我更喜欢框架,因为它们已经过社区彻底的错误测试,并且往往被编写成非常高的代码标准:)
    【解决方案2】:

    虽然不是很严格的 MVC(其中有几个用于 JavaScript),但我认为 backbone js 是一个很棒的框架,它基于 MVC 的概念,但经过重新设计以更好地适应 JavaScript 语言和环境。

    【讨论】:

    • 这里也一样,你能给我一些例子来解决我的具体问题吗?我不只是要求任何 MVC 或类似的东西,而是为像我这样的问题提供一些解决方案......以及这些解决方案的外观。仅仅一个框架是不够的
    • 为您提供backbone.js框架如何工作的背景超出了这个答案的范围。
    【解决方案3】:

    我强烈推荐学习 Backbone.js。它与 jQuery 配合得很好,并以修改后的 MVC 模式设置您的网站。它还有一个很好的系统来处理 URL 更改和执行适当的代码。

    至于滑动,如果你想反转动画,跟踪起来可能有点麻烦。当我在屏幕之间滑动时,我对我的应用程序所做的不是有时向上滑动有时向下滑动,而是总是移动我正在滑动到的 DOM 中的元素,以便它位于我从中滑动的元素之后。这样幻灯片总是朝着同一个方向前进,我的动画就不会变得愚蠢。

    【讨论】:

    • 我会看看backbone.js,谢谢。你也有一个例子,它对我的​​情况有什么帮助?滑动对我来说没问题,因为我要么自动检测想要的元素位置,要么总是从/向同一个方向滑入和滑出
    【解决方案4】:

    好吧,经过大量的折腾,我决定降级为解决我的问题的最简单和最好的解决方案:使用基础知识。

    当用户点击后退/前进按钮时,我没有对所有内容进行后退/前进动画,而是使用 ajax 重新加载整个站点,以便可以将 HTML/PHP 后备与所选站点的 stateObj 一起使用。

    History.js 的问题在于它无法区分 onstatechange-event 中的 pushState 和后退/前进按钮。所以我从 History.js 降级为带有 pushstate 的标准 W3C 行为。 1.8.0 的更新将允许区分内部和外部状态更改。

    感谢所有答案,但我想这是处理它的最准确方法,而单独使用 MVC 并不能解决问题 - 为什么我不接受任何其他答案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2016-02-07
      相关资源
      最近更新 更多