返回上一页离开位置

本文介绍了一种在用户从详情页面返回时能够保持之前浏览状态的方法,包括页面滚动位置和分页状态。通过使用localStorage来存储和恢复这些状态,提高了用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

html代码

<a id="instrument_detail"class="item__btn-more" href="${ctx}instrument_detail?id=" + info.id + "">详情 →<a>

改动前代码

  <script>
    var info = "";
    $(function () {
        var flag = false;
        var visiblePages = 7;
        var condition = {};
        condition.pageNum = 1;
        condition.pageSize = 10;

        function getpage(condition) {
            $(".loading").removeClass("hidden");
            $.ajax({
                type: 'POST',
                url: "${ctx}/instrument_overview.json",
                data: JSON.stringify(condition),
                success: function (data) {
                    $(".loading").addClass("hidden");
                    if (data.object.pageCount != 0) {
                        if (flag) {
                            flag = false;
                            $('#pagination').remove();
                            $("#pagination-box").append(' <ul id="pagination" class="am-pagination tpl-pagination am-pagination-right"></ul>');
                        }

                        $('#pagination').twbsPagination({
                            totalPages: data.object.pageCount,
                            visiblePages: visiblePages,
                            startPage: 1,  //默认分页第一页开始
                            first: "首页",
                            prev: "上一页",
                            next: "下一页",
                            last: "尾页",
                            initiateStartPageClick: false,
                            onPageClick: function (event, page) {
                                flag = false;
                                condition.pageNum = page;
                                getpage(condition);
                            }
                        });
                        getInfo(data.object.list);
                        html_model(data.object.list);

                    }
                },
                contentType: "application/json;charset=utf-8",
                dataType: 'json'
            });

        }
        getpage(condition);
    })
</script>

改动后代码

