js在新页面中返回到上一页浏览的历史位置
在微信浏览器中浏览页面时,在当前页面中当我们将页面往下滚动到某一个位置时,可能我们就会点击某个链接而页面跳转到了另外一个页面,而当我们又返回到上一个页面时我们会发现那个页面还停留在我们之前浏览的位置,很方便我们接着往下浏览页面上其他的信息,这种效果大大提升了用户的体验度,提升了网站的逼格。今天,我就把实现这种效果的原理和代码分享给大家,方便大家的开发使用。
原理
1、用户滚动页面时,记录滚动条距离页面顶部的距离scrollTop;
2、将记录的值保存到cookie;
3、在返回到上一页时,再将保存到cookie中那个值赋值给上一页的滚动条距离顶部的距离scrollTop即可。
注意
明白了实现的原理,那么代码上的实现就简单多了。这里有一个问题值得注意,因为我们这个效果可能会在不同的页面上实现,那就要定义多个cookie来记录不同页面的滚动高度,因此相当麻烦。为了解决这个问题我们可以使用一个相对简单的方法,就是cookie的值是以页面的文件名命名,js中创建cookie时,自动获取页面路径,截取页面的文件名,并将cookie名设置为此文件名,这样就可以避免多次命名,从而减少了代码。
具体代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>在新页面中返回到上一页浏览的历史位置</title>
<style>
p{margin:30px 0;}
</style>
</head>
<body>
<p>在新页面中返回到前一页浏览的历史位置1</p>
<p>在新页面中返回到前一页浏览的历史位置2</p>
<p>在新页面中返回到前一页浏览的历史位置3</p>
<p>在新页面中返回到前一页浏览的历史位置4</p>
<p>在新页面中返回到前一页浏览的历史位置5</p>
<p>在新页面中返回到前一页浏览的历史位置6</p>
<p>在新页面中返回到前一页浏览的历史位置7</p>
<p>在新页面中返回到前一页浏览的历史位置8</p>
<p>在新页面中返回到前一页浏览的历史位置9</p>
<p>在新页面中返回到前一页浏览的历史位置10</p>
<p>在新页面中返回到前一页浏览的历史位置11</p>
<p>在新页面中返回到前一页浏览的历史位置12</p>
<p>在新页面中返回到前一页浏览的历史位置13</p>
<p>在新页面中返回到前一页浏览的历史位置14</p>
<p>在新页面中返回到前一页浏览的历史位置15</p>
<p>在新页面中返回到前一页浏览的历史位置16</p>
<p>在新页面中返回到前一页浏览的历史位置17</p>
<p>在新页面中返回到前一页浏览的历史位置18</p>
<p>在新页面中返回到前一页浏览的历史位置19</p>
<p>在新页面中返回到前一页浏览的历史位置20</p>
<p>在新页面中返回到前一页浏览的历史位置21</p>
<p>在新页面中返回到前一页浏览的历史位置22</p>
<p>在新页面中返回到前一页浏览的历史位置23</p>
<p>在新页面中返回到前一页浏览的历史位置24</p>
<p>在新页面中返回到前一页浏览的历史位置25</p>
<p>在新页面中返回到前一页浏览的历史位置26</p>
<p>在新页面中返回到前一页浏览的历史位置27</p>
<p>在新页面中返回到前一页浏览的历史位置28</p>
<p>在新页面中返回到前一页浏览的历史位置29</p>
<p>在新页面中返回到前一页浏览的历史位置30</p>
<a href="01.html">去下一页</a>
<script src="zepto.min.js"></script>
<script>
$(function () {
var str = window.location.href;
str = str.substring(str.lastIndexOf("/") + 1),
getCookie = localStorage.getItem(str);
if (getCookie) {
$("html,body").scrollTop(getCookie);
}
});
$(window).scroll(function () {
var str = window.location.href;
str = str.substring(str.lastIndexOf("/") + 1);
var top = $(window).scrollTop(); //在zepto下这里使用$(document)是获取不到页面滚动的高度,在jq下是可以的
localStorage.setItem(str, top);
});
</script>
</body>
</html>
下一页的代码随便写就可以了,主要是为了能够返回上一页。
下一页代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>在新页面中返回到前一页浏览的历史位置</title>
</head>
<body>
<p>在此页面直接返回到上一页就可以看到上一页的浏览的历史位置</p>
</body>
</html>
在代码中,大家可能会发现我使用了localStorage这个属性,这个属性是H5的特性,也是用来保存cookie的,具体使用方法大家可自行查阅资料,这里不多说。如果是用在PC端,大家尽量选择原生js的cookie或使用jq的cookie插件,原理跟H5的一样。
最后附上本案例代码的下载包:在新页面中返回到上一页浏览的历史位置
js在新页面中返回到上一页浏览的历史位置的更多相关文章
- 控制使用jquery load()方法载入新页面中的元素
最近在项目中用到jquery的load()方法来加载页面,首先简单说一下load()方法. load(url,data,callback);该方法接收三个参数,第一个是载入的页面地址,第二个是要传到服 ...
- 如何使用Web3.js API 在页面中进行转账
本文介绍如何使用Web3.js API 在页面中进行转账,是我翻译的文档Web3.js 0.2x 中文版 及 区块链全栈-以太坊DAPP开发实战 中Demo的文章说明. 写在前面 阅读本文前,你应该对 ...
- 使用HTML5的JS选择器操作页面中的元素
文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 <!DOCTYPE html> 2 <html lang="en"> ...
- js打开新页面 关闭当前页 关闭父页面
js打开新页面.关闭当前页.关闭父页面 2010-04-29 14:04:13| 分类: 页面与JavaScript | 标签: |字号大中小 订阅 //关闭当前页面,并且打开新页面,(不 ...
- OAF在打开的新页面中添加按钮,功能是关闭当前页面
OAF在打开的新页面中添加按钮,功能是关闭当前页面 javascript:close()
- FineUI中在一个页面中通过控件事件(JS)向父页面中添加Tab页
1.在前台页面尾部添加js代码 </form> <script type="text/javascript"> var basePath ...
- js 打开新页面 window.open()
利用js打开一个新页面,而不是一个新窗口. 在网上各种东西啊,蛋疼了半天,还白疼了.. 后来看到a标签有target属性,然后又发现window.open()的第二个参数是target,然后我笑了(e ...
- 页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置
当div中绑定数据,给它一个属性overflow-y: scroll,添加长度大小,使其能够出现滚动条:每次刷新的时候滚动条总是会出现在最上方,这使我很头疼,经过查阅网上资料,返现两种方法可行.如下: ...
- 前端视频直播技术总结及video.js在h5页面中的应用
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/12557070.html,多谢,=.=~ (如果对你有帮助的话请帮我点个赞啦) 目前有一个需求是在 ...
随机推荐
- logback配置
好吧,项目中一直使用的是logback做日志记录. 开始跑Demo的时候,一直会报Failed to load class org.slf4j.impl.StaticLogger的错误.后来googl ...
- js之动态加载等待图像地址汇总
Ajax火啊,火到了居然Loading Icons都有很多人专门提供的地步.下面是我同事给我介绍的一些提供Ajax Activity Indicators的网站,共享给大家,以便让我们的Ajax应用具 ...
- springmvc的jdbcTemplate 插入 返回主键
public int insertCustomer(final Customer customer) { //TODO. final String sql = " ...
- mongodb 查询时没有索引报错(too much data for sort() with no index)
报错信息: .... too much data for sort() with no index.... 给对应排序字段加索引就OK 了... 在对应"表"名上,右键--> ...
- 计时器chronometer补充
项目中要实现关于安卓控件chronometer这部分的功能需求: 1.计时器的功能对用户答题时间进行时间统计,用户答完该题,进入下一题,计时器接续上一题的结束时间继续计时: 2.用户可以跳出答题界面, ...
- Python3基础 pop() 删除 键为指定值的项
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- 6.UDP协议
1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. UDP数据报结构: UDP首部格式: ...
- MySQL动态添删改列字段
动态增加列字段: ); 动态删除列字段: alter table TableName drop column field_id; 动态修改列字段: alter table TableName chan ...
- Eclipse tomcat插件
1. 下载 http://www.eclipsetotale.com/tomcatPlugin.html 2. 解压 解压到Eclipse_Home/dropins 3. 重启Eclipse
- 支持wmv、mpg、mov、avi格式的网页视频播放代码
这2天一直在整金网奖的相关项目,比较头大的就是网页视频播放了,需要考虑各种不同格式的视频,然后找相应的视频播放器. 这次使用了2种方法对这些视频进行处理: 1.使用ckplayer网页视频播放器 ck ...