нестандартный блесна (логотип) в угловых - PullRequest
0 голосов
/ 06 ноября 2019

Я хотел бы создать собственный спиннер / загрузчик в проекте Angular. Я искал это все время, но я могу найти только помощь для создания различных блесен, но даже не один, использующий изображение. Может кто-нибудь помочь или указать мне в правильном направлении? Если я использую только CSS и HTML, он не загружается, когда мне это нужно.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

используйте это

Html Деталь, в которой будет использоваться счетчик

 <div class="overlay" *ngIf="showSpinner">
    <div class="spinner-wrapper">
      <app-spinner message="Data Loading"></app-spinner>
    </div>
  </div>

  <div class="loaded-content" [class.blurred]="showSpinner">
  </div>

Css Part

    .overlay {
    position: absolute;
    z-index: 1002;
    background-color: rgba(255, 255, 255, 0.5);
    width: 100%;
    height: 100%;
  }

  .spinner-wrapper {
    display: flex;
    justify-content: center;
    justify-items: center;
  }

Создайте компонент счетчика, как показано ниже

html компонента

<div class="container">
  <div class="row">
    <div id="loader">
      <div class="dot"></div>
      <div class="dot"></div>
      <div class="dot"></div>
      <div class="dot"></div>
      <div class="dot"></div>
      <div class="dot"></div>
      <div class="dot"></div>
      <div class="dot"></div>
      <div class="loading"></div>
    </div>

    <p class="spinner-message" *ngIf="message && message !== ''">
      {{message}}
    </p>
  </div>
</div> 

Компонент CSS

#loader {
    bottom: 0;
    height: 175px;
    left: 0;
    margin: auto;
    position: absolute;
    right: 0;
    top: 0;
    width: 175px;
  }

  #loader {
    bottom: 0;
    height: 175px;
    left: 0;
    margin: auto;
    position: absolute;
    right: 0;
    top: 0;
    width: 175px;
  }

  #loader .dot {
    bottom: 0;
    height: 100%;
    left: 0;
    margin: auto;
    position: absolute;
    right: 0;
    top: 0;
    width: 87.5px;
  }

  #loader .dot::before {
    border-radius: 100%;
    content: "";
    height: 87.5px;
    left: 0;
    position: absolute;
    right: 0;
    top: 0;
    transform: scale(0);
    width: 87.5px;
  }

  #loader .dot:nth-child(7n+1) {
    transform: rotate(45deg);
  }

  #loader .dot:nth-child(7n+1)::before {
    animation: 0.8s linear 0.1s normal none infinite running load;
    background: #00ff80 none repeat scroll 0 0;
  }

  #loader .dot:nth-child(7n+2) {
    transform: rotate(90deg);
  }

  #loader .dot:nth-child(7n+2)::before {
    animation: 0.8s linear 0.2s normal none infinite running load;
    background: #00ffea none repeat scroll 0 0;
  }

  #loader .dot:nth-child(7n+3) {
    transform: rotate(135deg);
  }

  #loader .dot:nth-child(7n+3)::before {
    animation: 0.8s linear 0.3s normal none infinite running load;
    background: #00aaff none repeat scroll 0 0;
  }

  #loader .dot:nth-child(7n+4) {
    transform: rotate(180deg);
  }

  #loader .dot:nth-child(7n+4)::before {
    animation: 0.8s linear 0.4s normal none infinite running load;
    background: #0040ff none repeat scroll 0 0;
  }

  #loader .dot:nth-child(7n+5) {
    transform: rotate(225deg);
  }

  #loader .dot:nth-child(7n+5)::before {
    animation: 0.8s linear 0.5s normal none infinite running load;
    background: #2a00ff none repeat scroll 0 0;
  }

  #loader .dot:nth-child(7n+6) {
    transform: rotate(270deg);
  }

  #loader .dot:nth-child(7n+6)::before {
    animation: 0.8s linear 0.6s normal none infinite running load;
    background: #9500ff none repeat scroll 0 0;
  }

  #loader .dot:nth-child(7n+7) {
    transform: rotate(315deg);
  }

  #loader .dot:nth-child(7n+7)::before {
    animation: 0.8s linear 0.7s normal none infinite running load;
    background: magenta none repeat scroll 0 0;
  }

  #loader .dot:nth-child(7n+8) {
    transform: rotate(360deg);
  }

  #loader .dot:nth-child(7n+8)::before {
    animation: 0.8s linear 0.8s normal none infinite running load;
    background: #ff0095 none repeat scroll 0 0;
  }

  #loader .loading {
    background-position: 50% 50%;
    background-repeat: no-repeat;
    bottom: -40px;
    height: 20px;
    left: 0;
    position: absolute;
    right: 0;
    width: 180px;
  }

  @keyframes load {
    100% {
      opacity: 0;
      transform: scale(1);
    }
  }

  @keyframes load {
    100% {
      opacity: 0;
      transform: scale(1);
    }
  }

  .spinner-message {
    text-align: center;
  }

Компонент ts Part

export class SpinnerComponent implements OnInit {
  @Input() message = '';
  constructor() { }

  ngOnInit() {
  }

}
0 голосов
/ 07 ноября 2019

Вот пример моего кода для создания прядильщика изображений в более раннем проекте в приложении Angular (выполняется на чистом CSS / HTML):

html:

<div *ngIf="loaderPersonInfo" class="spinner">
  <img class="spinner-img" src="../../../assets/img/logo.svg">
</div>

CSS:

.spinner-img {
  height: 20vh;
  width: 20vh;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
  animation: loading-spinner-img 3s linear infinite;
}


@keyframes loading-spinner-img {
  0%, 100% {
    animation-timing-function: cubic-bezier(0.5, 0, 1, 0.5);
  }
  0% {
    transform: rotateY(0deg);
  }
  50% {
    transform: rotateY(1800deg);
    animation-timing-function: cubic-bezier(0, 0.5, 0.5, 1);
  }
  100% {
    transform: rotateY(3600deg);
  }
}
...