после нажатия на картинку открыть её описание. html,css,js

160
31 мая 2018, 00:40

Допустим есть много много картинок (около 5000штук) и после нажатия одной из них открыватся модальное окно с описанием этой картинки.

// Get the modal 
var modal = document.getElementsByClassName('myModal'); 
 
// Get the button that opens the modal 
var btn = document.getElementsByClassName("myBtn"); 
 
// Get the <span> element that closes the modal 
var span = document.getElementsByClassName("close"); 
 
// When the user clicks the button, open the modal 
btn[0].onclick = function() { 
  modal[0].style.display = "block"; 
} 
 
// When the user clicks on <span> (x), close the modal 
//обрати внимание на индексы [N]  
span[0].onclick = function() { 
  modal[0].style.display = "none"; 
} 
//========================================================= 
// мои изменения 
// When the user clicks the button, open the modal 
btn[1].onclick = function() { 
  modal[1].style.display = "block"; 
} 
 
// When the user clicks on <span> (x), close the modal 
span[1].onclick = function() { 
  modal[1].style.display = "none"; 
} 
//========================================== 
// When the user clicks anywhere outside of the modal, close it 
window.onclick = function(event) { 
  if (event.target == modal) { 
    modal.style.display = "none"; 
  } 
}
/* The Modal (background) */ 
.modal { 
    display: none; /* Hidden by default */ 
    position: fixed; /* Stay in place */ 
    z-index: 1; /* Sit on top */ 
    padding-top: 100px; /* Location of the box */ 
    left: 0; 
    top: 0; 
    width: 100%; /* Full width */ 
    height: 100%; /* Full height */ 
    overflow: auto; /* Enable scroll if needed */ 
    background-color: rgb(0,0,0); /* Fallback color */ 
    background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ 
} 
 
/* Modal Content */ 
.modal-content { 
    position: relative; 
    background-color: #fefefe; 
    margin: auto; 
    padding: 0; 
    border: 1px solid #888; 
    width: 80%; 
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19); 
    -webkit-animation-name: animatetop; 
    -webkit-animation-duration: 0.4s; 
    animation-name: animatetop; 
    animation-duration: 0.4s 
} 
 
/* Add Animation */ 
@-webkit-keyframes animatetop { 
    from {top:-300px; opacity:0} 
    to {top:0; opacity:1} 
} 
 
@keyframes animatetop { 
    from {top:-300px; opacity:0} 
    to {top:0; opacity:1} 
} 
 
/* The Close Button */ 
.close { 
    color: white; 
    float: right; 
    font-size: 28px; 
    font-weight: bold; 
} 
 
.close:hover, 
.close:focus { 
    color: #000; 
    text-decoration: none; 
    cursor: pointer; 
} 
 
.modal-header { 
    padding: 2px 16px; 
    background-color: #5cb85c; 
    color: white; 
} 
 
.modal-body {padding: 2px 16px;} 
 
.modal-footer { 
    padding: 2px 16px; 
    background-color: #5cb85c; 
    color: white; 
}
<a href="#" class="myBtn"><img src='000948.png' title=' ' style='position:absolute; left:345px;   top:245px' ></a><div  class="modal myModal"><div class="modal-content"><div class="modal-header"><span class="close">×</span><h2>Интересные факты об этом...</h2></div><div class="modal-body"><p></p></div></div></div> 
 
<a href="#" class="myBtn"><img src='000948.png' title=' ' style='position:absolute; left:375px;   top:245px' ></a><div  class="modal myModal"><div class="modal-content"><div class="modal-header"><span class="close">×</span><h2>Интересные факты об этом...</h2></div><div class="modal-body"><p></p></div></div></div>

как должно выглядеть ##

Я пытался реализовать это, но происходит проблема с id (если много картинок, то они не открываются). Возможно ли это реализовать при помощи галереи фотографий?

красные квадраты - сами картинки. после нажатия на одну из картинок открывается модальное окно поверх всех картинок с описанием выбранной картинки.

Answer 1

Самую стремачную галерею придумал

На jQuery вешаем tabindex на все картинки и при клике центрируем

смотреть на весь экран

var elem = $("img"); 
 
