如何在通过域名输入时仅显示一次页面预加载器?

2024-03-21

所以,我在主页上有 jQuery 页面预加载器,如下所示:

<script type="text/javascript">
    $(window).load(function() {
        $("#preloader").delay(700).fadeOut("slow");
    })
<div id="preloader" class="preloader"></div>

这显示了 4 次:

  1. 当我通过域名进入网站时;
  2. 当我按F5刷新主页时;
  3. 当我单击徽标时(单击该徽标时我必须转到主页);
  4. 当我单击“主页”菜单项时。 但我只想在前两次展示它。 所以,我想到的第一个想法就是删除div当我通过 JS 单击徽标或菜单项时,类不会在整个页面上显示预加载器图像。并使用过这个:

document.getElementById("预加载器").className = '测试';

但后来...我意识到,通过单击菜单项再次加载主页,我创建了新的文档副本,因此我的预加载器再次拥有他的类并显示出来。因此,我决定使用 AJAX,而不是通过单击菜单项或徽标来重新加载整个页面。现在我用这个:

     <script type="text/javascript">
        $(document).ready(function(){
             $("#blog, #logo").click(function(){
                 $("#container").load("/blog");
                 document.getElementById("preloader").className = 'test';
             });
        });
    </script>

因此,当我单击徽标或菜单项时,我会在容器中加载名为“博客”的类别。我的侧边栏如下所示:

...        
<a href="javascript:;" id="logo"><i class="logo"></i></a>
...
<li class="m_blog"><a id="blog" href="javascript:;"><i class="icon"></i>Blog</a></li>
...

所以,它有效!仅当您通过域名打开站点时才会出现预加载器。但出现1个问题。当我打开“视频”类别时,我有这样的地址:mysite.com/video/

当我通过徽标或菜单返回主页时,我有相同的地址!因为内容加载无需重新加载整个页面,并且地址不会改变。我该如何修复它?请帮帮我!我只想显示我的预加载器一次:当我通过域名或按 F5 刷新主页时。我已经感到头晕了,因为我只会HTML和CSS,但今天开始学习AJAX和jQuery。在这件事上帮助我。


所以,我自己解决了问题。但是,无论如何,感谢@prabeen-giri 帮助我以正确的方式思考。 首先,我需要解释一下预加载器机制。看看CSS:

position: fixed;
display: block;
top: 0;    /* making preloader cover all screen */
right: 0;
left: 0;
bottom: 0;
background-repeat: no-repeat;
background-position:center; center;
background-size: auto auto;
background-image: url(../images/preload.png); /* your picture should be here */
background-color:#000; 
z-index:99; /* must be the highest number of all others to cover them all */

所以,你的预加载器只是一张图片或其他东西,它覆盖所有窗口,并在加载整个内容时平滑地消失(通过 jQuery)。

<div id="preloader" class="preloader"></div>

这是脚本:

<script type="text/javascript">  
     $(window).load(function() {
          $("#preloader").delay(700).fadeOut("slow");}); 
</script>

