angular - 在 Angular 中动态更改 SVG 颜色
问题描述
我在 Angular 中使用 svg 绘制了几个圆圈,如下所示:
<div (window:resize)="onEatableResized($event)">
<svg id="eater" (click)="onEaterClicked()"
[@eater_circle_trigger]="eater_clicked ? 'eater_clicked' : 'none'"
(@eater_circle_trigger.done)="onEaterDone($event)"
[attr.width]=eater_data.box_size
[attr.height]=eater_data.box_size>
<circle cx="20" cy="20" stroke-width="1"
[attr.r]=eater_data.radius
[attr.stroke]=eater_data.stroke_color
[attr.fill]=eater_data.fill_color>
</circle>
</svg>
<svg *ngFor="let ncircles of total_circles|times; index as id"
id="{{ 'eatable_' + id }}"
[attr.width]=eatable_data.box_size
[attr.height]=eatable_data.box_size>
<circle cx="20" cy="20" stroke-width="1"
[@eater_trigger]="dead ? 'dead' : 'alive'"
[attr.r]=eatable_data.radius
[attr.stroke]=eatable_data.stroke_color
[attr.fill]=eatable_data.fill_color
/>
</svg>
</div>
它们如下所示:
当eater
点击带有 id 的 svg(红色圆圈)时,它会通过动画移动到下一个圆圈:
@Component({
selector: "app-eatable",
templateUrl: "./eatable.component.html",
styleUrls: ["./eatable.component.css"],
animations: [
trigger('eater_circle_trigger', [
state('eater_clicked', style({
transform: 'translate(35px, 0px)'
})),
transition('* => eater_clicked', [
animate('1s ease-in-out')
])
]),
trigger('eater_trigger', [
state('dead', style({
fill: 'while'
})),
])
]
})
动画完成后,我希望圆圈的颜色从黑色变为白色,使用eater_trigger
圆圈eater
移动。但是动画完成后,颜色不会改变。这是回调onEaterDone
:
onEaterDone(event)
{
this.current_eatable++;
this.dead = true;
console.log(event.fromeState + " => " + event.toState);
if (this.current_eatable == this.total_circles)
{
console.log('done');
}
else
{
}
}
输出:
如何使那个圆圈颜色变为白色?我是 Angular 的新手,因此非常感谢详细说明。
解决方案
我会在您的onEaterDone
回调中过滤状态,因为它会为每个状态调用并done
立即设置属性,而 Angular无法检测到 click 上的更改。
onEaterDone(event) {
if (event.toState === 'none') {
return;
}
然后,我根本不会使用done
属性,因为动画会立即应用于所有黑色圆圈。你已经有了current_eatable
计数器,那么为什么不在你的动画条件中使用它呢?
[@eater_trigger]="id < current_eatable ? 'dead' : 'alive'"
推荐阅读
- python - 尝试更改上传图像函数名称 Django 时出现错误
- excel - 减少行数 - VBA Excel
- django - 我想从我的 django mobels 获取数据,但显示错误上下文必须是 dict 而不是 QuerySet
- sql - SQL 列不获取 NULL
- javascript - 将 SVG 作为 React 组件导入不适用于 Next.js
- angularjs - 以 1x 角度实现日期范围选择器
- hibernate - JPA Repository:设置符合条件的最新元素的字段
- reactjs - 反应生产构建未捕获的运行时错误:内存访问越界
- javascript - 生产中的下一个 js 动态路由返回 403 错误,但应该返回 404。可能是什么问题?
- python - 从 XML 中提取变量到 Pandas