网页上模拟浏览器前进后退功能(二)

昨天解决这个问题的时候,没有经过仔细测试,今天同事帮我发现了一个问题,就是当用户已经浏览过其他页面、或者在点击返回按钮后,继续点击新页面链接的情况下,昨天写的这个模拟功能会存在bug,因为此时history.length已经有了一个不为1的初始值,导致程序中判断后会出现bug。细想还是因为自己急于项目进度,没有仔细弄懂浏览器前进后退的机制。今天测试了一下浏览器这两个按钮的功能,发现点击后退,再点击新页面链接时,后退过的那部分页面信息会被删除掉。比如,我按照次序浏览了ABCDE五个页面(history.length=5),然后通过返回按钮,返回到了C页面(history.length=5),然后再点击页面上的新链接,进入X(history.length=3)Y(history.length=4)Z(history.length=5)这三个页面,那么此时,history.length应该等于5,即ABXYZ的浏览记录。

弄清楚了这个机制,再修改一下代码,总算搞定了问题。实现原理是通过在cookie中存储两个变量,一个模拟history.length的值,另一个代表用户在历史记录中的坐标。

// @charset "utf-8";
// 顶部工具栏
var Controller_Toolbar = function () {
	var self = this,
		_isFirstPage = null,
		_isLastPage = null,
		_initSwitchPageEvent = null,
		_forword = null,
		_goback = null,
		_setCount = null,
		_init = null;
	
	/**
	 * 工具栏事件(前进、后退)
	 * 思路:在cookie中存储两个Integer型变量
	 * cur_news_page	:	当前页下标
	 * total_news_page	:	用户浏览过的页面总数
	 */
	_initSwitchPageEvent = function () {
		$('.back').live('click', function () {
			if (!_isFirstPage()) {
				_goback();
			}
		});
		$('.forword').live('click', function () {
			if (!_isLastPage()) {
				_forword();
			}
		});
		
		$('.btn_left').click(function () {
			_setCount();
		});
		$('.btn_right').click(function () {
			_setCount();
		});
		$('.highlight_tip > span').click(function () {
			if (!$(this).hasClass('current')) {
				_setCount();
			}
		});
		
		
		// 初始样式
		if (!_isFirstPage()) {
			$('.back_disabled').removeClass('back_disabled').addClass('back');
		} 
		if (!_isLastPage()) {
			$('.forword_disabled').removeClass('forword_disabled').addClass('forword');
		}
	};
	
	/**
	 * 计数变量的赋值
	 */
	_setCount = function () {
		var curPage = Util.Cookies.get('cur_news_page');
		curPage = curPage || 1;
		curPage = parseInt(curPage) + 1;
		Util.Cookies.set('cur_news_page', curPage);
		Util.Cookies.set('total_news_page', curPage);
		
	};
	
	/**
	 * 是否为第一页
	 * @returns {Boolean}
	 */
	_isFirstPage = function () {
		var curPage = Util.Cookies.get('cur_news_page'),
		curPage = curPage || 1;
		if (curPage == 1) {
			return true;
		}
		return false;
	};
	
	/**
	 * 是否为最后一页
	 * @returns {Boolean}
	 */
	_isLastPage = function () {
		var curPage = Util.Cookies.get('cur_news_page');
		var totalPage = Util.Cookies.get('total_news_page');
		curPage = curPage || 1;
		totalPage = totalPage || 1;
		if (curPage == totalPage) {
			return true;
		}
		return false;
		
	};
	
	/**
	 * 前进
	 */
	_forword = function () {
		var curPage = Util.Cookies.get('cur_news_page');
		Util.Cookies.set('cur_news_page', (parseInt(curPage) + 1));
		history.go(+1);
		
	};
	
	/**
	 * 后退
	 */
	_goback = function () {
		var curPage = Util.Cookies.get('cur_news_page');
		Util.Cookies.set('cur_news_page', (parseInt(curPage) - 1));
		history.go(-1);
	};
	
	_init = function () {
		_initSwitchPageEvent();
	};
	
	_init();
};



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值