Игнорирование mousemove на дочерних элементах

195
17 сентября 2017, 02:18

Из интереса попробовал написать range slider, что бы понять, как это должно работать, но столкнулся с проблемой:

var slider = document.querySelector('.slider'); 
var button = document.querySelector('.button'); 
 
slider.addEventListener('mousemove', function(e) { 
  var lg = document.querySelector('.cursor'); 
  lg.innerHTML = 'Координаты мыши: ' + e.offsetX; 
});
.slider { 
  background: blue; 
  height: 30px; 
  width: 500px; 
} 
 
.button { 
  background: red; 
  height: 30px; 
  width: 30px; 
  margin-left: 96px; 
}
<div class="slider"> 
  <div class="button"></div> 
</div> 
<hr> 
<div class="info"> 
  <span class="cursor"></span> 
</div>

Должно работать так: вожу курсором по блоку slider, и обработчик события mousemove перемещает блок button.

Проблема заключается в том, что при наведении на блок button, событие возникает именно на нем. Есть ли способ игнорировать наведение на button, продолжая генерировать событие на slider?

Если нет, то каким ещё способом следует перемещать блок button внутри slider?

Answer 1

У вас проблема не в генерировании события, а в том, что вы берете e.offsetX,а при наведении на кнопку в e попадет кнопка, тоесть я предлагаю координаты брать с документа и отнимать от них оффсет слайдера с лева :

var slider = document.querySelector('.slider'); 
var button = document.querySelector('.button'); 
 
slider.addEventListener('mousemove', function(e) { 
  var lg = document.querySelector('.cursor'); 
  lg.innerHTML = 'Координаты мыши: ' + (e.clientX - slider.offsetLeft); 
});
.slider { 
  background: blue; 
  height: 30px; 
  width: 500px; 
} 
 
.button { 
  background: red; 
  height: 30px; 
  width: 30px; 
  margin-left: 96px; 
}
<div class="slider"> 
  <div class="button"></div> 
</div> 
<hr> 
<div class="info"> 
  <span class="cursor"></span> 
</div>

READ ALSO
Не получается создать виджеты Amazon Pay

Не получается создать виджеты Amazon Pay

Не могу заставить работать виджет Amazon Pay (Address Book)Код html-страницы:

181
как установить reCaptcha на свой сайт

как установить reCaptcha на свой сайт

Всем привет, возникла следующая проблема по вопросу безопасности на сайтеХотелось бы использовать стандартную reCaptcha'у от гугла

232
индексировать сайт и обойти verify страница

индексировать сайт и обойти verify страница

На сайте нужен verify 18+ но проблема такая google bot, yandex bot будут сканировать только этот страница (verifyphp) как могу дать им доступ на сайт без verify чтобы...

251
Выводит результат одной строкой PHP query

Выводит результат одной строкой PHP query

Хочу вывести все содержимое ссылок по отдельности, а он соединяет и выводит одной большой строкой

174