当前位置: 首页 > 面试题库 >

页面加载时的JavaScript加载屏幕

宣熙云
2023-03-14
问题内容

这有点难以解释,所以我会尽力而为

因此,在加载HTML页面时,我希望有一个很酷的加载屏幕在显示。完成加载后,我希望清除加载屏幕并显示HTML文档。

基本上,我想要这样:

CSS:

/* Absolute Center CSS Spinner */
.loading {
  position: fixed;
  z-index: 999;
  height: 2em;
  width: 2em;
  overflow: show;
  margin: auto;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}

/* Transparent Overlay */
.loading:before {
  content: '';
  display: block;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0,0,0,0.3);
}

/* :not(:required) hides these rules from IE9 and below */
.loading:not(:required) {
  /* hide "loading..." text */
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}

.loading:not(:required):after {
  content: '';
  display: block;
  font-size: 10px;
  width: 1em;
  height: 1em;
  margin-top: -0.5em;
  -webkit-animation: spinner 1500ms infinite linear;
  -moz-animation: spinner 1500ms infinite linear;
  -ms-animation: spinner 1500ms infinite linear;
  -o-animation: spinner 1500ms infinite linear;
  animation: spinner 1500ms infinite linear;
  border-radius: 0.5em;
  -webkit-box-shadow: rgba(0, 0, 0, 0.75) 1.5em 0 0 0, rgba(0, 0, 0, 0.75) 1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) 0 1.5em 0 0, rgba(0, 0, 0, 0.75) -1.1em 1.1em 0 0, rgba(0, 0, 0, 0.5) -1.5em 0 0 0, rgba(0, 0, 0, 0.5) -1.1em -1.1em 0 0, rgba(0, 0, 0, 0.75) 0 -1.5em 0 0, rgba(0, 0, 0, 0.75) 1.1em -1.1em 0 0;
  box-shadow: rgba(0, 0, 0, 0.75) 1.5em 0 0 0, rgba(0, 0, 0, 0.75) 1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) 0 1.5em 0 0, rgba(0, 0, 0, 0.75) -1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) -1.5em 0 0 0, rgba(0, 0, 0, 0.75) -1.1em -1.1em 0 0, rgba(0, 0, 0, 0.75) 0 -1.5em 0 0, rgba(0, 0, 0, 0.75) 1.1em -1.1em 0 0;
}

/* Animation */

@-webkit-keyframes spinner {
  0% {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}
@-moz-keyframes spinner {
  0% {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}
@-o-keyframes spinner {
  0% {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}
@keyframes spinner {
  0% {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

HTML:

<div class="loading">Loading&#8230;</div>

页面加载时发生的情况。当页面加载时,将被清除,并显示HTML文档的其余部分。(我正在建立一个学分系统,虽然学分加载时我真的很需要它来说它正在加载,但是人们抱怨他们无法单击任何东西,我不得不告诉他们这一切都在加载中)

由于我想学习Javascript,所以我想尽可能地远离Ajax。


问题答案:

您可以等到身体准备好:

function onReady(callback) {

  var intervalId = window.setInterval(function() {

    if (document.getElementsByTagName('body')[0] !== undefined) {

      window.clearInterval(intervalId);

      callback.call(this);

    }

  }, 1000);

}



function setVisible(selector, visible) {

  document.querySelector(selector).style.display = visible ? 'block' : 'none';

}



onReady(function() {

  setVisible('.page', true);

  setVisible('#loading', false);

});


body {

  background: #FFF url("https://i.imgur.com/KheAuef.png") top left repeat-x;

  font-family: 'Alex Brush', cursive !important;

}



.page    { display: none; padding: 0 0.5em; }

.page h1 { font-size: 2em; line-height: 1em; margin-top: 1.1em; font-weight: bold; }

.page p  { font-size: 1.5em; line-height: 1.275em; margin-top: 0.15em; }



#loading {

  display: block;

  position: absolute;

  top: 0;

  left: 0;

  z-index: 100;

  width: 100vw;

  height: 100vh;

  background-color: rgba(192, 192, 192, 0.5);

  background-image: url("https://i.stack.imgur.com/MnyxU.gif");

  background-repeat: no-repeat;

  background-position: center;

}


<link href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css" rel="stylesheet"/>

<link href="https://fonts.googleapis.com/css?family=Alex+Brush" rel="stylesheet">

<div class="page">

  <h1>The standard Lorem Ipsum passage</h1>

  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure

    dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

</div>

<div id="loading"></div>


 类似资料:
  • 问题内容: 我希望在发出ajax调用以更新数据库之前完全加载页面。我可以在body onload事件中调用javascript函数,以使页面完全加载,但是我不确定如何从那里触发Ajax调用。是否有更好的方法来实现此目的(页面加载后,Upadating数据库)? 问题答案: 使用JavaScript库确实很容易,例如使用jQuery,您可以编写: 如果没有jQuery,最简单的版本可能如下所示,但它

  • 好的,首先,我将告诉这应该如何工作:我有一个页面的图片链接下侧,点击一个图片,该链接的信息出现在另一个div。我使用jQuery/Ajax将链接id发布到一个php文件中,并将该数据返回到所选的div。链接应该分页,以便一次显示4个。 这是正在发生的事情:post部分是ok的,当我单击一个链接时,正确的数据将显示在所选的div中。我不知道如何使链接div分页虽然。我需要他们分页时,页面加载,现在当

  • 问题内容: 我正在尝试制作一个网页,当它开始加载时,使用一个间隔来启动计时器。 页面完全加载后,它将停止计时器, 但是即使有更长的时间,我有99%的时间获得了0.00或0.01的时间测量值。 有时,它说的东西有时更有意义,例如.28或3.10。 如果有帮助,请参见以下代码: 因此,它基本上会创建一个称为百分百的变量,该变量每10毫秒(.01秒)增加1。 然后,如果该数字达到1000(1整秒),则称

  • ⚠️ 只有生产环境才有此功能 ⚠️ Examples Prefetching Next.js 有允许你预加载页面的 API。 用 Next.js 服务端渲染你的页面,可以达到所有你应用里所有未来会跳转的路径即时响应,有效的应用 Next.js,可以通过预加载应用程序的功能,最大程度的初始化网站性能。查看更多. Next.js 的预加载功能只预加载 JS 代码。当页面渲染时,你可能需要等待数据请求。

  • 我们正在尝试找到一个网站的Selenium WebDriver的页面加载时间。我们想要得到页面加载时间的多个屏幕/网页在网站,如登录和登录后,主屏幕等。 我们的driver.get()调用是针对登录URL的,

  • 问题内容: 我正在将React与Firebase一起使用来开发一个小型Web应用程序。为了进行身份验证,我使用了上下文API,并且在上下文中添加了登录用户的详细信息。 AuthProvider.tsx AuthConsumer.tsx PrivateRoute.tsx App.tsx 用户已经登录,并且会话持久性设置为本地。问题是,当我尝试本地主机/订阅(这是一条私有路由)时,context.is