Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Polymer 聚合物:添加和删除类别(1秒后)_Polymer_Polymer 1.0 - Fatal编程技术网

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);

谢谢你让我走上正轨!范围确实是个问题。您的代码似乎无法直接工作,但将其分配给变量不会影响跟踪效果!没有测试就写了:)谢谢你让我走上正轨!范围确实是个问题。您的代码似乎无法直接工作,但将其分配给变量不会影响跟踪效果!只是没有测试就写了:))