【问题标题】:knockout.js observable array push delay on each item每个项目的 knockout.js 可观察数组推送延迟
【发布时间】:2018-12-22 10:21:41
【问题描述】:

我有一个将项目推入界面的数组。现在,所有项目都以不透明的小动画同时显示。但是,我希望每个都一个一个地出现,并有一点延迟。好像他们是一个接一个地进来一样。

但是,我尝试的所有内容似乎仍然同时出现。我使用了rate limit,但这似乎没有帮助。下面是我的数组,我正在使用splice。我什至在 foreach 中使用了setTimeout

 self.plays = ko.observableArray([]);

        self.update = function (period) {
             period.Plays.forEach(function (p, index) {
                        self.plays.splice(0, 0, p);
                    });
        };

CSS

.play-by-plays .play.flash,
    .line-scores .line-period.flash {
        transition: color 1s ease;
    }

    .play-by-plays .play,
    .line-scores .line-period {
        transition: color 1s ease;
    }

【问题讨论】:

  • 您是否使用foreach 进行DOM 操作?如果是,请阅读foreach 文档的最后一部分。它可能有用。 knockoutjs.com/documentation/foreach-binding.html
  • 嗯,我已经在用 CSS 做动画了,效果很好。但是,我想要延迟每个项目的出现时间,所以看起来它们不是同时被推送的。

标签: javascript arrays knockout.js css-animations


【解决方案1】:

你说你试过setTimeout。你试过这样吗?

function ViewModel(){
  var self = this;
  self.plays = ko.observableArray();

  self.Periods = [{'letter':'a'},{'letter':'b'},{'letter':'c'}];

  self.update = function(){
    var counter = 0;
    self.Periods.forEach(function(letter){
      setTimeout(function(){
        self.plays.unshift(letter);
      }, counter);
      counter += 500;
    });
  };
  
  self.update();
}

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div data-bind="foreach: plays">
  <span data-bind="text: letter"></span>
</div>

【讨论】:

  • 需要在列表开头推送的项目。
  • 为此您需要使用unshift。我已经更新了我的小提琴。
  • @MikeFlynn 有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 2019-12-16
  • 2017-01-01
  • 1970-01-01
  • 2018-11-26
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多