【问题标题】:CSS pie spinner/loader with transparent background具有透明背景的 CSS pie spinner/loader
【发布时间】:2017-07-13 23:10:21
【问题描述】:

我只需要使用 css 和 javascript 来制作 pie spinner/loader。

到目前为止,当背景是纯色时,我设法让它工作,因为它不需要查看隐藏半圆的 div(不介意颜色和顶部/左侧):

.wrapper {
  position: relative;
  background: transparent;
  width: 50px;
  height: 50px;
  background: gray;
}

.wrapper,
.wrapper * {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

.wrapper .pie,
.wrapper * .pie {
  width: 50%;
  height: 100%;
  transform-origin: 100% 50%;
  position: absolute;
  background: red;
}

.wrapper .spinner,
.wrapper * .spinner {
  border-radius: 100% 0 0 100%/50% 0 0 50%;
  z-index: 200;
  border-right: none;
  animation: rota 5s linear infinite
}

.wrapper .filler,
.wrapper * .filler {
  border-radius: 0 100% 100% 0/0 50% 50% 0;
  left: 50%;
  opacity: 0;
  z-index: 100;
  border-left: none;
  background: red;
  animation: opa 5s steps(1, end) infinite reverse
}

.wrapper .mask,
.wrapper * .mask {
  width: 50%;
  height: 100%;
  position: absolute;
  background: inherit;
  opacity: 1;
  z-index: 300;
  animation: opa 5s steps(1, end) infinite
}

.wrapper:hover .spinner,
.wrapper:hover .filler,
.wrapper:hover .mask {
  animation-play-state: running;
}

@-moz-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-webkit-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-o-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-moz-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@-webkit-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@-o-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}
<div class="wrapper">
  <div class="pie spinner"></div>
  <div class="pie filler"></div>
  <div class="mask"></div>
</div>

问题是,我需要使背景透明,这样我才能看到它,但是蒙版 div 变得无用:

body {
  background-image: url(http://www.publicdomainpictures.net/pictures/20000/velka/tulip-flower-garden.jpg)
}

.wrapper {
  position: relative;
  background: transparent;
  width: 50px;
  height: 50px;
  background: transparent;
}

.wrapper,
.wrapper * {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

.wrapper .pie,
.wrapper * .pie {
  width: 50%;
  height: 100%;
  transform-origin: 100% 50%;
  position: absolute;
  background: red;
}

.wrapper .spinner,
.wrapper * .spinner {
  border-radius: 100% 0 0 100%/50% 0 0 50%;
  z-index: 200;
  border-right: none;
  animation: rota 5s linear infinite
}

.wrapper .filler,
.wrapper * .filler {
  border-radius: 0 100% 100% 0/0 50% 50% 0;
  left: 50%;
  opacity: 0;
  z-index: 100;
  border-left: none;
  background: red;
  animation: opa 5s steps(1, end) infinite reverse
}

.wrapper .mask,
.wrapper * .mask {
  width: 50%;
  height: 100%;
  position: absolute;
  background: inherit;
  opacity: 1;
  z-index: 300;
  animation: opa 5s steps(1, end) infinite
}

.wrapper:hover .spinner,
.wrapper:hover .filler,
.wrapper:hover .mask {
  animation-play-state: running;
}

@-moz-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-webkit-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-o-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-moz-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@-webkit-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@-o-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}
<div class="wrapper">
  <div class="pie spinner"></div>
  <div class="pie filler"></div>
  <div class="mask"></div>
</div>

有没有可能实现我想要的?怎么样?

【问题讨论】:

  • 您可以使用 css 渐变背景旋转,例如codepen
  • 这个差不多就是我想要的了,唯一的问题是这个项目我不能用jQuery,不过我会研究一下渐变背景旋转。

标签: javascript html css spinner


【解决方案1】:

.wrapper {
  position: relative;
  background: transparent !important; 
  width: 50px;
  height: 50px;
  background: gray;
}

.wrapper,
.wrapper * {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

.wrapper .pie,
.wrapper * .pie {
  width: 50%;
  height: 100%;
  transform-origin: 100% 50%;
  position: absolute;
  background: red;
}

.wrapper .spinner,
.wrapper * .spinner {
  border-radius: 100% 0 0 100%/50% 0 0 50%;
  z-index: 200;
  border-right: none;
  animation: rota 5s linear infinite
}

.wrapper .filler,
.wrapper * .filler {
  border-radius: 0 100% 100% 0/0 50% 50% 0;
  left: 50%;
  opacity: 0;
  z-index: 100;
  border-left: none;
  background: red;
  animation: opa 5s steps(1, end) infinite reverse
}

.wrapper .mask,
.wrapper * .mask {
  width: 50%;
  height: 100%;
  position: absolute;
  background: inherit;
  opacity: 1;
  z-index: 300;
  animation: opa 5s steps(1, end) infinite
}

.wrapper:hover .spinner,
.wrapper:hover .filler,
.wrapper:hover .mask {
  animation-play-state: running;
}

@-moz-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-webkit-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-o-keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@keyframes rota {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@-moz-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@-webkit-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@-o-keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}

@keyframes opa {
  0% {
    opacity: 1;
  }
  50%,
  100% {
    opacity: 0;
  }
}
<div class="wrapper">
  <div class="pie spinner"></div>
  <div class="pie filler"></div>
  <div class="mask"></div>
</div>

添加背景透明重要

.wrapper { background: transparent !important; }

【讨论】:

  • 这个不行,效果必须和第一个sn-p一样,就像一个顺时针填充的圆。
【解决方案2】:

您可以使用 javascript 为您的加载器设置计时器...这是一个简单的示例

$(document).ready(function() {

setTimeout(function(){
    $('body').addClass('pie spinner');
}, 3000); });

【讨论】:

  • 我不是在询问“启动”加载程序,我是在询问如何使蒙版 div 透明,或者其他解决方案来实现我在第一个 sn-p 中实际实现的目标/
  • rgba(244, 67, 54, 0.11) 设置为 .Wrapper .pie 类以及 .Wrapper .filler 类的背景
猜你喜欢
  • 2023-03-16
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多