如何使用javascript以设定的时间间隔动态修改样式?
How to modify styles dynamically at set intervals using javascript?
我试图在一定时间间隔后动态地向元素添加样式,以便单独使用 javascript 来创建动画效果。我使用了 setInterval() 并且无法清除间隔/使其停止。此外,它不会在我分配给方法的时间间隔内发生 - 动画似乎每隔一两秒发生一次。
这是我目前尝试过的代码:http://codepen.io/AnkitaSood/pen/jyaqMR?editors=0010
以下是我需要帮助的逻辑 -
Object.keys(styles).forEach(function(key) {
for(index = 0 ; index < styles[key].length; index++) {
var intervals = setInterval(function(index) {
elem.style[key] = styles[key][index];
}, timer[index], index);
}
clearInterval(intervals);
});
您的代码不起作用的原因是因为只有最后一个 intervals
被清除(您的代码一直覆盖它)。但即使您修复了它,它也不会像您预期的那样工作,因为 clearInterval
甚至在更改发生之前可能会立即清除间隔。
所以我建议 setTimeout
:
this.animate = function() {
for(index = 0 ; index < timer.length; index++) {
setTimeout(function(index) {
for (var key in styles) {
elem.style[key] = styles[key][index];
}
}, timer[index], index);
}
};
我认为问题在于您在循环中调用 setInterval
。您不需要这样做,因为一个调用 setInterval
已经为您循环(它会每隔 x 毫秒继续调用您的回调)。您的代码实际上开始了一堆间隔,您可能只需要一个。
我稍微修改了一下,得到了一些合理的结果:
this.animate = function() {
var i = 0;
setInterval(function() {
elem.style['width'] = config.styles.width[i];
elem.style['backgroundColor'] = config.styles.backgroundColor[i];
i = ++i % 6;
}, 1000);
};
这只是一遍又一遍地运行动画,但希望它能向您展示它是如何工作的。如果你想在一定数量的循环后停止间隔,你可以这样做:
this.animate = function() {
var i = 0;
var intId = setInterval(function() {
elem.style['width'] = config.styles.width[i];
elem.style['backgroundColor'] = config.styles.backgroundColor[i];
if(++i >= 6) {
clearInterval(intId);
}
}, 1000);
};
我试图在一定时间间隔后动态地向元素添加样式,以便单独使用 javascript 来创建动画效果。我使用了 setInterval() 并且无法清除间隔/使其停止。此外,它不会在我分配给方法的时间间隔内发生 - 动画似乎每隔一两秒发生一次。
这是我目前尝试过的代码:http://codepen.io/AnkitaSood/pen/jyaqMR?editors=0010
以下是我需要帮助的逻辑 -
Object.keys(styles).forEach(function(key) {
for(index = 0 ; index < styles[key].length; index++) {
var intervals = setInterval(function(index) {
elem.style[key] = styles[key][index];
}, timer[index], index);
}
clearInterval(intervals);
});
您的代码不起作用的原因是因为只有最后一个 intervals
被清除(您的代码一直覆盖它)。但即使您修复了它,它也不会像您预期的那样工作,因为 clearInterval
甚至在更改发生之前可能会立即清除间隔。
所以我建议 setTimeout
:
this.animate = function() {
for(index = 0 ; index < timer.length; index++) {
setTimeout(function(index) {
for (var key in styles) {
elem.style[key] = styles[key][index];
}
}, timer[index], index);
}
};
我认为问题在于您在循环中调用 setInterval
。您不需要这样做,因为一个调用 setInterval
已经为您循环(它会每隔 x 毫秒继续调用您的回调)。您的代码实际上开始了一堆间隔,您可能只需要一个。
我稍微修改了一下,得到了一些合理的结果:
this.animate = function() {
var i = 0;
setInterval(function() {
elem.style['width'] = config.styles.width[i];
elem.style['backgroundColor'] = config.styles.backgroundColor[i];
i = ++i % 6;
}, 1000);
};
这只是一遍又一遍地运行动画,但希望它能向您展示它是如何工作的。如果你想在一定数量的循环后停止间隔,你可以这样做:
this.animate = function() {
var i = 0;
var intId = setInterval(function() {
elem.style['width'] = config.styles.width[i];
elem.style['backgroundColor'] = config.styles.backgroundColor[i];
if(++i >= 6) {
clearInterval(intId);
}
}, 1000);
};