2015-06-09 2 views
4

У меня есть изображение, а поверх этого изображения - еще одно меньшее изображение. При щелчке первого изображения появляется второй, и он исчезает при повторном нажатии первого изображения. Моя проблема заключается в том, когда второе изображение появляется над первым, оно делает область, которую он покрывает первым изображением, не имеет значения. Можно ли сделать так, чтобы первое изображение можно было щелкнуть по второму изображению?Сделайте HTML-изображение «click-see-through»

Это HTML для второго изображения (оно генерируется в PHP):

Echo '<img src="images/tick.png" id="tick' . $i .'" class="hidden" style="position: absolute; top: 0px; left: 70%;"/>'; 
+0

должен ли вид изображения поверх другого изображения? –

+0

где находится ваш JavaScript? Почему вы не используете пузырьки? – smnbbrv

+1

Здравствуйте, просто вопрос: если ваше второе изображение перекрывает первое, не проще ли щелкнуть по второму изображению, чтобы оно исчезло? Таким образом, поведение будет следующим: 1-ый щелчок изображения -> сделать 2-й, 2-й щелчок изображения -> сделать его исчезающим. Тогда у вас будет естественный пользовательский интерфейс. Быстрый фрагмент кода на вашем php: 'Echo '';' – user1713964

ответ

3

Просто поместите оба изображения в контейнере div и прикрепить обработчик событий к click, что вместо увеличения изображения. Таким образом, вы можете просто использовать событие event bubbling (который недоступен на большом изображении, так как он не может иметь дочерние элементы, например, меньшее изображение).

Найти рабочее решение здесь:

https://jsfiddle.net/6nnwy3xw/

$(document).ready(function() { 
 
    $('.imgcontainer').on('click', function() { 
 
     $(this).toggleClass('toggleImg'); 
 
    }); 
 
})
.imgcontainer { 
 
    height: 300px; 
 
    width: 300px; 
 
    position: relative; 
 
} 
 

 
.imgcontainer img:first-child { 
 
    display: block; 
 
    height: 300px; 
 
    width: 300px; 
 
} 
 

 
.imgcontainer img+img { 
 
    position: absolute; 
 
    top: 50px; 
 
    left: 50px; 
 
    opacity: 0; 
 
    transition-duration: 0.3s; 
 
} 
 

 
.imgcontainer.toggleImg img+img { 
 
    opacity: 1; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="imgcontainer"> 
 
    <img src="http://lorempixel.com/300/300" /> 
 
    <img src="http://lorempixel.com/200/200" /> 
 
</div>

Я предполагаю, что ваш вариант использования является своего рода замена флажок элемента? В этом случае, это может также представлять интерес для Вас:

Use images like checkboxes

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

2

Если я правильно понял вопрос, что вы описываете правильно, вы могли бы попытаться повернуть указатель события от за секунду образ, который часто отображается над щелчка-мишень:

.two { pointer-events: none; } 

Обратите внимание, что это поддерживается только с HTML в Internet Explorer 11 и выше (а также в Chrome и Firefox) , Для SVG поддержка была доступна в IE 9. Это может быть достаточно для работы, если необходимо.

Fiddle: http://jsfiddle.net/tbqxjp19/

Для лучшей поддержки вы должны переместить ваш обработчик к элементу, который не будет обструкции, и как таковой всегда будет работать, чтобы переключать видимость второго изображения:

<div class="images"> 
    <img src="http://placehold.it/100x100" class="one" /> 
    <img src="http://placehold.it/100x100/000000" class="two" /> 
</div> 
document.querySelector(".images").addEventListener("click", function() { 
    this.classList.toggle("toggled"); 
}); 

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

.toggled .two { 
    opacity: .1; 
} 

Fiddle: http://jsfiddle.net/tbqxjp19/1/

+0

Хороший ответ - несмотря на то, что я ответил за 6 минут до вас, заменив jQuery на vanilla JS. Некоторые кредиты были бы хороши. – connexo

+0

Извините? Посмотрите на истории редактирования. Я предоставил свой код, прежде чем вы сделали свой. Независимо от того, это не конкурс :) – Sampson

+0

И вы уверены, что это не было вызвано моим комментарием по самому вопросу? Просто спрашиваю. – connexo

0

Попробуйте это, если вы в порядке с помощью jquery-решения.

HTML

<img src="images/large.png" class ="image" id="image1" style="position: absolute; top: 0px; left: 0px;" /> 
<img src="images/small.png" id="image2" class ="image" style="position: absolute; top: 0px; left: 0px; z-index:10;" /> 

CSS

.hiddenimage{ 
display:none; 
} 

JQuery

$(".image").click(function(){ 
    ("#image2").toggleClass("hiddenimage"); 
}) 
Смежные вопросы