为了解决我的问题并在通过域名进入网站时仅显示一次预加载器,我们需要使用 cookie。有 2 个 cookie 辅助函数(来自怪异模式 http://www.quirksmode.org/js/cookies.html):

function createCookie(name,value,days) {
if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}

所以,我们需要输入自己的cookie来创建运行脚本的条件。最初我们创建的 cookie 等于null这个相等性将成为运行脚本的条件。之后我们设置 cookie 一些值以不再启动 jQuery。这是代码:

<script type="text/javascript">  
    $(window).load(function() {
        if (readCookie('referer') == null){
            $("#preloader").delay(700).fadeOut("slow");}
        createCookie('referer',1,0);
     }); 
</script>

但是刷新页面后如何去除我们的预载图片和背景呢?因为我们只是根据条件禁用了 jQuery fadeOut 过程。图片和黑色背景一直覆盖着我们的窗户,不会消失。

让我们创建新条件并将其放入

<script>
    if (readCookie('referer') == null) {
        document.write("<style>.preloader {background-image: url(../images/preload.png); background-color:#000; z-index:99;}</style>");
    }
</script>

通过这个,我们将图像、z-index 和背景设置为预加载器类。我们的cookie等于null仅当用户通过域名进入网站时OR已清除他的 cookie 并刷新页面(这似乎不太可能)。如果 cookie 等于1,正如我们上面设置的,我们的预加载器将显示,但没有图片和背景,并且我们的 jQuery fadeOut 也将不会运行! 所以,我的问题如我所愿解决了,预加载器只会出现一次。再次感谢@prabeen-giri!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在通过域名输入时仅显示一次页面预加载器? 的相关文章

随机推荐

  • Android Espresso:“未找到测试”、“进程崩溃”

    当使用 Espresso 测试我的 Android 应用程序时 我注意到运行配置为All in Module运行时找不到测试All in Package成功了 我创建了以下可重现的案例 使用向导使用 minSdk 8 和空 Activity
  • IntelliJ 自动替换双引号字符串

    I am using IntelliJ IDEA for Angular 6 Typescript development When new import is added automatically by IntelliJ it s al
  • 操作栏菜单项文本颜色

    如何更改菜单项标题的文本颜色 我尝试将其更改如下 但它仅更改操作栏标题文本的颜色 而不更改菜单项文本的颜色 尝试这样的事情
  • 指定的控制器无效(错误) - Zend Framework

    我总是收到这个错误 blub libraries Zend Controller Dispatcher Standard php 中出现异常 Zend Controller Dispatcher Exception 消息为 指定的控制器无效
  • 我什么时候应该重写 Equals 函数? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 总是覆盖等于 https stackoverflow com questions 1549553 java always override equals 我应该覆盖equals我创建的任何类
  • Python:Numpy 将数组的每一行与另一个数组的每一行相乘

    我知道对此存在一些疑问 这应该可以通过广播实现 但不知怎的 我真的不明白广播如何通过添加附加轴来工作 还有一个类似的问题 其中一个数组的每一列与另一个数组的每一列相乘 将每一列与每一列相乘 https stackoverflow com q
  • Flowtype - 如何编写类工厂的声明,例如骨干模型?

    广泛的谷歌搜索和阅读 Flow 文档和示例并没有显示 Javascript 中非常常见的模式的任何示例 具有返回类的函数 一个典型的例子是 Backbone var User Backbone Model extend getFullNam
  • 为什么 DOCUMENT_ROOT 与远程服务器上的 realpath('.') 不同

    with echo realpath br echo dirname FILE br echo realpath dirname FILE br echo SERVER PHP SELF br echo getcwd 我总是得到 servi
  • 如何检查 CLI 程序是否正在等待来自 stdin 的输入?

    如何检查我刚刚使用 CreateProcess 启动的 CLI 程序是否正在等待来自 Windows C API 的标准输入的输入 正如上面的一些评论所说 一旦程序已经开始等待 您就无法检查程序是否正在等待标准输入 您可以使用事件处理程序
  • 2 个文档在 MongoDB 中合并

    我需要从 MongoDB 中不同集合的两个文档中获取数据 其中有 1 个公共字段 对数据库没有更改 我是新手 请帮助我 a db users find username email protected cdn cgi l email pro
  • 使用 JQuery 从另一个网站获取 HTML:可能吗?合法的?

    我正在尝试从不在同一域中的网页获取 HTML 代码 html 文本被解析并总结了在 HTML 代码来源的页面上找到的食谱 食谱名称 主要成分 步骤数 然后 用户可以单击该链接并转到域外的该网页来查看菜谱 我知道同源策略 但这是否适用于从国内
  • 使用 Chrome 打开正文中包含 HTML 的 Outlook

    虽然我已经从 Stack 中找到了很多这方面的信息 特别是here https stackoverflow com questions 5620324 mailto with html body 我只是想绝对确定在 Chrome 中无法执行
  • 嵌套哈希中的 Form_tag 参数

    我有一个没有与之关联的模型的表单 所以我正在使用form tag而不是form for 正如预期的那样 当用户提交表单时 每个字段都包含在 params 哈希中 但表单会发生很大变化 我希望在 params 哈希中包含一个哈希 该哈希将保存
  • .Net 3.5 中 Dynamic 关键字的使用

    我使用 net v4 5 在 Visual Studio 2013 中编写了这段代码 我遇到的问题是 我现在必须降级到 net v3 5 而动态关键字会抛出错误 因为缺少程序集引用 net v3 5 中是否有与 动态 等效的类型 或者有什么
  • Python Curses 不清除屏幕

    我想在Python下使用Curses而不清除屏幕 原因是我希望我的应用程序在现有屏幕上弹出一个简单的小菜单并很快退出 退出时将弹出菜单中丑陋的部分保留在屏幕上是可以接受的 但不是首选 我们的想法是将其用于快速实用的系统管理应用程序和脚本 其
  • 我的拉取请求已合并,下一步该做什么?

    我最近参与了 GitHub 的一个项目 我做了以下事情 分叉原始存储库 将其克隆到我的本地计算机 创建一个分支来修复现有错误 修复该分支中的错误 将该分支推送到我的存储库 向存储库的作者发送拉取请求以合并我的fix分支到其主分支 这是我第一
  • 如何在C++中输出变量的二进制值

    我的 C 编程课上有一项作业 要求编写一个输出变量值的二进制值的函数 例如 如果我将 a 的值设置为字符 我应该得到 a 输出的二进制值 我的 C 教授并不是全世界最伟大的 而且我在使用他给我们的神秘示例来使我的代码正常工作时遇到了困难 现
  • 在 LINQ 中学习表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您可以推荐哪些有关 LINQ 表达式树的文章 教程 Link https learn microsof
  • 在执行另一个方法时(动态)更新标签文本

    我是一名 iOS 开发人员 目前正在开发 iPhone 应用程序 我有一个关于更新 ViewController 内容的简单问题 如果我能得到了解此问题的人的反馈或有建议的解决方案 我将不胜感激 我正在编写一种方法 不断更新标签的文本 以及
  • 如何在通过域名输入时仅显示一次页面预加载器?

    所以 我在主页上有 jQuery 页面预加载器 如下所示