博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两种思路实现单页面路由的功能
阅读量:6095 次
发布时间:2019-06-20

本文共 1504 字,大约阅读时间需要 5 分钟。

在项目中需要去实现一个简单地单页面应用,不同的页面会ajax查询不同的参数返回不同的内容填充页面内,所以需要自己去实现类似页面路由的功能,经过思考大概有两种解决方案:

一、用HTML5 history pushState/replaceState属性实现页面的前进后退功能

实现思路大致如下:

1.当页面发生跳转时,将要查询的参数添加在url的参数中,如www.xxx.com?a=1&b=2,通过history.pushState将该地址加入到浏览器的历史页面中;

2.因为浏览器前进后退都会触发popState事件,所以需要监听浏览器的popState事件当后退或者前进发生时根据url后面参数的变化重新进行ajax请求以及内容的填充;

3.另外还需要考虑页面第一次进入无参数的情况,因此需要在页面初始化的时候设置一个默认参数例如第一个菜单的页面参数,另外通过history.replaceState将该页面加入到历史页面中

简单地demo:

(function(){	var initHash = function() {		var param = location.href.split('?')[1]		//如果没有查询参数		if(typeof param == "undefined") {		}else{			//根据参数ajax查询并填充dom		}	}	if (history.pushState) {		initHash()		window.addEventListener("popstate", function() {	        initHash();                             	    });		}	})()

  但是这个方法因为是用了HTML5的新特性所以不兼容ie8,所以在项目中并不适用,所以在实际操作中我用了第二种方法

二、利用location.hash来实现页面的后退及前进

基本思路如下:

1.在页面初始化的时候读取url中的hash内容,然后根据hash中的参数进行ajax查询。

2.在页面内部跳转的时候有一个难题需要解决,就是当页面的hash改变时页面不会即时刷新,所以需要去监听hash的变化,但是hashashchange这个事件也只兼容ie8+的浏览器,为了解决兼容性可以在ie8及以下写一个定时函数定时去读取hash的值以监听起变化。另外可以用jquery-hashchange.js插件直接代替(https://github.com/cowboy/jquery-hashchange/)

3.同理,在第一次进入到此页面时需要为其设置一个默认参数。

demo如下,其实和第一个很相像:

(function(){	var showByTag = function() {		var param = location.hash.substr(1);		//如果没有查询参数		if(typeof param == "undefined") {		}else{			//根据参数ajax查询并填充dom		}	}	if (history.pushState) {		showByTag();		$(window).hashchange(function () {            window.scrollTo(0,0);            showByTag();	    });	}	})()

  

以上

转载于:https://www.cnblogs.com/cheerup/p/7269408.html

你可能感兴趣的文章
<Codeforces Round #147 (Div. 2)>A. Free Cash(水题)
查看>>
转 OFBiz财务模型-金融账户
查看>>
一个男人关心的东西 决定了他的层次
查看>>
2013年1月第1个周末
查看>>
jstree的数据后台生成
查看>>
文本文件与二进制文件的比较
查看>>
索引 - 聚集索引设计指南
查看>>
dom4j使用selectSingleNode方法报错
查看>>
搜狗垂搜笔试
查看>>
Android JSON数据解析
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
Oracle表分区
查看>>
centos 下安装g++
查看>>
调试、手机-手游开发知识(三)--NDK联机调试-by小雨
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>