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对象中进行处理。

  • 相关阅读:
    开发管理工具(日常)
    python之uWSGI和WSGI
    php之Opcache
    nginx之健康检查
    重构糟糕的代码(一)
    PHP之50个开源项目
    Redis之各版本特性
    Redis之淘汰策略
    Redis之过期策略
    高并发之nginx限制
  • 原文地址:https://www.cnblogs.com/zczhangcui/p/7202328.html
Copyright © 2011-2022 走看看