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,多谢,=.=~ (如果对你有帮助的话请帮我点个赞啦) 目前有一个需求是在 ...
随机推荐
- spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- iOS AFN向接口端传递JSON数据
NSDictionary *body = @{@"snippet": @{@"topLevelComment":@{@"snippet":@ ...
- Linux中后台执行任务
执行时, 可以在命令最后添加 & 使其后台执行, 但是其输出依然会显示, 而且其运行是和当前shell绑定的 如果脚本已经运行, 可以使用Ctrl-Z暂停, 然后使用 bg 让其转入后台, ...
- STM32的USART DMA传输(转)
源:STM32的USART DMA传输 问题描述: 我有一个需求,AD采得一定数目的数据之后,由串口DMA发出,由于AD使用双缓冲,所以每次开始DMA的时候都需要重新设置开始的内存地址以及传输的数目( ...
- APP导致界面卡死,iPhone卡死
实测,是 Reachability 类创建实例过多导致 http://stackoverflow.com/questions/34063166/ios-9-app-freeze-with-consol ...
- uses crt;
1.uses CRT,表示引用CRT.pas单元.CRT.pas单元是Pascal最重要的单元之一,主要用于字符界面的操作,里面内置了清屏.光标定位.删除行.调整字符亮度.前景色.背景色等功能函数.2 ...
- FATFS外置UNICODE GBK双向转换码表(转)
源:FATFS外置UNICODE GBK双向转换码表 将UtoG,GtoU双向码表放到存储卡里面实现长文件名,因为FATFS长文件名需要unicode支持, 首先将UtoG.sys,GtoU.sys两 ...
- BZOJ 2705 [SDOI2012]Longge的问题 ——Dirichlet积
[题目分析] 狄利克雷卷积. 然后直接求出欧拉函数,计算和即可. [代码] #include <cstdio> #include <cstring> #include < ...
- box2d中的物理世界
box2d中的物理世界,即b2World类就是一个包含了各种物体(body,物理体,或者叫刚体),固定附着物(fixture,形状与物理体的绑定物)以及各种约束体(比如关节),并使其在当中完成各种交互 ...
- html&&css 基础知识笔记
diV有 Class.Style.title.ID 等属性. 1.margin 空出边缘 margin:上 下 左 右(按顺时针顺序,缺少某一方向则对称) 2.border 边框(三要素:像素 形状 ...