是否可以延迟用户访问的第一页上的元素加载?

时间:2015-11-09 16:28:19

标签: javascript jquery delay settimeout

我的客户希望在他们的网站中实施实时聊天系统。我可以很好地实现它 - 它通过脚本标记调用。

他们还希望它在加载之前有一点延迟。我正在考虑使用setTimeout来延迟加载,但事实证明他们只希望在第一次访问该站点时发生这种情况。

有没有办法使用setTimeout一次,然后在该会话的后续加载时跳过超时?

2 个答案:

答案 0 :(得分:2)

使用Cookie:
在您的脚本中创建一个名为visited的cookie,并将其设置为“yes”:

document.cookie="visited=yes";

然后检查是否存在名为“visited”的cookie:

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');     //creates an array of all cookies for the page
    for (var i=0; i<ca.length; i++) {        //loops through each variable
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) == 0)            //if there is a match, i.e. this cookie is called 'visited'
            return c.substring(name.length,c.length); //return, with the value of 'visited'
    }
    return "";
}

if (getCookie("visited") == "yes") {
    //user has previously visited site; don't delay
}

如果您正在寻找更轻量级的解决方案,请尝试以下方法:

function cookieExists(cname) {
    var cookies = document.cookie.split(';');
    for (var i = 0; i < cookies.length; i++) {
            if (cookies[i].split('=')[0] == cname) return true;
            else break;
    }
    return false;
}

if(cookieExists("visited")) {
    //user has visited site before
}

检查是否存在名为“已访问”的cookie

如果您希望它超级精简并且不关心可读性或可维护性,请尝试以下方法:

function cookieExists(n){var c = document.cookie.split(';');for (var i=0;i<c.length;i++){if (c[i].split('=')[0]==n) return true; else break;}return false;}

答案 1 :(得分:0)

这是你可以通过localStorage

来实现的
localStorage.setItem('visited', true);

if(localStorage.getItem('visited')){
    // your delayed function here 
}

唯一支持localStorage不会覆盖旧浏览器。请参阅:http://caniuse.com/#feat=namevalue-storage

此外,似乎没有人知道localStorage的设置时间。如果您需要每次访问该站点的唯一访问功能,您可以使用sessionStorage(因此,如果同一客户端在另一次访问时打开该站点,则延迟功能应再次触发它们)。

我在这里制作了一个非常粗略的jsfiddle(使用jquery): http://jsfiddle.net/lharby/mhf9ysqu/