<script>
    var info = "";
    $(function () {
    /////////////////////////////////////////////////////////////////
       $('#main').delegate("#instrument_detail", "click", function () {          //记录点击详情时所在scrollTop位置
            var scrollTop = 0;
            if (document.documentElement && document.documentElement.scrollTop) {
                scrollTop = document.documentElement.scrollTop;
            } else if (document.body) {
                scrollTop = document.body.scrollTop;
            }
            localStorage.setItem("ScrollTop", scrollTop);    //     localStorage这个缓存对象  
        })
        /////////////////////////////////////////////////////////////////

        var flag = false;
        var visiblePages = 7;
        var condition = {};
        condition.pageNum = 1;
        condition.pageSize = 10;

        function getpage(condition) {
            $(".loading").removeClass("hidden");
            $.ajax({
                type: 'POST',
                url: "${ctx}/instrument_overview.json",
                data: JSON.stringify(condition),
                success: function (data) {
                    /////////////////////////////////////////////////////////////
                    localStorage.setItem("pageNum", condition.pageNum);      //记录访问页面时 当前所在页码
                    if (localStorage.getItem("pageNum") != null) {
                        if (localStorage.getItem("ScrollTop") != null) {
                            $("html,body").animate({scrollTop: localStorage.getItem("ScrollTop")});   //ajax success 成功时 把页面调整到记录的scrollTop位置
                            localStorage.setItem("ScrollTop", null);    //清空scrollTop避免刷新还是这个位置
                        }
                    }
/////////////////////////////////////////////////////////////////
                    $(".loading").addClass("hidden");
                    if (data.object.pageCount != 0) {
                        if (flag) {
                            flag = false;
                            $('#pagination').remove();
                            $("#pagination-box").append(' <ul id="pagination" class="am-pagination tpl-pagination am-pagination-right"></ul>');    //分页上下页按钮
                        }
                        var startNum = 1;
/////////////////////////////////////////////////////////////////
                      if (localStorage.getItem("pageNum") != 1 && localStorage.getItem("pageNum") != null) {
                            startNum = parseInt(localStorage.getItem("pageNum"));    //把访问前的页码在返回成功后设置为当前页码
                        }
                        /////////////////////////////////////////////////////////////////
                        $('#pagination').twbsPagination({
                            totalPages: data.object.pageCount,
                            visiblePages: visiblePages,
/////////////////////////////////////////////////////////////////
                            startPage: startNum,
/////////////////////////////////////////////////////////////////
                            first: "首页",
                            prev: "上一页",
                            next: "下一页",
                            last: "尾页",
                            initiateStartPageClick: false,
                            onPageClick: function (event, page) {
                                localStorage.clear();
                                flag = false;
/////////////////////////////////////////////////////////////////
                                if (localStorage.getItem("pageNum") != null) {   //判断是页面载时的页码  如果是页面为详情返回操作,则把页面调整为访问前设置的页码
                                    condition.pageNum = localStorage.getItem("pageNum");
                                } else {
                                    condition.pageNum = page;                   }/////////////////////////////////////////////////////////////////
                                getpage(condition);
                            }
                        });
                        getInfo(data.object.list);
                        html_model(data.object.list);
                    }
                },
                contentType: "application/json;charset=utf-8",
                dataType: 'json'
            });
/////////////////////////////////////////////////////////////////        }
condition.pageNum = localStorage.getItem("pageNum");   ///记录访问前的页码
/////////////////////////////////////////////////////////////////
        getpage(condition);
    })
</script>

实现过程

1,页面加载时,点击详情,获取本页面的pageNum 和scrollTop 位置。
2,离开页面,跳转详情页面是,把读取的数据存入 localStorage 里面。
3,点击详情页面跳转后 ,再次点击返回 读取localStorage数据 把页面设置成读取的数据(pageNum赋值,设置scrollTop )
4,设置成功后,清空数据 避免页面刷新重复设置。

作者要说

其实做这个功能之前我自己都不知道怎么实现,各种百度,各种csdn ,都无济于事。现在回想起来,感觉也挺简单的,主要还是结合自己项目实际情况去解决,不可生搬硬套,理解思路就会好很多。新手一枚,以上是我自己心得,若有不对,请大家多多指正!

### 微信小程序返回一页功能的实现 在微信小程序开发中,`wx.navigateBack()` 是用于关闭当前页面并返回一页面的核心 API。以下是关于其实现方式以及注意事项的具体说明。 #### 使用 `wx.navigateBack()` 的基本语法 通过调用该 API 可以轻松实现返回操作。其参数对象中的 `delta` 属性表示返回的页面数,默认值为 1 表示只返回一层页面[^1]。 ```javascript wx.navigateBack({ delta: 1 // 返回上一级页面 }); ``` #### WXML 中的一键返回按钮 可以通过绑定事件的方式,在点击按钮时触发返回逻辑。以下是一个简单的例子: ```html <button bindtap="navigateBack">返回一页</button> ``` 对应的 JS 方法如下所示: ```javascript Page({ navigateBack() { wx.navigateBack(); console.log("已执行返回操作"); } }); ``` 另外,如果希望更简洁地实现相同效果,则可以直接利用 `<navigator>` 组件完成此需求而无需额外编写 JavaScript 代码: ```html <navigator open-type="navigateBack">返回一页</navigator> ``` #### 带参返回场景下的处理方案 当需要从目标页面携带某些数据回退至上一个页面时,可以按照下面的方法来设置和传递这些信息[^2]: 首先定义两个变量分别存储当前活动的所有页面实例列表及其前驱节点; 接着检查栈顶是否至少存在两个元素以便能够找到真正的前置界面; 最后把要共享的数据项附加到即将跳转的目的地中去并通过 setData 更新视图层显示内容后再正式离开现有画面位置。 具体步骤如下: - 获取所有打开过的页面堆栈数组 `getCurrentPages()`。 - 判断当前页面是否不是第一个进入的应用程序入口页。 - 将本页所需传输的信息写入上级页面的数据模型当中。 下面是完整的代码片段演示如何正确实施上述流程: ```javascript // 获得整个应用内的全部页面序列集合 var pages = getCurrentPages(); let currentPage, prevPage; if (pages.length >= 2){ currentPage = pages[pages.length -1]; prevPage = pages[pages.length -2]; if(prevPage){ let dataToPass = '来自下级页面的消息'; // 向前面那个页面注入新的状态或者属性值 prevPage.setData({messageFromChild:dataToPass}); // 执行物理层面的实际撤退动作 wx.navigateBack({delta :1 }); } } ``` 以上就是有关于微信小程序内运用 `wx.navigateBack()` 函数达成退回先前浏览记录的技术要点解析啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值