• 一个简单的样例看明确怎样利用window.location.hash实现ajax操作时浏览器的前进/后退功能


    我们知道JavaScript中非常早就提供了window.history对象,利用history对象的forward()、go()、back()方法可以方便实现不同页面之间的前进、后退等这样的导航功能。

    可是AJAX操作。是不能用浏览器的前进和后退button进行导航的,由于浏览器并不会将AJAX操作增加到历史记录中。可是借助location.hash,我们可以自己实现AJAX操作的前进和后退。关于window.location.hash的具体介绍和使用方式,可以參考以下这2篇文章。

    location.hash具体解释和   6 Things You Should Know About Fragment URLs

    我们须要知道下面2点:

    1.假设location.hash发生了变化,那么浏览器地址栏url会发生变化。并且浏览器会产生1个历史记录。

    2.假设location.hash发生了变化,会产生一个hashchange事件,我们能够处理这个事件。

    <!DOCTYPE html> 
    <html>
    <head>
    	<meta charset="utf-8">
    	<script type="text/javascript" src="jquery-1.11.1.min.js"></script>		
    	<script type="text/javascript">		
    	
    		var currentPageIndex = 0;
    				
    		window.onload = function(){
    			currentPageIndex = 0;
    			showPageAtIndex(currentPageIndex);
    			recordHash(currentPageIndex);
    		}
    		
    		// onhashchange能够监控hash变化
    		window.onhashchange=function(){
    			var hash = window.location.hash;
    			
    			var id = parseInt(hash.substr(1));
    			
    			showPageAtIndex(id);
    		};
    				
    		function toNextPageWhenClick()
    		{
    			currentPageIndex++;
    			
    			if(isValidPageIndex(currentPageIndex))
    			{
    				showPageAtIndex(currentPageIndex);
    				recordHash(currentPageIndex);
    			}
    			else
    			{
    				return;
    			}
    		}
    		
    		function showPageAtIndex(id)
    		{
    			$("div[id!="+id+"]").hide();
    			$("#"+id).show();
    			
    			if(isHomePage(id))
    			{
    				$("input").attr("value","current is home page,next page=1");
    			}
    			else if(isLastPage(id))
    			{
    				$("input").attr("value","current page="+id+", it is the end.");
    			}
    			else
    			{
    				$("input").attr("value","current page="+id+",next page="+(id+1));
    			}
    		}
    		
    		function isValidPageIndex(id)
    		{
    			return id <= 5;
    		}
    		
    		function isLastPage(id)
    		{
    			return id == 5;
    		}
    		
    		function isHomePage(id)
    		{
    			return id == 0;
    		}
    		
    		// hash改变,浏览器会自己主动生成一个历史记录
    		function recordHash(id)
    		{
    			window.location.hash=id;
    		}
    	</script>
    	
    	<style>
    		.navigate{
    			height:100px;
    			300px;
    			background-color:#0000ff;
    			display:none;
    		}
    		
    		.home{
    			height:100px;
    			300px;
    			background-color:#00ff00;
    			display:none;
    		}
    		
    		.last{
    			height:100px;
    			300px;
    			background-color:#ff0000;
    			display:none;
    		}
    	</style>
    </head> 
    <body>
    	<input type="button" value="" onclick="toNextPageWhenClick();">
    	
    	<div class="home" id="0">HOME PAGE</div>
    	<div class="navigate" id="1">ajax1</div>
    	<div class="navigate" id="2">ajax2</div>
    	<div class="navigate" id="3">ajax3</div>
    	<div class="navigate" id="4">ajax4</div>
    	<div class="last" id="5">last page</div>
    </body>
    </html>
    


    在chrome下执行这个html文件,默认显示home page,点击button的时候回调到下一个页面(直到最后一个页面为止)。我们能够点击浏览器的前进、后退button,实现模拟ajax前进、后退的功能。




  • 相关阅读:
    C# 使用Lazy 懒加载
    软件测试用例报告整理
    什么是事务,为什么要引入事务?
    WPF+DataGrid+MySQL实现增删改查、Excel文件导出
    git 设置远程库别名
    Access Like内存溢出问题排查,并找出相应的包含26个日文片假名数据的sql语句
    java 离线中文语音文字识别
    fbx的法线设置方式引起的显示不正确
    C#定时job
    CSS3+js实现循环滚动文字播放与暂停demo
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5098973.html
Copyright © 2020-2023  润新知