создание своего события

187
01 февраля 2019, 05:20
  1. Подскажите пожалуйста, когда я создаю свое событие, то оно затирает уже встроенное?

var event = new Event("click"); 
var elem = document.getElementById("test"); 
 
elem.addEventListener("click", function() { 
  console.log(1); 
}) 
 
elem.dispatchEvent(event);
#test { 
  padding: 20px; 
  background: #000; 
  color: #fff; 
  text-align: center; 
}
<div id="test">Клац</div>

  1. Я хочу использовать метод dispatchEvent на элементе, но использую встроенное событие click. Где взять объект события, что бы искусственно сгенерировать событие?

var elem = document.getElementById("test"); 
 
elem.addEventListener("click", function() { 
  console.log(1); 
}) 
 
//elem.dispatchEvent(event); где взять event?
#test { 
  padding: 20px; 
  background: #000; 
  color: #fff; 
  text-align: center; 
}
<div id="test">Клац</div>

Answer 1
  1. При вызове new Event(...) - создается объект события, и ничего не "затирается".

  2. Полученный объект можно передать в метод dispatchEvent. Таким образом ответом будет являться следующий код

    var elem = document.getElementById("test"); 
     
    elem.addEventListener("click", function(e) { 
      console.log(1, e); 
    }) 
     
    var myClickEventObj = new Event("click"); 
    elem.dispatchEvent(myClickEventObj);
    #test { 
      padding: 20px; 
      background: #000; 
      color: #fff; 
      text-align: center; 
    }
    <div id="test">Клац</div>

Answer 2
  1. Если вызывать new Event(<имя существующего события>) то вернет обычный экземпляр события(Event) с типом указанным в первом аргументе(будет доступно через свойство type). Когда вызывается dispatchEvent то срабатывают все обработчик событий которые подписаны на этот тип события и которые вы давали через addEventListener и в эти обработчики событий попадет созданный вами экземпляр Event.

const event = new Event('myCustomEvent') 
const elem = document.getElementById('test') 
 
elem.addEventListener('myCustomEvent', () => { 
  console.log('Я всеравно вызвался') 
}) 
 
const event2 = new Event('myCustomEvent') 
 
elem.dispatchEvent(event2)
<div id="test">Клац</div>

  1. Если нужно получить событие клика и иметь возможность указать для него стандартные свойство, то для клика можно использовать MouseEvent , вот список всех видов событий.

var e = new MouseEvent("click", { 
  bubbles: true, 
  cancelable: true, 
  clientX: 100, 
  clientY: 100 
}); 
 
console.log( e.clientX ); // 100

Свои события можно создать как тут написано через new CustomEvent(...).

READ ALSO
Предзагрузка сайта как на youtube

Предзагрузка сайта как на youtube

Каким образом на ютубе реализована такая предзагрузка? Сложно ли такое сделать?

153
Спарсить данные из json в таблицу на js

Спарсить данные из json в таблицу на js

Хей, гайсМожет быть ещё кто-нибудь столь поздней ночью сможет обратить свой взор на мою проблему

189
хранение и обработка урлов для разных языков

хранение и обработка урлов для разных языков

работаю над сайтом где есть

214