Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Hover для нижележащего слоя... (https://javascript.ru/forum/dom-window/27348-hover-dlya-nizhelezhashhego-sloya.html)

Nanto 10.04.2012 14:15

Hover для нижележащего слоя...
 
Как? Есть прозрачный png - он должен быть всё время сверху. Но при этом курсор должен реагировать на лежащие под этим png, элементы. Небольшая загвоздка - элементы нижележащего слоя не статичны - они анимированы.
Какие есть варианты?

Викториан 10.04.2012 14:39

Расчитывай координаты...

Викториан 10.04.2012 14:41

Либо подели картинку (png) на части и вставляй в нужных местах, "обнажая" нужные для реагирования элементы.

Nanto 10.04.2012 15:09

Не вариант... Координаты можно рассчитывать (там и так будет рассчёт) - как сэмулировать повышение z-index (чтобы работали ховеры, ссылки кликабельными были и т.д.).
Может можно чего намутить с svg?

Викториан 10.04.2012 15:21

Можно сделать OnClick на твою png, и в зависимости от координат (сравнивать с координатами нужных эл-тов) и выполнять нужный код) Получится одна функция с условиями)

Pavel M. 10.04.2012 16:43

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

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<meta charset=utf-8 />
<title>test</title>

<style>
  .anim { position: absolute; 
    top: 0; left: 0; width: 20px; height: 20px;
    background: red;
  }
  .anim.top { /* вверху */
    background: transparent;
    cursor: pointer;
  }
  .blue { background: blue; }
  img { position: absolute; opacity: .5; left: 0; top: 0;}
  
</style>
</head>
<body>
  <div class=anim></div> <!-- это элемент под картинкой -->
  <img src=http://placehold.it/200>
  <div class="anim top"></div> <!-- это выше -->
  
  <script>
    
    var $anim = $('.anim');
    
    function anim () {
      var x = Math.random() * 180,
          y = Math.random() * 180;
      $anim.animate({ left: x, top: y}, 4000, anim); // анимируем оба элемента одинаково
    }

    $('.top').mouseenter(function () {  // вешаем обработчик на верхний 
       $anim.first().toggleClass('blue'); // меняем нижний
    });
    
    anim();
   
  </script>
</body>
</html>

Aptyp 10.04.2012 17:11

Желательно опиши необходимость ставить png сверху всего. Может ты что-то решил делать через... А люди тебе в этом помогают.

Nanto 10.04.2012 17:18

Pavel M.,
То что надо! Не знаю насколько трудно будет её реализовать в моём случае, и насколько это будет ресурсоёмко... Но это ого-го какой вариант для меня. Чёрт, как я сам не додумался...

Nanto 10.04.2012 17:22

Aptyp,
А что описывать?
Снизу слой блоков с <img>, через jQ и canvas отрисовывается изменённая копия и накладывается поверх <img>, по ховеру и клику происходят некие пертурбации.
Можно сделать ещё эффективнее - при создании копии через canvas, сразу делать пустую копию, оборачивать её ссылкой, и поверх всех.


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