【问题标题】:Save and retreive users layout preference from on click function using localstorage使用 localstorage 从 onclick 功能保存和检索用户布局首选项
【发布时间】:2023-03-13 21:35:01
【问题描述】:

我是使用 localstorage 的新手,但我相信这是我需要使用它来存储我的 css 文件中的特定 ID 或 CLASS 以在用户做出选择(点击事件时)显示后在用户浏览器中显示“网格/列表”布局。这里首选本地存储吗?或者使用“sessionstorage”会更好吗?还是完全使用完全不同的方法会更好?如果有,是什么?

我想要实现的是: 用户点击 2 个图标中的 1 个 - 这些图标需要存储我制作的 css 布局 ID 或 CLASS(“舒适”或“列表”视图)。当用户浏览网站的其他页面时,会记住此首选项,因此如果用户返回此页面,布局仍然与他/她选择的相同。如果用户关闭浏览器然后将其重新打开到该页面,同样适用。

添加时间缓存也是首选。例如,将布局在用户本地存储中保留“x”天,然后才被清除。

任何帮助将不胜感激,因为我什至不知道如何开始。我查看了大量示例,但似乎无法理解他们是如何做到的,更糟糕​​的是,我看到的示例似乎无法满足我的需求。

这是我目前所拥有的:

JS

// Changing layout 'Cozy' to 'List'
$('.news_nav-options_list').on('click', function () {
    var cozy=document.getElementById('hideClass');
    cozy.style.display="none";

    var list=document.getElementById('showClass');
    list.style.display="block";

    $(this).addClass('active');
    $('.news_nav-options_cozy').removeClass('active');
});

// Changing layout 'List' to 'Cozy'
$('.news_nav-options_cozy').on('click', function () {
    var list=document.getElementById('hideClass');
    list.style.display="block";

    var cozy=document.getElementById('showClass');
    cozy.style.display="none";

    $(this).addClass('active');
    $('.news_nav-options_list').removeClass('active');
});

这是我目前所拥有的演示:

DEMO

我阅读时首选使用带有 localstorage 的“.setItem() 和 .getItem”,但同样,我什至不知道应该如何开始。可以将 localstorage 应用到我目前的 js 中吗?

【问题讨论】:

    标签: javascript jquery html css local-storage


    【解决方案1】:

    这并不完全正确,但我认为它应该为您指明您正在寻找的方向。

    $(document).ready(function(){
        // Changing layout 'Cozy' to 'List'
        $('.news_nav-options_list').on('click', function () {
            changeToListView();
        });
    
        // Changing layout 'List' to 'Cozy'
        $('.news_nav-options_cozy').on('click', function () {
            changeToCozyView();
        });
    
        if (typeof(Storage) !== "undefined") {
            var view = localStorage.getItem("view");
            if (view && view == "cozy") {
                changeToCozyView();
            } else if (view && view == "list") {
                changeToListView();
            } else {
                // view isn't set, or is set to something we don't recognize
            }
        } else {
            // user's browser doesn't support localStorage
        }        
    });
    
    function changeToListView() {
        var cozy=document.getElementById('hideClass');
        cozy.style.display="none";
    
        var list=document.getElementById('showClass');
        list.style.display="block";
    
        storagePut("list");
    
        $(this).addClass('active');
        $('.news_nav-options_cozy').removeClass('active');
    }
    
    function changeToCozyView() {
        var list=document.getElementById('hideClass');
        list.style.display="block";
    
        var cozy=document.getElementById('showClass');
        cozy.style.display="none";
    
        storagePut("cozy");
    
        $(this).addClass('active');
        $('.news_nav-options_list').removeClass('active');
    }
    
    function storagePut(view) {
        if (typeof(Storage) !== "undefined") {
            localStorage.setItem("view", view);
        } else {
            // user's browser doesn't support localStorage
        }        
    }
    

    【讨论】:

    • 您可以添加 cmets 以了解其中一些内容的含义吗?就像我在原始帖子中所说的那样,我对使用本地存储完全陌生。你的意思是它不完全正确?经过测试,它似乎工作正常 - 我确实必须在“changeToListView”和“changeToCozyView”函数上更改$(this).addClass('active');,以便显示“活动”类,但除此之外,其他一切似乎都正常。您是否偶然知道在哪里插入此本地存储在用户浏览器中停留多长时间的时间限制?例如:存储“x”天的信息?
    • @michael 这篇文章并不想完全为您解决问题,而是为您指明大方向。回答您关于“本地存储将保留多长时间”的问题 - 它将无限期地保留,直到您明确清除本地存储。见localstorage vs sessionstorage
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2023-01-18
    • 2020-07-08
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多