作为上面建议的好人@Snekw,我能够解决问题,下面是所有代码。
如果其他人面临同样的问题,它也可能对您有所帮助。
这就是页面结构的样子(您希望在页面上有微调器加载器)
(注意所有的 async 和 unresolved 属性)
<head>
...
<script src="bower_components/webcomponentsjs/webcomponents-lite.js"></script>
...
<link rel="import" id="bundle" href="/elements/elements.html">
...
</head>
<body>
<div id="loader-wrapper" async">
<div id="loader"></div>
</div>
<style async>
...
</style>
<template unresolved>
....
</template>
<script src="scripts/app.js" async></script>
</body>
然后打开你的 app.js 文件(polymer starter kit advanced 在 /app/scripts/ 中默认有这个)
并找到这个:
// See https://github.com/Polymer/polymer/issues/1381
window.addEventListener('WebComponentsReady', function() {
// imports are loaded and elements have been registered
...
});
然后只需添加@Snekw 建议的代码,它看起来像这样
// See https://github.com/Polymer/polymer/issues/1381
window.addEventListener('WebComponentsReady', function() {
// imports are loaded and elements have been registered
var loaderWrapper = document.getElementById('loader-wrapper');
loaderWrapper.parentNode.removeChild(loaderWrapper);
});
确保您的加载器 div 具有什么名称,如果它不是 loader-wrapper,请不要忘记在上面的 jquery 代码中更改名称。
如果您不知道如何创建微调器加载器动画本身,只需使用下面的代码
<div id="loader-wrapper" async style="z-index: -100; ">
<div id="loader"></div>
</div>
<style async>
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1000;
}
#loader {
display: block;
position: relative;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #3498db;
-webkit-animation: spin 2s linear infinite; /* Chrome, Opera 15+, Safari 5+ */
animation: spin 2s linear infinite; /* Chrome, Firefox 16+, IE 10+, Opera */
}
#loader:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #e74c3c;
-webkit-animation: spin 3s linear infinite; /* Chrome, Opera 15+, Safari 5+ */
animation: spin 3s linear infinite; /* Chrome, Firefox 16+, IE 10+, Opera */
}
#loader:after {
content: "";
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #f9c922;
-webkit-animation: spin 1.5s linear infinite; /* Chrome, Opera 15+, Safari 5+ */
animation: spin 1.5s linear infinite; /* Chrome, Firefox 16+, IE 10+, Opera */
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg); /* Chrome, Opera 15+, Safari 3.1+ */
-ms-transform: rotate(0deg); /* IE 9 */
transform: rotate(0deg); /* Firefox 16+, IE 10+, Opera */
}
100% {
-webkit-transform: rotate(360deg); /* Chrome, Opera 15+, Safari 3.1+ */
-ms-transform: rotate(360deg); /* IE 9 */
transform: rotate(360deg); /* Firefox 16+, IE 10+, Opera */
}
}
@keyframes spin {
0% {
-webkit-transform: rotate(0deg); /* Chrome, Opera 15+, Safari 3.1+ */
-ms-transform: rotate(0deg); /* IE 9 */
transform: rotate(0deg); /* Firefox 16+, IE 10+, Opera */
}
100% {
-webkit-transform: rotate(360deg); /* Chrome, Opera 15+, Safari 3.1+ */
-ms-transform: rotate(360deg); /* IE 9 */
transform: rotate(360deg); /* Firefox 16+, IE 10+, Opera */
}
}
</style>
把它放在那里而不是
这个
<div id="loader-wrapper" async">
<div id="loader"></div>
</div>
<style async>
...
</style>
UPD:重要提示
它在 Firefox 中完美流畅地运行,因为它花时间很好地显示了 1-3 秒的流畅动画,然后流畅地显示了主要内容的页面
但是,如果您有一个非常轻量级的页面,并且您在 Chromium 之类的浏览器中打开它,那么该页面的加载速度将比在 Firefox 中快得多(可能是因为 Firefox 也加载了 polyfills)并且动画几乎不会显示,这可能会导致一些故障,因为您的页面加载这么快。
为了解决这个问题,我使用了 animate.css ( https://github.com/daneden/animate.css ) 并用
<div class="animated fadeIn">
<template....
...
</div>
然后变了
.animated {
-webkit-animation-duration: 1s;
animation-duration: 1s;
至
.animated {
-webkit-animation-duration: 3s;
animation-duration: 3s;
在 animate.css 中
然后导入
<link rel="stylesheet" href="../../styles/animate.css">
到元素.html
如果您愿意,可以做一些更聪明的事情,因为我是 Web 开发的新手,所以我不知道其他任何事情,也许其他人会在这里添加一些想法