我创建了一个库,弹出一些Toast通知,我试图把限制在屏幕上的最大通知。排队通知的模式?
我设法想法提取到plunker(不介意的代码,它只是为了解决这个问题)。
我有一个函数来创建这些祝酒:
function createToast() {
var body = $document.find('body').eq(0);
var toast = {};
toast.id = index++;
toast.el = angular.element('<div class="toast">Toast ' + toast.id + '</div>');
toast.el = $compile(toast.el)($scope);
if (maxOpened && toasts.length >= maxOpened) {
remove(toasts[0].id);
}
toasts.push(toast);
$animate.enter(toast.el, body).then(function() {
$timeout(function() {
remove(toast.id);
}, 3000);
});
}
基本上它创建了一个具有el
一个新的对象,然后动画它在身上。请注意,如果达到了maxOpened
,则会删除第一个。
function remove(id) {
var toast = findToast(id);
if (toast) {
$animate.leave(toast.el).then(function() {
var index = toasts.indexOf(toast);
toasts.splice(index, 1);
});
}
function findToast(toastId) {
for (var i = 0; i < toasts.length; i++) {
if (toasts[i].id === id) {
return toasts[i];
}
}
}
}
找到烤面包,动起假,然后删除它。
如果我这样做对他们有$间隔,让我们说600ms
它的工作原理。
试一下:http://plnkr.co/edit/lDnT57FPadCt5Ir5wHuK?p=preview
如果你把它降低到类似100ms
它开始打破,不仅忽略了最大,但也留下不会被删除一些孤儿祝酒。
所以我不知道这可能是一个很好的解决方案在这里。我最好的猜测是提供一个队列,所以一旦吐司被删除,我就开始排空它,但到目前为止,我没有做到。
好像确实是一个妥善的解决办法。我将在明天进行真正的交易。你的解决方案并没有消除第一个要求强制出现新注释的注释,但无论如何,你的想法可能会更好。 –