首页 文章

在刷新JS上显示最后一个活动div

提问于
浏览
0

我在单页网站上有一个相当基本的导航选项卡,显示/隐藏div . 但是,当我刷新页面时,它会返回登陆“页面”div,而不是停留在当前选项卡上 . 我使用以下JS在选项卡之间切换,如果可能的话我想继续使用此方法:

var links = document.getElementById('navs').getElementsByTagName('a');

for(var i = 0, link; link = links[i]; i++) {
    link.onclick = showContent;

    // Hide content divs by default
    var contentdiv = getContentDiv(link)
    if (contentdiv == null){
        continue;
    }
    contentdiv.style.display = 'none';
}

// Show the first content div
if(links.length > 0) showContent.apply(links[0]);
var current;

function showContent() {

    // hide old content
   if(current) current.style.display = 'none';

   current = getContentDiv(this);
   if(!current) return true;

   current.style.display = 'inline-block';

   return true;

}

function getContentDiv(link) {

    var linkTo = link.getAttribute('href');
    console.log(linkTo);

    // Make sure the link is meant to go to a div
    if(linkTo.substring(0, 2) != '#!') return;
    linkTo = linkTo.substring(2);
    return document.getElementById(linkTo);

}

我知道它因为_1862924而刷新到着陆div但是,我希望使用这个方法并将链接迭代号存储在一个名为current_link的变量中,然后能够调用 if(links.length > 0) showContent.apply(links[current_link]); 甚至 if(links.length > 0) showContent.apply(current_link);

我尝试了几种方法,但最终只保存导航栏中的第一个或最后一个选项卡 . 页面也刷新为默认div,但url保持不变 . EX . 即使页面显示http://example.com/#!home,网址为http://example.com/#!tab1

这是html:

<nav class="navbar navbar-fixed-top" id= "navs" role="navigation">
        <div class="container">
            <!-- Brand and toggle get grouped for better mobile display -->
                <div class="navbar-header">
                    <div class="navbar-brand"> 
                        <a id="logo" href="#!home"><img id="logo-pic" src="images/name.png" alt="" width="50%" height="auto"></a>
                    </div>
                </div>
                <!-- Collect the nav links, forms, and other content for toggling -->
                <div class="navbar" id="navbar-collapse-1">
                        <ul class="nav navbar-right navbar-nav">
                            <a href="#!home"></a>
                            <li class="dropdown">
                                <a href="#!tab1">tab1</a>
                            </li>
                            <li>
                                <a class="dropdown-toggle" data-toggle="dropdown" href="#">tab2</a>
                                        <ul class="dropdown-menu dropdown-menu-right pull-center">
                                          <li><a href="#!tab21">tab21</a></li>
                                          <li><a href="#!tab22">tab22</a></li>
                                        </ul>
                            </li>
                            <li>
                                <a class="dropdown-toggle" data-toggle="dropdown" href="#">tab3</a>
                                        <ul class="dropdown-menu dropdown-menu-right pull-center">
                                          <li><a href="images/about/Resume2016.pdf" target="_blank">resume</a></li>
                                          <li><a href="#!tab31">tab31</a></li>
                                          <li><a href="#!tab32">tab32</a></li>
                                        </ul>

                            </li>
                            <li>
                                <a href="#!tab4">tab4</a>
                            </li>
                            <li>
                                <a href="#!tab5">tab5</a>
                            </li>
                        </ul>
                </div>
            </div>
        <!-- /.container -->
</nav>

1 回答

  • 0

    保持页面状态的最佳方法是利用URL历史记录 .

    例如 . 当用户点击标签时,而不是仅仅进行导航:

    • 创建一个hashchange事件处理程序

    window.onhashchange = () => { ... };

    要么:

    window.addEventListener('hashchange', () => ...);

    所以你可以这样做:

    const navigate = () => open_tab(location.hash.substr(1)); // get rid of the '#'
    window.addEventListener('hashchange', navigate);
    

    您还希望在页面加载时导航:

    navigate();

    • 现在,当用户单击选项卡或其他任何内容时,请更改页面位置的哈希值:

    location.hash = "tab1";

    这是一项额外的工作,但好处是巨大的:

    • 刷新页面按预期工作

    • 如果用户为该页面添加书签,则他们会为UI的状态添加书签

    • 前进和后退导航现在按预期工作 .

相关问题