Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Проброс событий сквозь div (https://javascript.ru/forum/jquery/28065-probros-sobytijj-skvoz-div.html)

MadGest 06.05.2012 13:25

Проброс событий сквозь div
 
Два элемента div. Первый расположен fixed прямо над другим div'ом. Как сделать так что бы первый элемент не реагировал на нажатия а второй работал как будто первого нет.

Раед 06.05.2012 13:34

http://javascript.ru/forum/misc/2786...ijj-myshi.html

Pavel M. 07.05.2012 10:36

Цитата:

Сообщение от MadGest (Сообщение 172953)
Два элемента div. Первый расположен fixed прямо над другим div'ом. Как сделать так что бы первый элемент не реагировал на нажатия а второй работал как будто первого нет.

если случай простой, то можно просто передавать событие с верхнего элемента в обработчик нижнего

на jquery для быстроты

кликните по нижнему либо по верхнему элементу
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<meta charset=utf-8 />
<title>test</title>
<style>
  div {
    width: 200px;
    height: 150px;
    background: silver;
    border: 1px solid;
  }
  
  .top {
    position: fixed;
    left: 40px; top: 20px;
    width: 100px;
    height: 100px;
  }
  
  .hot {
    background: red;
  }
</style>
<script>
  $(function () {
  
    $('.top').on('click', function (e) {
      $('.bottom').trigger(e);
    });
    
    $('.bottom').on('click', function () {
      $(this).toggleClass('hot');
    });
  
  });
 </script>
</head>
<body>
  <div class=bottom>нижний</div>
  <div class=top>верхний</div>
</body>
</html>

CreatOne 25.05.2012 10:18

А если так: снизу несколько маленьких дивов, а над ними один большой, который закрывает их (в нем находится текст). Но события прописаны для маленьких(у каждого маленького дива свои параметры).
При этом, маленькие дивы имеют цвет, соответственно поменять местами нельзя, иначе не будет виден текст с большого дива.
Можно как-нибудь узнать по какому маленькому диву кликнули и вызвать его событие?

Deff 25.05.2012 12:15

Цитата:

Сообщение от CreatOne (Сообщение 176498)
А если так: снизу несколько маленьких дивов, а над ними один большой, который закрывает их (в нем находится текст). Но события прописаны для маленьких(у каждого маленького дива свои параметры).
При этом, маленькие дивы имеют цвет, соответственно поменять местами нельзя, иначе не будет виден текст с большого дива.
Можно как-нибудь узнать по какому маленькому диву кликнули и вызвать его событие?


При нажатии на верхний div - нижнюю мелочь в прозрачном(transparent) режиме z-index(ом) перемещаем наверх и смотрим событие на конкретном из них при отпускания мыши


Или отследить координаты курсора при клике на верхнем div,
по сообытию анализировать попадения координаты в блок мелких дивов, если попали - тогда бъем посекторно(неких заранее созданный массив) и проверяем попадания координат в соответствующий мелкий div и вызываем его событие -

CreatOne 25.05.2012 12:24

Цитата:

Сообщение от Deff (Сообщение 176512)
При нажатии на верхний div - нижнюю мелочь в прозрачном(transparent) режиме z-index(ом) перемещаем наверх и смотрим событие на конкретном из них при отпускания мыши


Или отследить координаты курсора при клике на верхнем div,
по сообытию анализировать попадения координаты в блок мелких дивов, если попали - тогда бъем посекторно(неких заранее созданный массив) и проверяем попадания координат в соответствующий мелкий div и вызываем его событие -

Не совсем понял 1 способ

Deff 25.05.2012 13:42

Цитата:

Сообщение от CreatOne (Сообщение 176514)
Не совсем понял 1 способ

Все нижние мелкие div обрамляем общим дивом и приподнимаем этот общий вместе со всеми мелкими по событию mousedown над самым верхним блоком
(для этого у блока обрамления мелких div должно быть в css position:relative, тогда можно изменить css - z-index - для вытаскивания на самый верх

После вытаскивания наверх - уже можно отследить событие mouseup непосредственно в конкретном мелком div

CreatOne 25.05.2012 13:48

Цитата:

Сообщение от Deff (Сообщение 176531)
Все нижние мелкие div обрамляем общим дивом и приподнимаем этот общий вместе со всеми мелкими по событию mousedown над самым верхним блоком
(для этого у блока обрамления мелких div должно быть в css position:relative, тогда можно изменить css - z-index - для вытаскивания на самый верх

После вытаскивания наверх - уже можно отследить событие mouseup непосредственно в конкретном мелком div

OK. Спасибо, попробую

s1mpson 05.03.2013 08:54

Цитата:

Сообщение от MadGest (Сообщение 172953)
Два элемента div. Первый расположен fixed прямо над другим div'ом. Как сделать так что бы первый элемент не реагировал на нажатия а второй работал как будто первого нет.


Добавьте элементу fixed CSS свойство
pointer-events: none;

и этот элемент будет прозрачен для событий!

Можно делать с событиями много интересного, подробнее здесь:
https://developer.mozilla.org/en-US/...pointer-events

VitAl2013 15.08.2013 21:26

Если есть необходимость выводить таким образом только контекстное меню? Есть img над ней 2 прозрачных div полностью её перекрывающих, прозрачных, их функция ловли левых кликов для листания, но надо дать пользователю возможность сохранять картинку и в идеале дать ему контекстное меню картинки img , а не div-ов. Такое вообще возможно?


Часовой пояс GMT +3, время: 17:18.