elem.attr("tabindex", "-1"); 
 
elem.click(function() { 
  $(".galarea").toggleClass("o") 
})
* { 
  margin: 0; 
  padding: 0; 
} 
 
.galerea { 
  width: 80%; 
  max-width:600px; 
  margin: 50px auto; 
  overflow: hidden; 
  display: flex; 
  flex-wrap: wrap; 
  justify-content: center; 
} 
 
img { 
  transition: .4s; 
} 
 
img:focus { 
  width:250px; 
  position: absolute; 
  top: 50%; 
  left: 50%; 
  right: 0; 
  bottom: 0; 
  transform: translate(-50%, -50%); 
  outline: none; 
  box-shadow: 0 0 200px #000; 
} 
 
.o { 
  overflow-y: hidden; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
 
<div class="galerea"> 
  <img src="http://placehold.it/100/red" alt=""> 
  <img src="http://placehold.it/100/cc0000" alt=""> 
  <img src="http://placehold.it/100/ccc000" alt=""> 
  <img src="http://placehold.it/100/ccccc0" alt=""> 
  <img src="http://placehold.it/100/red" alt=""> 
  <img src="http://placehold.it/100/cc0000" alt=""> 
  <img src="http://placehold.it/100/ccc000" alt=""> 
  <img src="http://placehold.it/100/ccccc0" alt=""> 
  <img src="http://placehold.it/100/red" alt=""> 
  <img src="http://placehold.it/100/cc0000" alt=""> 
  <img src="http://placehold.it/100/ccc000" alt=""> 
  <img src="http://placehold.it/100/ccccc0" alt=""> 
  <img src="http://placehold.it/100/red" alt=""> 
  <img src="http://placehold.it/100/cc0000" alt=""> 
  <img src="http://placehold.it/100/ccc000" alt=""> 
  <img src="http://placehold.it/100/ccccc0" alt=""> 
  <img src="http://placehold.it/100/red" alt=""> 
  <img src="http://placehold.it/100/cc0000" alt=""> 
  <img src="http://placehold.it/100/ccc000" alt=""> 
  <img src="http://placehold.it/100/ccccc0" alt=""> 
  <img src="http://placehold.it/100/red" alt=""> 
  <img src="http://placehold.it/100/cc0000" alt=""> 
  <img src="http://placehold.it/100/ccc000" alt=""> 
  <img src="http://placehold.it/100/ccccc0" alt=""> 
  <img src="http://placehold.it/100/red" alt=""> 
  <img src="http://placehold.it/100/cc0000" alt=""> 
  <img src="http://placehold.it/100/ccc000" alt=""> 
  <img src="http://placehold.it/100/ccccc0" alt=""> 
  <img src="http://placehold.it/100/red" alt=""> 
  <img src="http://placehold.it/100/cc0000" alt=""> 
 
</div>

Вывод текста из data,с ответом помогли здесь

$(".item").attr("tabindex", "-1"); 
 
$('.item img').each((i, el) => { 
  const $img = $(el) 
  $img.parent().attr('data-caption', $img.attr('data-caption')) 
})
.item { 
  display: inline-block; 
  position: relative; 
  outline: none; 
} 
 
img { 
  display: block; 
} 
 
.item:focus:after { 
  content: attr(data-caption); 
  position: absolute; 
  width: 30vw; 
  padding: 20px; 
  display: block; 
  left: 50%; 
  top: 50%; 
  z-index: 100; 
  background: rgba(0, 0, 0, .5); 
  color: #fff; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
 
 
<div class="item"> 
  <img src="http://placehold.it/150/ff000" data-caption="некое описание  красной фото" alt="image1" /> 
</div> 
 
<div class="item"> 
  <img src="http://placehold.it/150/ccc000" data-caption="некое описание  жёлтой фото" alt="image1" /> 
 
</div>

READ ALSO
Подчеркивание строки таблицы

Подчеркивание строки таблицы

Как на картинке нижеНужно сделать чтобы линия была по середине

262
Нельзя изменить CSS стили в консоли

Нельзя изменить CSS стили в консоли

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

178
Добавить текст в поле textarea

Добавить текст в поле textarea

Есть обычное поле для ввода текста:

252