Polymer 聚合物:添加和删除类别(1秒后)
我有一个Polymer 聚合物:添加和删除类别(1秒后),polymer,polymer-1.0,Polymer,Polymer 1.0,我有一个在一个聚合物模板中,我想用CSS制作动画。我希望能够在每次调用特定的观察者函数(onTriggered)时重新触发动画 我尝试了以下函数来添加和删除CSS类,以便在再次调用观察者时可以重新触发它,但它返回无法读取未定义的属性“myContainer”。我知道这是因为聚合对象无法在Javascript函数中调用,但我找不到替代解决方案 onTriggered: function (newData, oldData) { if (oldData && oldData
在一个聚合物模板中,我想用CSS制作动画。我希望能够在每次调用特定的观察者函数(onTriggered
)时重新触发动画
我尝试了以下函数来添加和删除CSS类,以便在再次调用观察者时可以重新触发它,但它返回无法读取未定义的属性“myContainer”。我知道这是因为聚合对象无法在Javascript函数中调用,但我找不到替代解决方案
onTriggered: function (newData, oldData) {
if (oldData && oldData !== newData) {
this.$.myContainer.classList.add("animated", "jello");
setTimeout(function() {
this.$.myContainer.classList.remove("animated", "jello");
}, 1000);
}
}
同步添加然后(在x
秒之后)删除聚合元素中的CSS类的最佳方式是什么?这是因为setTimeout
回调函数中的作用域已更改。您需要更改范围,以便在回调中使用this
请尝试:
setTimeout(function() {
this.$.myContainer.classList.remove("animated", "jello");
}, 1000, this);
或者这个:
setTimeout(function() {
this.$.myContainer.classList.remove("animated", "jello");
}.bind(this), 1000);
这是因为setTimeout
回调函数中的作用域已更改。您需要更改范围,以便在回调中使用this
请尝试:
setTimeout(function() {
this.$.myContainer.classList.remove("animated", "jello");
}, 1000, this);
或者这个:
setTimeout(function() {
this.$.myContainer.classList.remove("animated", "jello");
}.bind(this), 1000);
正如@Kejt所说,范围确实是个问题。为了解决这个问题,我必须将this
分配给一个变量,然后在setTimeout
函数中引用该变量,即:
this.$.myContainer.classList.add("animated", "jello");
var polymerThis = this;
setTimeout(function() {
polymerThis.$.myContainer.classList.remove("animated", "jello");
}, 1000);
正如@Kejt所说,范围确实是个问题。为了解决这个问题,我必须将this
分配给一个变量,然后在setTimeout
函数中引用该变量,即:
this.$.myContainer.classList.add("animated", "jello");
var polymerThis = this;
setTimeout(function() {
polymerThis.$.myContainer.classList.remove("animated", "jello");
}, 1000);
谢谢你让我走上正轨!范围确实是个问题。您的代码似乎无法直接工作,但将其分配给变量不会影响跟踪效果!没有测试就写了:)谢谢你让我走上正轨!范围确实是个问题。您的代码似乎无法直接工作,但将其分配给变量不会影响跟踪效果!只是没有测试就写了:))