【问题标题】:Progressive enhancement, behavior when pages are not fully loaded yet渐进增强,页面尚未完全加载时的行为
【发布时间】:2009-06-03 20:56:38
【问题描述】:

我正在使用完全在 jQuery 中实现的渐进增强来开发网站。

例如,我正在动态添加 onclick 事件处理程序以锚定标签以使用 SoundManager “内联”播放链接的 MP3 文件,并通过 $(document).ready(function()) 弹出 Youtube 播放器以获取 Youtube 链接。

但是,如果用户在页面加载时点击它们,他们仍然会得到非增强版本。

我考虑过隐藏相关的东西(通过 display: none 或类似的东西)并在加载时显示它,或者放置一个模式“加载”对话框,但听起来都像黑客。

有更好的想法吗?我觉得我在这里遗漏了一些非常明显的东西。

问候,

亚历克斯

【问题讨论】:

    标签: javascript jquery html progressive-enhancement


    【解决方案1】:

    我还没有测试过,但你可以试试live。想法是您可以将单击处理程序放在 document.ready 之外,以便它们立即执行。由于live 使用event delegation 来实现其功能,因此您实际上不需要等待DOM 准备好,并且在页面加载时进行的任何点击仍应由事件处理程序捕获。

    如果这不起作用,您可以尝试将 Javascript 脚本标记直接放在需要绑定的任何内容下方。它不漂亮,但它几乎可以解决问题。

    【讨论】:

    • live 是否完全跨浏览器且性能良好?如果是这样,这是正确的答案。我知道 live 但并没有考虑过将它用于此...
    • Live 保证可以在 jQuery 支持的所有浏览器中工作:docs.jquery.com/Browser_Compatibility
    【解决方案2】:

    假设您做出了良好的判断,并且人们只是因为延迟太长而爱上了非增强版本,那么我将使用 CSS 禁用控件。 CSS 几乎会立即加载。然后使用 Javascript,我将切换 CSS,以便重新启用控件。

    但是,我的第一反应是,如果用户可以在页面加载时单击它,那么您的页面或连接太慢了。但是,如果这种情况很少发生——不到 1% 的时间——那么你可以不理会它,只要用户能够实现他的目标,那就是听他的音乐。我这样说是因为一旦用户意识到更好的体验等待半秒后,他通常会等待Javascript渲染然后点击。

    【讨论】:

    • 是的,但是 CSS + 没有 javascript = 糟糕的体验!我承认这并不常见,但我自己使用 Noscript 并且会讨厌这种行为。另外,我同意这并不常见,但如果可以的话,我想迎合它。
    【解决方案3】:

    关于使用 CSS,我与 aleemb 持相反的立场。如果您使用 css 禁用控件,那么任何禁用 javascript 或正在使用辅助功能软件的人都将无法使用这些控件,除非您完全禁用您的样式表。

    您可以在结束 body 标记之前使用非常小的内联 javascript 来通过 js 快速隐藏元素。如果它是内联的并且不需要加载外部资源,它会非常快,通常比用户点击要快。

    但是,我确实同意 aleemb 的观点,如果您的用户能够在您的 js 加载之前对页面进行心理处理并使其成为他们想要单击的控件,那么可能存在更深层次的问题您的页面加载方式。研究减少加载时间的方法:压缩图像文件、压缩 html/css/js 文件、缩小 javascript、将图像组合成 sprite 等。

    【讨论】:

      【解决方案4】:

      我建议关注Paolo Bergantino's advise - 事件委托是完全避免该问题的方法。

      我遇到了一个类似的问题,即事件委托无法完成这项工作 - 你可以read about that here。

      【讨论】:

        猜你喜欢
        • 2016-06-10
        • 2014-03-25
        • 2014-01-17
        • 2011-10-29
        • 2013-10-20
        • 2013-03-14
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多