html5 页面加载loading 动画效果 第二弹(基于原生JS CSS)
2019-01-04
阅读 {{counts.readCount}}
评论 {{counts.commentCount}}
上一篇博客已经实现了第一种加载中特效,地址: https://zzzmh.cn/single?id=51
最近用在新网站 https://chrome.zzzmh.cn 后发现问题,刷新频率高的情况下,动画太多反而引起不适。
故又用同样方案,重做了一个好看又干净的loading加载中动画,用法和之前一样,也是基于原生js css,无第三方依赖。
loading.js
- document.body.innerHTML += ('<div id="preloader-body"><div id="cube-wrapper"><div class="cube-folding"><span class="leaf1"></span><span class="leaf2"></span><span class="leaf3"></span><span class="leaf4"></span></div><span class="loading"data-name="Loading">Loading</span></div></div>');
- window.onload = function () {
- document.getElementById('cube-wrapper').style.display = "none";
- document.getElementById('preloader-body').style.display = "none";
- }
loading.css
- #preloader-body{
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background-color: #fff;
- z-index: 9999;
- }
- .cube-folding {
- width: 50px;
- height: 50px;
- display: inline-block;
- -moz-transform: rotate(45deg);
- -ms-transform: rotate(45deg);
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg);
- font-size: 0;
- }
- .cube-folding span {
- position: relative;
- width: 25px;
- height: 25px;
- -moz-transform: scale(1.1);
- -ms-transform: scale(1.1);
- -webkit-transform: scale(1.1);
- transform: scale(1.1);
- display: inline-block;
- }
- .cube-folding span::before {
- content: '';
- background-color: #007ee5;
- position: absolute;
- left: 0;
- top: 0;
- display: block;
- width: 25px;
- height: 25px;
- -moz-transform-origin: 100% 100%;
- -ms-transform-origin: 100% 100%;
- -webkit-transform-origin: 100% 100%;
- transform-origin: 100% 100%;
- -moz-animation: folding 2.5s infinite linear both;
- -webkit-animation: folding 2.5s infinite linear both;
- animation: folding 2.5s infinite linear both;
- }
- .cube-folding .leaf2 {
- -moz-transform: rotateZ(90deg) scale(1.1);
- -ms-transform: rotateZ(90deg) scale(1.1);
- -webkit-transform: rotateZ(90deg) scale(1.1);
- transform: rotateZ(90deg) scale(1.1);
- }
- .cube-folding .leaf2::before {
- -moz-animation-delay: 0.3s;
- -webkit-animation-delay: 0.3s;
- animation-delay: 0.3s;
- background-color: #34a4ff;
- }
- .cube-folding .leaf3 {
- -moz-transform: rotateZ(270deg) scale(1.1);
- -ms-transform: rotateZ(270deg) scale(1.1);
- -webkit-transform: rotateZ(270deg) scale(1.1);
- transform: rotateZ(270deg) scale(1.1);
- }
- .cube-folding .leaf3::before {
- -moz-animation-delay: 0.9s;
- -webkit-animation-delay: 0.9s;
- animation-delay: 0.9s;
- background-color: #83c7ff;
- }
- .cube-folding .leaf4 {
- -moz-transform: rotateZ(180deg) scale(1.1);
- -ms-transform: rotateZ(180deg) scale(1.1);
- -webkit-transform: rotateZ(180deg) scale(1.1);
- transform: rotateZ(180deg) scale(1.1);
- }
- .cube-folding .leaf4::before {
- -moz-animation-delay: 0.6s;
- -webkit-animation-delay: 0.6s;
- animation-delay: 0.6s;
- background-color: #5cb6ff;
- }
- @-moz-keyframes folding {
- 0%, 10% {
- -moz-transform: perspective(140px) rotateX(-180deg);
- transform: perspective(140px) rotateX(-180deg);
- opacity: 0;
- }
- 25%, 75% {
- -moz-transform: perspective(140px) rotateX(0deg);
- transform: perspective(140px) rotateX(0deg);
- opacity: 1;
- }
- 90%, 100% {
- -moz-transform: perspective(140px) rotateY(180deg);
- transform: perspective(140px) rotateY(180deg);
- opacity: 0;
- }
- }
- @-webkit-keyframes folding {
- 0%, 10% {
- -webkit-transform: perspective(140px) rotateX(-180deg);
- transform: perspective(140px) rotateX(-180deg);
- opacity: 0;
- }
- 25%, 75% {
- -webkit-transform: perspective(140px) rotateX(0deg);
- transform: perspective(140px) rotateX(0deg);
- opacity: 1;
- }
- 90%, 100% {
- -webkit-transform: perspective(140px) rotateY(180deg);
- transform: perspective(140px) rotateY(180deg);
- opacity: 0;
- }
- }
- @keyframes folding {
- 0%, 10% {
- -moz-transform: perspective(140px) rotateX(-180deg);
- -ms-transform: perspective(140px) rotateX(-180deg);
- -webkit-transform: perspective(140px) rotateX(-180deg);
- transform: perspective(140px) rotateX(-180deg);
- opacity: 0;
- }
- 25%, 75% {
- -moz-transform: perspective(140px) rotateX(0deg);
- -ms-transform: perspective(140px) rotateX(0deg);
- -webkit-transform: perspective(140px) rotateX(0deg);
- transform: perspective(140px) rotateX(0deg);
- opacity: 1;
- }
- 90%, 100% {
- -moz-transform: perspective(140px) rotateY(180deg);
- -ms-transform: perspective(140px) rotateY(180deg);
- -webkit-transform: perspective(140px) rotateY(180deg);
- transform: perspective(140px) rotateY(180deg);
- opacity: 0;
- }
- }
- #cube-wrapper {
- position: fixed;
- left: 50%;
- top: 50%;
- margin-top: -50px;
- margin-left: -50px;
- width: 100px;
- height: 100px;
- text-align: center;
- }
- #cube-wrapper:after {
- content: '';
- position: absolute;
- left: 0;
- right: 0;
- bottom: -20px;
- margin: auto;
- width: 90px;
- height: 6px;
- background-color: rgba(0, 0, 0, 0.1);
- -webkit-filter: blur(2px);
- filter: blur(2px);
- -moz-border-radius: 100%;
- -webkit-border-radius: 100%;
- border-radius: 100%;
- z-index: 1;
- -moz-animation: shadow 0.5s ease infinite alternate;
- -webkit-animation: shadow 0.5s ease infinite alternate;
- animation: shadow 0.5s ease infinite alternate;
- }
- #cube-wrapper .loading {
- font-size: 12px;
- letter-spacing: 0.1em;
- display: block;
- color: #007ee5;
- position: relative;
- top: 25px;
- z-index: 2;
- -moz-animation: text 0.5s ease infinite alternate;
- -webkit-animation: text 0.5s ease infinite alternate;
- animation: text 0.5s ease infinite alternate;
- }
用法与上次完全一致,简单说下。
方案1 直接引入,立即生效。
demo.html
- <!DOCTYPE HTML>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>demo</title>
- <link rel="stylesheet" href="css/loading.css"/>
- </head>
- <body>
- <!-- 此方案js必须引入在body第一行 -->
- <script src="js/loading.js"></script>
- <!-- 其余代码写在后面即可 -->
- </body>
- </html>
方案2 不引入js,将代码写入html
demo.html
- <!DOCTYPE HTML>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>demo</title>
- <link rel="stylesheet" href="css/loading.css"/>
- </head>
- <body>
- <!-- 写在开头 -->
- <div id="preloader-body">
- <div id="cube-wrapper">
- <div class="cube-folding">
- <span class="leaf1"></span>
- <span class="leaf2"></span>
- <span class="leaf3"></span>
- <span class="leaf4"></span>
- </div>
- <span class="loading"data-name="Loading">Loading</span>
- </div>
- </div>
- <!-- 中间写其他代码 -->
- <script>
- // 末尾绑定window.onload事件 (也可以用jquery或者vue实现,只需要在window加载完毕后,触发隐藏2个div即可)
- window.onload = function () {
- document.getElementById('cube-wrapper').style.display = "none";
- document.getElementById('preloader-body').style.display = "none";
- }
- </script>
- </body>
- </html>
最终效果可以刷新我的新网站看(没有做延迟消失,如果loading太快看不到,建议 ctrl+f5 强制刷新来延长加载时间)
评论区空空如也,赶紧添加一条评论吧
评论 {{counts.commentCount}}
{{comment.name}}
{{comment.os}}
{{comment.browser}}
{{comment.reply.name}}
{{comment.reply.os}}
{{comment.reply.browser}}