js localstorage 定时器

项目当中创建了很多超链接url指向的都是同一个查询的界面
但是每个超链接的onclick事件都写死了不同的参数
现在效果是 在点击超链接时 打开新页面 执行onclick事件 使用localstorage存储当前页面的参数 跳转到查询界面时进行读取
并且加上了定时器的运用 失效时间设置为2秒 失效后删除localstorage
需求是:怎么保证我从多个路口打开这个查询界面 保障localstorage在网页只能储存一个的情况下 执行不同参数对查询页面的重载

本人现在把定时器过期时间设置为2秒 确实可以实现这种效果 但是时效性不能保障,如果页面打开过慢或者 打开过快localstorage就会时效

如果您希望在多个路口打开查询界面时,保障 localStorage 在网页中只存储一个参数,并且能够执行不同参数对查询页面的重载,您可以考虑以下方案:

使用唯一的键名:在存储数据到 localStorage 时,使用一个唯一的键名,例如基于当前时间戳生成的键名,这样可以确保每次存储时使用不同的键名,避免覆盖之前的数据。例如:

javascript
Copy code
// 存储数据到 localStorage
const key = 'queryData_' + Date.now(); // 生成唯一键名
const queryData = { /* 根据超链接的参数生成数据 */ };
localStorage.setItem(key, JSON.stringify(queryData));
使用定时器清除 localStorage:在查询界面加载完毕后,可以设置一个定时器,在一定的时间间隔后清除 localStorage 中的数据,以避免数据过期。例如:
javascript
Copy code
// 查询界面加载完毕后,设置定时器清除 localStorage
window.onload = function() {
  setTimeout(function() {
    const key = /* 使用之前存储时的键名 */;
    localStorage.removeItem(key); // 清除 localStorage 中的数据
  }, 2000); // 设置定时器的延迟时间为 2 秒
}

保障页面打开的顺序:为了保障不同参数的查询页面能够正确地重载,您可以在页面加载时,先读取 localStorage 中的数据,并根据其中的参数进行初始化。例如:

javascript
Copy code
// 页面加载时,读取 localStorage 中的数据
window.onload = function() {
  const key = /* 使用之前存储时的键名 */;
  const queryData = JSON.parse(localStorage.getItem(key));
  if (queryData) {
    // 根据 localStorage 中的参数进行初始化
    // ...
    // 清除 localStorage 中的数据
    localStorage.removeItem(key);
  }
}

通过以上方案,您可以在多个路口打开查询界面时,保障 localStorage 中只存储一个参数,并且能够执行不同参数对查询页面的重载。定时器设置的时间间隔可以根据您的需求进行调整,以确保页面加载速度和定时器的有效性。

可以使用sessionStorage来代替localStorage来储存参数,每个浏览器会话都有一个独立的sessionStorage,在浏览器关闭后就会自动清除。在页面加载或者点击链接时向sessionStorage中写入参数,读取参数时,从sessionStorage中获取当前页面需要的参数。

  • 这篇博客: js之列表页进入详情页后返回列表页滚动条回到原来位置中的 列表页进入详情页后返回列表页滚动条回到原来位置,这个问题我是用的localStorage,直接张贴我的代码。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 思路:使用localStorage记录容器滚动条距离容器顶部的距离。容器可以是window,可以是html,可以是body,但是当你把html和body的滚动条,overflow: hidden;隐藏了以后,你是用的自己的div里面设计的滚动条,那么就将该div作为对象就好。

    var tur=true;
    $(function(){
        //滚动时保存滚动位置
        $(".manager_con").scroll(function(){
            if(tur){
                setTimeout(scro,500);
                tur=false;
            }
        });
        var offset = localStorage.getItem("offsetTop");
        $(".manager_con").scrollTop(offset);
    });
    function scro() {
        if($(".manager_con").scrollTop()!=0){
            localStorage.setItem("offsetTop", $(".manager_con").scrollTop());
        }
        tur=true;
    }
    
    

    上面的代码,直接写在列表页就好,可放入一个公共的js中,然后在列表页直接引入就好。
    上述代码里,那个.manager_con,我是在这个div里面设置的滚动条,我将html和body的滚动条隐藏了,可自行改变,只要将放滚动条的对象放里面就好。