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>
<ahref="01.html">去下一页</a>
<scriptsrc="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的一样。

最后附上本案例代码的下载包:在新页面中返回到上一页浏览的历史位置

http://www.cnblogs.com/tnnyang/p/6377505.html

 

时间: 2024-11-03 03:00:20

js在新页面中返回到上一页浏览的历史位置的相关文章

js 打开新页面在屏幕中间的实现方法_javascript技巧

<a href="javascript:void(0)" onclick="window.open('http://www.jb51.net', 'newwindow', 'height=500, width=900, top='+Math.round((window.screen.height)/2<span style="font-family: Arial, Helvetica, sans-serif;">-250</span

使用HTML5的JS选择器操作页面中的元素

使用HTML5的JS选择器操作页面中的元素. 文件命名为:querySelector.html,可在Chrome浏览器中预览效果. <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>使用HTML5的JS选择器操作页面中的元素</title> </head> <body>

JS正则表达式替换页面中内容

问题描述 JS正则表达式替换页面中内容 我想用正则表达式替换table中除了标签""<tr class=""template"" ng-repeat=""model in model.child""></td>""里面的ng-model中的内容,将ng-model=""model.*""替换成ng-model="&

求一js正则表达式把页面中的p标签全部换成div

问题描述 求一js正则表达式把页面中的p标签全部换成div 解决方案 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> &

在IE地址栏中输入网址后,在新页面中打开

今天我们向大家分享一个浏览器快捷键,这个方法不仅仅适用于IE浏览器,同时适用于其他浏览器. 默认情况下,我们在当前标签页的地址栏的中输入网址后,按下回车键Enter,网站便会在当前的页面打开,如果想输入网址后直接新的页面中打开该如何操作呢?这时我们可能会选择复制网址,然后新建一个标签页,在粘贴网址打开,因为你若在输入网址以后在新建标签页,网址栏则变为空白.这个听起来好像是个挺复杂的操作. 现在您只需要一个简单的快捷键组合--Alt+Enter(回车键),便可轻松实现上面操作.在地址栏中输入想要浏

js实现刷新页面后回到记录时滚动条的位置【两种方案可选】_javascript技巧

当div中绑定数据,给它一个属性overflow-y: scroll,添加长度大小,使其能够出现滚动条:每次刷新的时候滚动条总是会出现在最上方,这使我很头疼,经过查阅网上资料,返现两种方法可行.如下: 第一种方案 将上一个页面的div的scrolltop距离长度记录在cookie中,然后通过js调整刷新页面时的长度记录,代码如下: js代码: <script> var _h = 0; function SetH(o) { _h = o.scrollTop SetCookie("a&q

js点击页面中任意位置弹出新页面

弹出原是非常的简单 判断cookie是否过期,如果过期则重新设置cookie,并且定义弹出页面的url地址,最后调用弹窗.在弹出页面url中 popjs代码如下  代码如下 复制代码 function objpop(){  var obj=new Object;  var ua=navigator.userAgent;  var browser={   ie:/msie/i.test(ua),   ie6:/msie 6/i.test(ua),   ie7:/msie 7/i.test(ua),

java-页面有个&amp;amp;lt;a&amp;amp;gt;标签,我想通过a标签的href链接到新页面,然后调用新页面的fun()方法

问题描述 页面有个<a>标签,我想通过a标签的href链接到新页面,然后调用新页面的fun()方法 标签的内容是后台配置的,后台配置一个新的url 和新页面要调用的fun()方法,所以不能在新页面做什么处理,有什么方法可以先执行href后执行onClick()方法吗. 解决方案 js应该没法控制吧..你可以吧onclick方法 放在body的onload中...但这也是在新页面中写的.

JavaScript实现按Ctrl键打开新页面_javascript技巧

(译者注: 本文解决的是按 Ctrl键时使用JS打开新页面的问题) 在简化的HTML5规范中,允许在 A 标签内包含多个 DIV 和/或其他块级元素. 现在只要用 <a> 标签包住块元素,就能搞定原来需要用JavaScript来监听并调用 window.location 实现页面跳转(redirect)功能. 但使用<a>标签的这种包装形式也有不好使的情况 -- 例如,某个块元素(block)内还有一些 <a> 标签, 这种情况下我们只想在点击parent中<a&