Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.09.2018, 17:33
Новичок на форуме
Отправить личное сообщение для Remi13 Посмотреть профиль Найти все сообщения от Remi13
 
Регистрация: 19.09.2018
Сообщений: 2

Как удалить обработчик у определенной части блока
Добрый день! Очень нужна ваша помощь!
На html странице имеется структура типа:
<div class="points-content">
<div class="point">... </div>
...
<div class="point">... </div>
</div>

Где каждый блок .point занимает 100% площади родительского блока .points-content и содержит некую статью. Виден на экране только тот, кто имеет дополнительный класс .current, присваивающийся при определенных обстоятельствах. Чтобы он снова перестал быть виден ("закрылась статья") существует JS функция _closeContent, которая привязывается следующим образом:
this.pointsContentWrapper = this.el.querySelector('.points-content');
this.pointsContentWrapper.addEventListener('click', this._closeContent);

Сделано это для того, чтобы статью можно было закрыть при клике на любую точку внутри блока .points-content - ну мне так надо просто, и все работало хорошо и удобно до этого момента.
В одну из статей понадобилось добавить видео-контент, используя VJS player.
<video id='video1' class="video-js vjs-default-skin"></video>

И разумеется, при нажатии на кнопки play/stop в плеере статья так же закрывается, так как срабатывает вышеописанный обработчик.
Собственно вопрос в том, как сделать так, чтобы он не срабатывал при кликах на ту часть экрана, где находится видео-контейнер, но вокруг него продолжал работать по-старому?
Я пробовала сделать что-то типа:
this.videoContentWrapper = this.el.querySelector('.points-content .point video');
this.videoContentWrapper.removeEventListener('click', this._closeContent);

Но, разумеется, оно не работает... Как быть, подскажите?
Ответить с цитированием
  #2 (permalink)  
Старый 19.09.2018, 17:42
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

добавить в функцию обработчик сверху
if(event.target.tagName == 'VIDEO') return.

или обернуть изнутри
if(event.target.tagName !== 'VIDEO'){
//тут код закрывашки
}
Ответить с цитированием
  #3 (permalink)  
Старый 19.09.2018, 18:18
Новичок на форуме
Отправить личное сообщение для Remi13 Посмотреть профиль Найти все сообщения от Remi13
 
Регистрация: 19.09.2018
Сообщений: 2

Спасибо за идею! Не совсем работает, в силу особенностей самого используемого видеоплеера - там, как оказалось, при его запуске еще куча элементов встраивается, потому tagName оказывается то div, то button, то еще что-то, но вот если выкрутиться вот так, то работает:
if(event.target.className !== 'vjs-poster' && event.target.className !== 'vjs-tech' && event.target.className !== 'vjs-icon-placeholder')

Только главное тогда "слепых зон" не оставить )))
Ответить с цитированием
  #4 (permalink)  
Старый 19.09.2018, 18:25
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

if(event.target.closest('video')) return;
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить элемент таблицы seoneo Элементы интерфейса 2 29.08.2012 18:54
КАК удалить []-символы из строки?! Brook Events/DOM/Window 4 25.04.2012 16:38
Как снять обработчик с очередью FanAizu jQuery 0 11.02.2012 19:28
как удалить элемент в DOM? czp Общие вопросы Javascript 11 17.12.2011 20:55
Освобождение памяти или как удалить this? Greck Общие вопросы Javascript 16 14.12.2011 11:29