zoukankan      html  css  js  c++  java
  • 点击后退按钮回到本页面中的另一个标签页(tab)

    在使用zepto进行微信网页开发的时候,遇到一个情况,在本页面存在四个TAB栏,每点击一个栏会显示相应的内容,下图这种:

    现在有一个需求是,用户点击了后退按钮,需要回到上一次点击的tab栏。

    这个需求可以使用history对象进行进行处理。

    首先就是history.pushState方法和history.replaceState以及window的popstate对象。每次history的回退或前进,都会触发popstate事件,所以我们就使用popstate事件做文章。

    1、首先,点击tab栏的时候,将点击的tab栏的信息使用pushState方法在history对象中写入一条新纪录,比如我点击第一个tab栏的时候,就将它的index值写入url的hash中。

    2、window上绑定popstate事件,当我点击了后退按钮,触发popstate事件,此时我取出url中的hash值,它记录着上次点击tab栏的index信息。根据这个index信息处理tab栏的显示与隐藏。

    代码示意:

    // 添加标签页hash,首次进来时添加hash为p=0.
    if (!window.location.hash) {
        history.replaceState(null, null, '#p=0');
    }
    // 给tab栏绑定点击事件,点击事件处理两件事:显示需要显示的内容,如果tab的index和url中的index信息不同,那么push进入一条新的历史记录。
    $('.navbar_item').click(function(event) {
        var page_idx = + (window.location.hash && window.location.hash.substr(-1));
        var idx = $(this).index();
        if (page_idx !== idx) {
            history.pushState(null, null, '#p='+idx);
        }
        $('.page_navbar').forEach(function(ele, idx2) {
            // 处理tab栏样式
            $(ele).find('.navbar_item').eq(idx).addClass('active').siblings('.navbar_item').removeClass('active');
        });
        // 显示tab对应的内容        
    $('.page_navcontent').eq(idx).show().siblings('.page_navcontent').hide();
    $('.page').scrollTop(0); });
    // 绑定popstate事件,触发事件后根据url中的tab的index信息进行处理
    $(window).on('popstate', function(event) {
        var idx = + (window.location.hash && window.location.hash.substr(-1));
        $('.page_navbar').eq(0).find('.navbar_item').eq(idx).trigger('click');
    });

    大概意思是这样的,但是tab的index信息也不一定要放在url的hash中,也可以放在pushState的第一个参数——state对象中进行处理。

  • 相关阅读:
    171. Excel Sheet Column Number (Easy)
    349. Intersection of Two Arrays (Easy)
    453. Minimum Moves to Equal Array Elements (Easy)
    657. Judge Route Circle (Easy)
    CSS笔记
    保存页面状态
    UI开发总结
    ubuntu 下配置munin
    反向代理配置
    JavaScript 高级程序设计第二版
  • 原文地址:https://www.cnblogs.com/zczhangcui/p/7202328.html
Copyright © 2011-2022 走看看