Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.10.2016, 15:57
Интересующийся
Отправить личное сообщение для Alekseyideas Посмотреть профиль Найти все сообщения от Alekseyideas
 
Регистрация: 01.07.2016
Сообщений: 20

Очередь событий
Всем привет! Подскажите пожалуйста, как сделать так что бы когда событие пройдет, другое автоматически запускалось? Для примера есть попап, он автоматически появляется и исчезает, после его исчезновения должен через некоторое время появиться следующий попап . Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 31.10.2016, 11:42
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Alekseyideas
как сделать так что бы когда событие пройдет, другое автоматически запускалось?
В конце первого запустить второе...
Ответить с цитированием
  #3 (permalink)  
Старый 31.10.2016, 18:23
Аспирант
Отправить личное сообщение для fuckingquest Посмотреть профиль Найти все сообщения от fuckingquest
 
Регистрация: 28.10.2016
Сообщений: 70

В простом случае можно просто вызывать рекурсивно.
Вот вариант с явной очередью:
<html>
<head>
</head>
<body>
<script>


ModalWindow = {
  layer: document.createElement("div"),
  window: document.createElement("div")
}

with(ModalWindow) {
  with(layer.style){
    position = "fixed"
    width = "100%"
    height = "100%"
    background = "black"
    opacity = "0.5"
    left = "0"
    top = "0"
  }
  with(window.style){
    position = "fixed"
    top = left = "35%"
    background = "white"
    opacity = "1"
    width = height = "30%"
    border = "1px solid black"
    textAlign = "center"
    fontSize = "30px"
  }
}

ModalWindow.createWithMessage = function(message, callback){
  var window = Object.create(this)
  window.message = message
  return window
}


Object.defineProperty(ModalWindow, "show", {get: function(){
   document.body.appendChild(this.layer)
   document.body.appendChild(this.window)
   this.window.innerHTML = this.message
}})

Object.defineProperty(ModalWindow, "hide", {get: function(){
   document.body.removeChild(this.layer)
   document.body.removeChild(this.window)
   this.queue.run
}})

///////////

Queue = {}
Object.defineProperty(Queue, "create", {get: function(){
  var queue = Object.create(this)
  queue.queue = []
  return queue
}})
Queue.append = function(object){
   object.queue = this
   this.queue.unshift(object)
}

Object.defineProperty(Queue, "run",  {get: function(){
   if(this.running) delete this.running.queue
   if(!this.queue.length) return
   this.running = this.queue.pop()
   this.running.queue = this
   this.action(this.running)
 }
})


Object.defineProperty(window, "random", {get: function(){return Math.floor( Math.random() * 3000 + 3000 )}}) 


with( queue = Queue.create ) { 
  append(ModalWindow.createWithMessage("foo"))
  append(ModalWindow.createWithMessage("bar"))
  append(ModalWindow.createWithMessage("baz"))
}

queue.action = function(modalWindow){
 setTimeout(function(){
  modalWindow.show
  setTimeout(function(){modalWindow.hide}, random)
 }, 500)
}

////////

queue.run




</script>
</body>
</html>

Если очередь детерминирована перед началом итераций, вероятно, вместо unshft, выгодней использовать push и reverse после наполнения.
В случае, если к реализации итерируемого объекта нет доступа, можно использовать MutationObserver, и ловить напрямую события перерисовки страницы(события DOM)

Последний раз редактировалось fuckingquest, 31.10.2016 в 18:42.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
очередь событий skrudjmakdak Events/DOM/Window 19 22.01.2015 11:46
Очередь XML запросов Евгений М AJAX и COMET 4 01.02.2012 11:05
Переопределение событий lispik jQuery 4 13.01.2011 12:30
очередь событий прерывается alertом puchu Events/DOM/Window 8 16.07.2010 00:54
Очередь событий Petka jQuery 2 03.03.2010 12:21