微信浏览器自带的返回上一页的停留位置 scrollTop

我们做过微信的应该都知道,微信自带的返回上一页,就是重新打开页面。并不是返回历史页面。我们PC端的浏览器是返回历史页面。点击返回页面之后 上一个页面的scrollTop还是之前没有进入新页面的位置。

我看了下京东的微信网站。果然和我想到的方法一样。利用sessionStorage HTML5本地存储 进行存储位置scrollTop以及加载了多少次ajax次数 微信返回上一页(当前页面)之后。就会onload一下。设置最后一次scrollTop的值。以及一次性通过ajax传递之前加载的次数size渲染页面。这样在微信里面就可以实现和PC一样的效果。

代码如下:

var c=0,
        matter=el(document,".matter",1);
        window.onload=function(){
            var a=b=null;
            if(window.sessionStorage){
                 a=parseInt(sessionStorage.getItem("top"));
                 b=parseInt(sessionStorage.getItem("size"));
                 //6是AJAX 每次请求多少个dd
                 num=6*b;
                 c=b?b:0;

                // ajax渲染
                for (var i = 0; i < num; i++){
                    var dd=document.createElement("dd")
                    dd.innerHTML="<a href='./source.html'><img src='images/1.jpg' alt='' /><div class='sug'><h2>魔力魔力魔力魔力魔力魔力魔力魔...</h2><p>收获佣金<b>¥106.00</b></p><p class='num'>点击量  125"+i+"</p></div></a>"
                    matter.querySelector("dl").appendChild(dd);
                };
                alert(a);
                document.body.scrollTop=a;
            }
        }
        window.onscroll=function(){
            var tops=document.body.scrollTop,
                height=document.documentElement.scrollHeight,

                scrollbottom=height-_height-tops;
                console.log("top:"+tops+"height:"+height+"scrollbottom:"+scrollbottom+"_height"+_height);
                if(window.sessionStorage){
                    sessionStorage.setItem("top",tops);
                    sessionStorage.setItem("size",c);
                }

            if(scrollbottom==0||scrollbottom==-1){
                $.ajax({
                    //type: 'GET',
                    //url: './',
                    //data: { size: 6 },
                    //dataType: 'json',
                    //timeout: 300,
                    beforeSend:function(){
                        $(".panle").removeClass("pon");
                    },
                    success: function(data){
                    $(".panle").addClass("pon");
                        for (var i = 0; i < 6; i++){
                            var dd=document.createElement("dd")
                            dd.innerHTML="<a href='./source.html'><img src='images/1.jpg' alt='' /><div class='sug'><h2>魔力魔力魔力魔力魔力魔力魔力魔...</h2><p>收获佣金<b>¥106.00</b></p><p class='num'>点击量  125"+i+"</p></div></a>"
                            matter.querySelector("dl").appendChild(dd);
                        };
                        //正常状态请求了多少AJAX
                        c++;
                    },
                    error: function(xhr, type){
                        alert('Ajax error!')
                    }
                })
            }
        }          

代码是我之前一个项目上的demo代码。重点就是 sessionStorage 对了 说道sessionStorage 我说一下为什么没用localStorage  localStorage是永久的。这样就会有一个问题,当前退出了这个网站之后 下次打开网站 进入这个页面。那么你最后一次离开的值依然存在在本地存储里面。用户体验就不好了。sessionStorage就不错,因为是临时性的。关闭了网站,下次进入的时候就是重新开始保存计算。

定义了一个全局变量c。还有a,b是获取sessionStorage里面的scrollTop 和ajax的值。onscroll的时候记录这两个值实时保存到sessionStorage里面。每次AJAX请求成功了,就c++一下。

c=b?b:0 这个意思就是 如果请求了ajax c的值就是等于b否则等于0.这样做因为c是全局变量,每次重新打开页面它都会等于0的.

知道了最后一次scrollTop和size  OK了 我们就直接AJAX一次行渲染出来结构。在设置scrollTop位置。最好是先渲染再设置。反过来scrollTop会出现BUG。因为页面结构没有这么多。位置停留会出现在最底部。并没有到最后一次的位置。加载之后 结构躲起来了,页面高度也有了。这样scrollTop就可以好好设置。

