javascript - 具有异步数据的 Angular 2 动画

标签 javascript css angular typescript asynchronous

我有以下组件,它将简单地从我的数据库中获取包含标题和百分比的技能数据集。

我的目标是让每个 div 的初始宽度值为 0%,一旦 http 请求返回并检索到正确的信息,为每个技能设置正确的百分比,并使用从左到右的动画( div 将有一个背景颜色,所以你应该看到它的宽度增加,例如:0% ---> 95%)。

我想知道在正确的 Angular 2 处理中实现此目的的最佳方法是什么。我知道你可以在组件装饰器上使用一个动画属性,但我不确定如何让它与传入的异步结果一起工作。

关于这个问题最重要的事情是如何处理通过异步管道传入的数据,以便我可以显示百分比增加的动画。从 0 到它会是什么。就像现在一样,我立即看到了最终结果,但是,永远不会执行动画(动画是我真正要寻找的,而不仅仅是打印最终的条结果)。

我确信有几种不同的方法可以使它正常工作,只是不知道哪种方法最好。

这是我的组件:

import { Component, OnInit } from '@angular/core'
import { SkillsService } from './skills.service'

@Component({
  selector: 'skills',
  template: `
    <section class="skills">
      <div *ngFor="let skill of skillsService.skills$ | async">
        <div class="skills__bar" [style.width]="skill.percentage + '%'">
          <h3 class="skills__title">{{skill.title}}</h3>
        </div>
      </div>
    </section>
  `,
})
export class SkillsComponent implements OnInit {

  constructor(private skillsService: SkillsService) {}

  ngOnInit() {
    this.skillsService.fetchSkills()
  }
}

在此先感谢大家!

最佳答案

您可以像这样使用 CSS 过渡:

//Demo purposes only.
$("#get-skills-btn").on("click", function() {
  var randomValue = Math.random();
  $(".skills__percentage").css("transform", "scaleX(" + randomValue + ")");
});
.skills__bar {
  background-color: silver;
  text-align: center;
  position: relative;
}
.skills__percentage {
  background-color: green;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 300ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
.skills__title {
  position: relative;
  z-index: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section class="skills">
  <div>
    <div class="skills__bar">
      <div class="skills__percentage"></div>
      <h3 class="skills__title">{{skill.title}}</h3>
    </div>
  </div>
</section>


<button id="get-skills-btn">
  Fetch Data
</button>

对于 Angular 使用这样的东西:

[style.transform]="scaleX(skill.percentage/100)"

关于javascript - 具有异步数据的 Angular 2 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41352691/

相关文章:

arrays - 如何从 Angular2(Typescript) 中的 Json 数组中获取值的总和

angular - 我们如何使用 Angular 处理 URL 中的特殊字符

javascript - 如何在 Javascript 中添加函数 n 个参数?添加(3)(8)(6)(10)

javascript - Highcharts - 多个 yAxis,每个都有自己的工具提示

javascript - 使用 'X' 图标关闭实现 sidenav

css - Windows 上 Chrome 上的模糊 CSS 工具提示

javascript - 为什么我的正则表达式没有通过这种情况(包括代码)

javascript - 需要帮助的编码初学者

css em/rem 固定乘以 16?

html - 带文本字段输入的 Angular 2 对话框弹出