点击后退按钮回到本页面中的另一个标签页(tab)

时间:2022-09-07 09:20:22

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

点击后退按钮回到本页面中的另一个标签页(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对象中进行处理。

点击后退按钮回到本页面中的另一个标签页(tab)的更多相关文章

  1. 在一个jsp页面中引用另一个jsp文件的路径的问题

    为了提高代码的重用性,经常需要在一个jsp页面中引用另一个jsp文件的代码.关于引用时的路径的问题.下面只介绍动态引用的,我觉得静态引用的应该也一样. 相对路径: 一.在同一个文件夹下,a.jsp中引 ...

  2. 问题:asp.net 点击button按钮调到页面顶部;结果:asp.net点击一个按钮,使页面跳转到本面页上的指定位置

    asp.net点击一个按钮,使页面跳转到本面页上的指定位置 (2011-04-19 16:46:51) 转载▼ 标签: it   最近在做一个项目. 用到标题所说的功能. 实现方法: 1.在aspx中 ...

  3. 在JSP页面中调用另一个JSP页面中的变量

    在jsp学习中,经常需要在一个jsp页面中调用另一个jsp页面中的变量,下面就这几天的学习,总结一下. jsp页面之间的变量调用有多种方法: 1.通过jsp的内置对象—request对象获取参数: ( ...

  4. JSP页面中引入另一个JSP页面

    一个JSP页面中引入另一个JSP页面,相当于把另一个JSP页面的内容复制到对应位置: <%@include file="date.jsp" %> 一般页面的top和bo ...

  5. selenium控制超链接在当前标签页中打开或重新打开一个标签页

    selenium控制超链接在当前标签页中打开或重新打开一个标签页 在web页面源码中,控制超链接的打开是在当前标签页还是重新打开一个标签页,是由属性target=“_black”进行控制的.如果还有属 ...

  6. 在html页面中引入另一个html页面

    我们在使用html编写一个网站的时候,通常情况下头部和尾部是相同的,如果一个网站的每个页面都把这些代码写一遍,不仅浪费时间,还显得重复代码很多,所以此时把重复的页面单独摘出来,在用到的时候从外部直接引 ...

  7. 在QMainWindow中利用多个QDockWidget构成标签页tab(原创)

    功能描述: 在QMainWindow下,使用多个QDockWidget构成可切换,可拖动,可关闭的标签页:标签页的切换由相关联的QAction触发. 实现效果: 代码如下: QDockWidget * ...

  8. 使用bootstrap响应式布局——手机屏幕中横向滚动显示标签页选项

    导航栏到小屏幕的时候,我们的处理办法是隐藏为一个按钮.可是选项卡的标签页部分,我们的处理办法是加一个水平滚动条.但是加水平滚动条需要解决一个问题,就是宽度的问题,如果不设置宽度,他就会根据屏幕大小自适 ...

  9. JS中对获取一个标签的class的方法封一个库

    在JS中我们经常会会用到,获取一个标签的id var aId=document.getElementById("id") 现在虽然有getElementsByClassName这个 ...

随机推荐

  1. PGPool 配置错误定位 s&lowbar;do&lowbar;auth&colon; expecting R got E

    自从按照教程 http://www.pgpool.net/docs/latest/pgpool-zh_cn.html#hba配置好PGPool以后,每次启动 pgpool -c -n -D 都报 s_ ...

  2. Guava 集合框架

    在本系列中我们首先来学习一些Guava的集合框架,也就是这个package:com.google.common.collect 在这个包下面有一些通用的集合接口和一些相关的类.   集合类型: BiM ...

  3. &sol;proc&sol;uptime详解

    From:http://smilejay.com/2012/05/proc_uptime/ 在Linux中,我们常常会使用到uptime命令去看看系统的运行时间,它与一个文件有关,就是/proc/up ...

  4. unreal3之FName及潜在bug

    FName是unreal3里对字符串高效处理的一种机制 基本原理就是把字符串hash存起来,然后每个字符串就只需要用一个数组索引值来表示了 FName的属性: NAME_INDEX Index; IN ...

  5. python7 静态方法、类方法、属性方法 ;反射;异常处理

      #-*- coding:utf8 -*- # 静态方法@staticmethod # 静态方法(当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了.) clas ...

  6. vue&period;js插件使用&lpar;01&rpar; vue-resource

    本文的主要内容如下: 介绍vue-resource的特点 介绍vue-resource的基本使用方法 基于this.$http的增删查改示例 基于this.$resource的增删查改示例 基于int ...

  7. 成功解决react&plus;webpack打包文件过大的问题

    最近在学习并使用webpack+react+antd写了一个小项目,也可以说是demo,待全部开发完成后发现webpack的打包文件足足有将近13.3MB,快吓死宝宝了,经过连续几天的学习,和调试最后 ...

  8. H5单张、多张图片保存续篇

    前言 这篇是接上篇内容.还没看的可以看H5单张.多张图片上传这篇文章预热. 图片入库 本章我们就来看看如何让多种图片保存至数据库中.数据库:mysql   后端:.NET Core 我们回顾一下上篇我 ...

  9. Jmeter4&period;0&plus;版本If Controller使用

    最近需要混合压测, 需要按比例混压多个接口, 需要使用if controller, 直接写比较的函式就是不通, 关于if controller的使用, 网上找了一些资料, 发现在jmeter4.0+版 ...

  10. react学习&lpar;三&rpar;之生命周期&sol;refs&sol;受控组件 篇

    挂载/卸载 //在类组件中 class Clock extends React.Component { constructor(props) { super(props); this.state = ...