QQ 295989501 欢迎一起交流学习

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 10:32:46

微信浏览器自带的返回上一页的停留位置 scrollTop的相关文章

小程序,带参返回上一页几种方法

// 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会.见下方示例代码 // 此处是A页面 wx.navigateTo({ url: 'B?id=1' }) // 此处是B页面 wx.navigateTo({ url: 'C?id=1' }) // 在C页面内 navigateBack,将返回A页面 wx.navigateBack({ delta: 2 }) 参见: https://developers.weixin.qq.com/mi

微信缓存以及苹果手机无法返回上一页以及history不识别(前端网备份)

window.addEventListener('pageshow', function(e) {var da = history.length;console.log(history.length);//监听history返回的是数字getData();}); function getData(){ $.post("/myteam/getData.json?time="+new Date().getTime(),function(data){ // console.log(data)

移动端返回上一页,刚需!document.referrer 详解

返回上一页,在PC端我们可以使用:history.go(-1)或者history.back(),可以正常返回第一层.这样,我们不需要上一页的 url 具体是什么,只要使用 history 一般都没啥问题. 但是在移动端,如果想要返回上一页.比如从A页面跳到B页面,如果B页面想返回A页面,为了防止不会跳错,必须要有一个 <  按钮,给它加 history.go(-1) ,返回上一层. <a href="javascript:history.go(-1)" class=&quo

js实现返回上一页功能

大家在做 "返回上一页" 这个功能的时候 都是用history.go(-1);来实现的 但这段代码只是简单的使用浏览器的后退功能 从浏览器缓存中取出页面来显示 但我们绝大部分情况都需要上一页重新去服务器请求页面 而不是使用浏览器缓存 比如我们从 a查询页面   跳转到   b修改页面 做修改操作  当b修改完毕以后需要跳转回a显示修改后的数据   要做到这个效果必须让a重新去数据库取新的数据 history.go(-1);是告诉浏览器:后退到上一页(后退功能都是用缓存)而我们的需求是 

手机上万能返回上一页(wap2.0)代替history.go(-1)

最近在做wap2.0的手机wap,写返回上一页的时候,开始是用history.go(-1); 发现在手机上只有部分机器可以比如windows mobile 而在别的机器如nokia和ophone手机 上这些就不太好用了,经过左思右想终于想到了个山寨方法来解决这个流氓问题了... 不直接用手机的返回功能,而是通过读取 referrer 上得到上一页的链接来实现手机返回上一页功能 代码如下: Javascript CODE [javascript] view plaincopyprint? /*返回

js 返回上一页和刷新以及页面跳转

1. Javascript 返回上一页history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). 3. window.history.forward()返回下一页 4. window.history.go(返回第几页,也可以使用访问过的URL) 例: <a href="javascript:history.go(-1);">向上一页</a> response.Write("<script

点击返回上一页代码实例

点击返回上一页代码实例:在网页中,经常见到这么一个效果,点击一个按钮.文本或者图片可以返回上一步所浏览的网页,下面就给出代码实例,希望能够给需要的朋友带来帮助,代码实例如下:一.点击按钮返回上一页: <input type="button" onclick="javascript:history.back(-1);" value="返回上一页" /> 二.点击图片返回上一页: <img src="images/bt.j

js返回上一页的方法

返回上一页的方法一: <a href="javascript:history.go(-1)">返回</a>

使用angularjs、ionic框架如何实现返回上一页并刷新

普通的js返回并刷新这里就不多说了,百度就有很多方法. 下面说的是使用了angularjs.ionic开发的一个手机app中使用的一个返回上一页并刷新的方法. 场景:回复的页面是单独的,点击保存回复后会回到上一个页面,此时上一个页面会显示出你新回复的内容 回复页面的controller的相关代码: $scope.save = function () { Replies.giveAReply($scope.reply); //保存回复 $ionicHistory.goBack(); //返回上一页