【问题标题】:Show a loading div once per visit, thereafter, a different loading div每次访问显示一次加载 div,然后显示不同的加载 div
【发布时间】:2016-11-12 07:21:13
【问题描述】:

对于 Javascript 和一般的 Web 开发来说相当新,只是在我在网站上的加载/转换 DIV 方面寻求一些帮助。

我使用下面的 jquery 在主页上显示一个介绍,并在其他页面上显示相同的脚本(具有更短的淡出和不同的 div)来模仿一种过渡。在主页上,我想在每个会话或设置期间只显示一次介绍 div,但是我不想在两者之间显示任何内容,而是想将它交换为我在其他页面上使用的另一个“过渡”div。

我研究了使用 cookie 和会话存储,但没有任何运气专门为此工作。任何帮助都会很棒,谢谢!

$(window).load(function () {
    setTimeout(function(){
        $('#splash').fadeOut('slow', function () {
        });
    },1200); 
});

更新

在使用了@brad 的建议后,这就是我最终使用的方法,并且非常适合我想要实现的目标。

HTML

<div id="preloader">

     <div id="splash1">
     </div>

    <div id="splash2">
     </div>

</div>

CSS

#splashback {
display: none;
}

#splashback2 {
display: none;
}

JQUERY

$(document).ready(function(){

if (sessionStorage.getItem('splash') !== 'true') {
         $( "#splash1" ).show();
         setTimeout(function(){
        $('#preloader').fadeOut('slow', function () {
        });
    },2500); 
    sessionStorage.setItem('splash','true');
}
else {
            setTimeout(function(){
                $( "#splash2" ).show();
        $('#preloader').fadeOut('slow', function () {
        });
    },500); 
}    

});

【问题讨论】:

  • Java 与 JavaScript 无关。俗话说,Java 之于 JavaScript,就像 Car 之于 Carpet。而且,您应该向我们展示您的尝试,以便我们为您提供帮助。

标签: jquery session session-cookies splash-screen


【解决方案1】:

LocalStorage 是您需要使用的仅客户端变量的合适位置。也是very well supported

要在本地存储中设置变量,只需像这样设置:

localStorage.yourVariable = "some value";

请注意,所有本地存储变量都是字符串。如果您输入一些非字符串值,它将被转换为字符串。因此,使用本地存储读取/写入 JSON 非常常见。

localStorage.config = JSON.serialize({
  exampleSetting1: true,
  exampleSetting2: false
});

那么当你想取回数据时……

console.log(JSON.parse(localStorage.config));

幸运的是,在您的情况下,输入或任何内容都无关紧要。您只需要将变量设置为某个值。

localStorage.shownSplashScreen = true;

然后,测试您是否显示了初始屏幕:

!!localStorage.shownSplashScreen;  // true if shown, false if not

同样,localStorage.shownSplashScreen 中的值是一个值为true 的字符串,而不是布尔值。通过使用!!,我们有效地转换为布尔值,并检测该变量是否具有真值(字符串“true”是)。

我提到所有这些是为了让您可以查看其中的一些内容,如果您不熟悉的话。最终解决方案非常简单。未经测试,但试试这个:

$(window).load(function () {
    setTimeout(function () {
        $('#splash').fadeOut('slow');    
    }, (!!localStorage.shownSplashScreen) ? 0 : 1200); 
    localStorage.shownSplashScreen = true;
});

我们在这里所做的只是从1200ms(如果我们没有显示它)和0ms(如果我们有)设置启动屏幕时间(一旦这个调用堆栈完成,它将执行隐藏它的函数) .

【讨论】:

  • 感谢您列出所有这些!我尝试了您的解决方案并且它有效,尽管在最初显示后,您仍然会在返回页面时获得大约 200 毫秒的 #splash 闪光。这实际上可以作为替代方案,但有兴趣看看我是否可以在提供“intro”div 后以某种方式将其设置为提供“transition”div。另外,使用会话存储可以解决这个问题吗?寻找可以重置每次访问或时间段的东西。再次感谢!
  • @Jord 是的,您的初始屏幕将存在于页面上,直到 JavaScript 可以将其删除。如果您不希望这样,那么您的启动画面一开始甚至都无法显示在页面上。也就是说,不要在已经看到它时用 JavaScript 隐藏它,而是在它没有被看到时用 JavaScript 显示它。虽然这种方式违背了拥有启动画面的目的,但你可以让它按照你想要的方式工作。就时间而言,不要将true 放入该变量中,而只需为其上次显示的时间添加一个时间戳即可。然后,您可以测试该时间戳是多久之前加载的。
  • 是的,我认为是这样,想知道它的位置是否有任何区别。我在脚本中将本地交换为会话,并且作为替代选项对我来说效果很好,因此感谢您的帮助!一旦显示了初始 div 而不是删除飞溅,使用另一个 div 是否足够容易?所以在显示#splash1 之后,使用#splash2 直到会话结束。
  • @Jord 在这一点上,我不确定您要做什么,但是是的,您可以随意显示/隐藏。
  • 很抱歉给您带来了困惑。我正在寻找是否可以显示某个启动画面 (#intro),并且一旦显示,在该页面的剩余会话中显示不同的启动画面 (#transition)?因此,您第一次会看到#intro,但每次返回该页面时都会看到#transition。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
相关资源
最近更新 更多