【问题标题】:How do you link to a specific part of a page in jQuery Mobile?在 jQuery Mobile 中如何链接到页面的特定部分?
【发布时间】:2014-03-18 20:01:12
【问题描述】:

我正在 jQM 中动态创建一些按钮,如下所示:

return '<a href="#glossary" id="' + match + '" class="glossaryLink" data-transition="slide">' + match + '</a>'; 

这适用于创建按钮 - 它们与按钮上的文本具有相同的 id,并且它们可以很好地链接到词汇表页面。

我需要做的是链接到词汇表页面中的特定地点

现在通常你会这样做

<a href="glossary.html#' +match+ '"> 

但在 jQM 中我必须这样做

<a href="#glossary#' + match + '">

这似乎不起作用。我用#glossary#target 创建了一个href,但它不起作用。

有没有办法做到这一点?

【问题讨论】:

    标签: jquery html jquery-mobile


    【解决方案1】:

    简单的解决方案,是添加一个自定义属性到 Anchor,例如data-subpage="#sectionOne",并将该值存储在一个变量中,以便稍后在您更改为glossary 页面时检索该值。

    <a href="#glossary" data-subpage="#sectionTwo" class="ui-btn subpage">Section two</a>
    

    #glossary 页面中,将id 属性添加到与链接中data-subpage 匹配但没有哈希# 的部分div。

    <div data-role="page" id="glossary">
      <div id="sectionOne">
        <p>Section one</p>
      </div>
    </div>
    

    使用pagecreate 上的点击事件与subPage 类绑定。单击后,将data-subpage 值存储在全局变量中。

    var subPage;
    
    $(document).on("pagecreate", "#pageID", function () {
        $(".subpage").on("click", function () {
            subPage = $(this).data("subpage");
        });
    });
    

    一旦您存储了 subpage 的值,您需要收听 pagecontainershow 以便滚动到存储在 subPage 变量中的 id 的 div。

    您需要首先使用getActivePage 定义活动页面是否为glossary。另外,检查subPage 变量既不是null 也不是undefined。否则页面会正常打开。

    如果活动页面是 glossary 并且定义了 subPage,则检索该 div 的 .offset().top 并滚动到带有动画或不带动画的它。

    此外,请注意,您需要 setTimeout 运行滚动功能,以确保页面已完全加载并且 transition 已完成。

    $(document).on("pagecontainershow", function () {
        var activePage = $.mobile.pageContainer.pagecontainer("getActivePage")[0].id;
        if ( !! subPage && activePage == "glossary") {
            var scrollTo = $(subPage).offset().top;
            setTimeout(function () {
                /* $.mobile.silentScroll(scrollTo); without animation */
                $("body").animate({
                    scrollTop: scrollTo
    
                }, 500, function () { /* 500ms animation speed - it's up to you */
                    subPage = null; /* reset variable */
                });
            }, 300); /* scroll after 300ms - it's up to you */
        }
    });
    

    Demo (1)

    (1) 在 iPhone 5 上测试 - Safari 移动版

    【讨论】:

    • 子页面不需要jQM插件吗,难道没有更简单的解决方案吗?这不会与我的其他代码相结合,因为词汇表链接是动态创建的——文本通过一个函数添加,并在与词汇表数据库匹配的任何文本周围添加锚点。我不想要或不需要滚动动画 - 只需获取信息即可。
    • @SubjectiveEffect 我知道您希望用户到达glossary 页面中的特定部分,对吗?当你可以在一些 JS 行中实现它时,为什么你需要一个插件?如果您不想要动画,请使用$.mobile.silentScroll()
    • @Omar 你不需要一个插件来让数据子页面工作吗?如果没有,我会再试一次。我尝试使用您的代码,但没有成功。
    • data-* 是 HTML5,它不需要任何插件。也许您需要调整我的代码以与您的代码保持一致。如果您需要进一步的帮助,请告诉我@SubjectiveEffect
    • 好的,我已经添加了您的确切代码,它就像正常链接一样 - 只是为了词汇表。我不知道为什么它不起作用。
    猜你喜欢
    • 2013-01-03
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    相关资源
    最近更新 更多