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

本文共 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

你可能感兴趣的文章
LINUX下 lamp安装及配置
查看>>
BZOJ3105 [cqoi2013]新Nim游戏
查看>>
困惑的前置操作与后置操作
查看>>
SDNU 1269.整数序列(水题)
查看>>
BZOJ 2118 Dijkstra
查看>>
Go语言基础之结构体
查看>>
SpringCloud:Eureka Client项目搭建(Gradle项目)
查看>>
jqueryValidate
查看>>
ATL使用IE控件,并且屏蔽右键
查看>>
Jenkins
查看>>
linux下使用screen和ping命令对网络质量进行监控
查看>>
数据库设计技巧
查看>>
css定位概述
查看>>
C# 动态修改配置文件 (二)
查看>>
BOM:文档对象模型 --树模型
查看>>
我的Android进阶之旅------>WindowManager.LayoutParams介绍
查看>>
segment
查看>>
获取鼠标的原始移动值
查看>>
Linux信号 编程
查看>>
有关滚动与位置
查看>>