Javascript Jquery-制作cookie后隐藏元素

Javascript Jquery-制作cookie后隐藏元素,javascript,jquery,html,css,cookies,Javascript,Jquery,Html,Css,Cookies,我有一个隐藏的元素出现在用户滚动条上。当单击文本“Click to close”(位于元素内部)时,元素隐藏并设置cookie,这会阻止刷新时的可见性。我的问题:在设置cookie而不刷新时,元素是否可能保持隐藏状态?当前,当单击其中的文本时,元素隐藏,但在滚动时再次显示 我的当前设置: 谢谢。最直接的方法是注意到该项已隐藏: $(".set-cookies").on("click", function () { $("#test").hide(); $("#test").dat

我有一个隐藏的元素出现在用户滚动条上。当单击文本“Click to close”(位于元素内部)时,元素隐藏并设置cookie,这会阻止刷新时的可见性。我的问题:在设置
cookie
而不刷新时,元素是否可能保持隐藏状态?当前,当单击其中的文本时,元素隐藏,但在滚动时再次显示

我的当前设置:


谢谢。

最直接的方法是注意到该项已隐藏:

$(".set-cookies").on("click", function () {
    $("#test").hide();
    $("#test").data('hidden', true);
});
在滚动时,请注意:

$(document).scroll(function() {
    var y = $(this).scrollTop();
    if ((y > 300) && ! $('#test').data('hidden')) {
        $("#test").show();
    }
});

.

如果只想通过测试cookie来完成此操作,则应将cookie检查条件移动到滚动事件处理程序中。现在,如果cookie不存在,您将在页面加载时绑定scroll事件,但一旦设置了它,您就不会解除scroll事件的绑定。看

$(文档)。滚动(函数(){
if(document.cookie.indexOf(“testCookie”)<0){
var y=$(this.scrollTop();
如果(y>300){
$(“#测试”).show();
}
}
});

以下是我解决问题的方法,通过解除滚动侦听器的绑定,这将提高性能

function setCookie() {
    days = 15;
    CookieDate = new Date();
    if (days > 0) {
        CookieDate.setTime(CookieDate.getTime() + (days * 24 * 60 * 60 * 1000));
        document.cookie = "testCookie=true; expires=" + CookieDate.toGMTString();
    }
    if (days === 0) {
        document.cookie = "testCookie=true;";
    }
}

function hasCookie() {
    return document.cookie.indexOf("testCookie") > 0;
}

function scrollListener() {
    var y = $(this).scrollTop();
    if (y > 300) {
        $("#test").show();
    }   
}

$(".set-cookies").on("click", function () {
    setCookie();
    $("#test").hide();

    // remove scroll listener
    $(document).off("scroll", scrollListener);
});


// initial check on startup
if (hasCookie()) {
    // cookie set, hide message
    $("#test").hide();
} else {
    // cookie missing, register scroll listener
    $(document).scroll(scrollListener);
}

jshiddle:

谢谢Josh,马上就来。我还将top distance与cookie测试相结合,效果很好。谢谢Paul,希望我能给出多个被接受的答案——投票通过。
function setCookie() {
    days = 15;
    CookieDate = new Date();
    if (days > 0) {
        CookieDate.setTime(CookieDate.getTime() + (days * 24 * 60 * 60 * 1000));
        document.cookie = "testCookie=true; expires=" + CookieDate.toGMTString();
    }
    if (days === 0) {
        document.cookie = "testCookie=true;";
    }
}

function hasCookie() {
    return document.cookie.indexOf("testCookie") > 0;
}

function scrollListener() {
    var y = $(this).scrollTop();
    if (y > 300) {
        $("#test").show();
    }   
}

$(".set-cookies").on("click", function () {
    setCookie();
    $("#test").hide();

    // remove scroll listener
    $(document).off("scroll", scrollListener);
});


// initial check on startup
if (hasCookie()) {
    // cookie set, hide message
    $("#test").hide();
} else {
    // cookie missing, register scroll listener
    $(document).scroll(scrollListener);
}