it-swarm.com.ru

Игнорировать взаимодействие мыши на оверлейном изображении

У меня есть строка меню с эффектами при наведении, и теперь я хочу разместить прозрачное изображение с кружком и текстом, нарисованным от руки, над одним из пунктов меню. Если я использую абсолютное позиционирование для размещения наложенного изображения над элементом меню, пользователь не сможет нажать кнопку, и эффект наведения не будет работать. 

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

Правка:

Поскольку меню было создано с помощью Joomla, я не мог настроить только один из пунктов меню. И даже если бы я мог, я не чувствовал, что решение javascript было бы уместным. В итоге я «пометил» пункт меню стрелкой вне элемента menu-item. Не так хорошо, как хотелось бы, но все равно получилось хорошо.

83
Daniel

Лучшее решение, которое я нашел, это CSS Styling:

#reflection_overlay {
    background-image:url(../img/reflection.png);
    background-repeat:no-repeat;
    width: 195px;
    pointer-events:none;
}

Атрибут pointer-events работает довольно хорошо и прост.

213
DZenBot

Я сделал это, и он работает в Firefox 3.5 на Windows XP. Он показывает поле с текстом, наложением изображения и прозрачным элементом над ним, который перехватывает все клики.

<div id="menuOption" style="border:1px solid black;position:relative;width:100px;height:40px;">
sometext goes here.
<!-- Place image inside of you menu bar link -->
<img id="imgOverlay" src="w3.png" style="z-index:4;position:absolute;top:0px;left:0px;width:100px;height:40px;" \>
<!-- Your link here -->
<a href="javascript:alert('Hello!')" >
<div id="mylinkAction" style="z-index:5;position:absolute;top:0px;left:0px;width:100px;height:40px;">
</div>
</a>
</div>

Что я сделал: Я создал div и изменил его размер в соответствии с размером меню, равным 100x40px (произвольное значение, но оно помогает с иллюстрацией примера).

У div есть наложение изображений и наложение ссылок. Ссылка содержит div, размер которого совпадает с div 'menuOption'. Таким образом, пользовательский щелчок фиксируется по всему блоку.

Вам нужно будет предоставить собственное изображение при тестировании. :)

Предостережение: Если вы ожидаете, что ваша кнопка меню будет реагировать на взаимодействие с пользователем (например, изменение цвета для имитации кнопки), то вам потребуется дополнительный код, присоединенный к JavaScript, который вы будете вызывать для тега, этот дополнительный код может обратитесь к элементу menuOption через DOM и измените его цвет.

Кроме того, я не знаю другого способа, чтобы вы могли принять событие щелчка и зарегистрировать его в элементе под видимым элементом страницы. Я попробовал это и этим летом, и не нашел другого решения, кроме этого.

Надеюсь это поможет.

PS: Запись событий в quirksmode прошла долгий путь, чтобы помочь мне понять, как события ведут себя в браузерах.

2
Mike Mytkowski

Присвойте кнопке более высокое свойство z-index, чем нарисованное вручную изображение:

<img src="hand_drawn_image.gif" style="z-index: 4">
<a href="#" style="z-index: 5"></a>

тем не менее, убедитесь, что вы протестировали его во всех основных браузерах. IE интерпретирует z-index иначе, чем FF . Для того, чтобы кто-то придумал больше подробностей, вам нужно было бы опубликовать больше информации, лучше подойдет ссылка.

1
Pekka 웃

Основываясь на том, что сказал Пекка Гайзер, я думаю, что будет работать следующее. Взяв его пример и переделав его:

<a href="#" style="z-index: 5">
    <!-- Place image inside of you menu bar link -->
    <img src="hand_drawn_image.gif" style="z-index: 4">
    <!-- Your link here -->
</a>

Здесь вы должны иметь возможность поместить событие в нижележащий a-тег и, если ваше изображение не имеет события, инициирует захват (браузеры! IE) и затем убивает распространение события.

Если вам нужна дополнительная помощь, сообщите нам немного больше о ситуации.

0
jeremyosborne

Если изображение будет располагаться статически, вы можете зафиксировать событие щелчка по изображению, когда оно всплывает, поместив тег img внутри элемента элемента меню.

<div onclick="menuclick()">
  <img src="overlay.png" style="position:absolute;" />
</div>
0
bogphanny