Используя Javascript, как сделать отдельные подписи для каждого из моих изображений в галерее лайтбоксов?

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

Какой код javascript мне не хватает, чтобы у моих отдельных изображений были отдельные подписи?

Вот часть моего html-тела:

<h1> My Photo Gallery </h1>


 <div id="back" onClick="Box();"> 
 </div>


 <div id="fore"> 

 <img src="daisyl.jpg" id="changeImg">

 <h2>Caption One</h2>

 </div>


 <div id="thumbnails"> 

 <img src="daisy.jpg" height="150px" width="150px" class="small"   onClick="lightBox('daisy.jpg');">
 <img src="zigl.jpg" height="150px" width="150px" class="small" onClick="lightBox('zigl.jpg');">
 <img src="cork.jpg" height="150px" width="150px" class="small" onClick="lightBox('cork.jpg');">                        <img src="tri.jpg" height="150px" width="150px" class="small" onClick="lightBox('tri.jpg');">

 </div>

У меня есть четыре изображения. На данный момент под моим «передним» DIV все они имеют одинаковую подпись «Caption One». Для ваших примеров я буду называть четыре подписи: «Заголовок один», «Заголовок два… и так далее :)

Мой javascript:

<script type="text/javascript">

function lightBox(imgNumber){
   var img = document.getElementById('changeImg');
   img.src = imgNumber;

   document.getElementById('back').style.display = "block";
   document.getElementById('fore').style.display = "block";
 }

function Box(){
  document.getElementById('back').style.display = "none";
  document.getElementById('fore').style.display = "none";
}


</script>

Если вы можете помочь мне, это было бы очень признательно!! Я думаю, что я дал достаточно кода для работы, но если нет, дайте мне знать :)

Вот моя скрипка, лайтбокс не работал у меня, но может у вас, он работает у меня вне jsfiddle :)

http://jsfiddle.net/5anutL1e/


person user3594463    schedule 24.11.2014    source источник
comment
не могли бы вы предоставить скрипку, пожалуйста   -  person Sai    schedule 24.11.2014
comment
сразу после вашего img.src=imgnumber; попробуйте добавить эту строку document.getElementById('fore h2').innerHTML=imgNumber; Я тут просто мысли вслух. вот не могу попробовать..   -  person Sai    schedule 24.11.2014
comment
@Sai Мне жаль, что я пытался создать там jsfiddle, но, к сожалению, я не могу заставить свои изображения работать в нем, спасибо за помощь, к сожалению, не сработало, мои миниатюры не были доступны для кликов после того, как я ввел этот код в   -  person user3594463    schedule 24.11.2014
comment
Используйте уже размещенные изображения. Проверьте этот сайт с изображениями-заполнителями. Вы можете использовать любой размер: lorempixel.com Например, изображения 200x200: lorempixel.com/200/200/sports/1 lorempixel.com/200/200/sports/2 Теперь вы можете создать JSFiddle, чтобы я мог вам помочь.   -  person Michael Money    schedule 25.11.2014
comment
добавил скрипку в мой вопрос :)   -  person user3594463    schedule 25.11.2014


Ответы (2)


Рабочий пример ниже. Я добавил заголовок, так что теперь ваш лайтбокс получает описание из тега ALT. Это некрасивый код, но я постарался упростить его для вас. В будущем я рекомендую использовать jQuery для таких функций :)

JSFiddle — http://jsfiddle.net/cx20mdzm/

    <html>
<head>
    <title>Gallery</title>
<style>
    body{
        background-color: white;
        margin: 0;
        padding: 0;
    }

    h1{
        margin-left: 40px;
        margin-top: 40px;
        font-size: 40px;
        font-family: 'Pacifico', cursive;
    }

    p {
        margin-left: 40px;
        margin-right: 100px;
    }

    #thumbnails{
        margin-left: 40px;
        margin-top: 40px;
        margin-bottom: 40px;
    }

    .small{
        padding-right: 10px;
    }

    #fore{
        display: none;
        border: 1px solid white;
        background-color: white;
        height: 550px;
        width: 500px;
        margin-left: -280px;
        margin-top: -290px;
        left: 50%;
        top: 50%;
        position: fixed;
        padding: 10px;
    }

    #back {
        width: 100%;
        height: 3000px;
        background-color: black;
        position: fixed;
        opacity: 0.8;
        -moz-opacity:0.8;
        -webkit-opacity:0.8;
        display: none;
        cursor: pointer;
        margin-top: -200px;
    }

    h2{
        font-family: 'Pacifico', cursive;
        margin-top: -5px;
    }
</style>
</head>
<body>
<h1> My Photo Gallery </h1>

<div id="back">
</div>

<div id="fore" style="display:none;">
    <img src="http://lorempixel.com/output/people-q-c-500-500-4.jpg" id="changeImg">
    <h2 id="caption">Caption One</h2>
</div>

<div id="thumbnails">
    <img id="thumb1" alt="description 1" src="http://lorempixel.com/output/people-q-c-500-500-4.jpg" height="150px" width="150px" class="small">
    <img id="thumb2" alt="description 2" src="http://lorempixel.com/output/abstract-q-c-500-500-5.jpg" height="150px" width="150px" class="small">
    <img id="thumb3" alt="description 3" src="http://lorempixel.com/output/fashion-q-c-500-500-6.jpg" height="150px" width="150px" class="small">
    <img id="thumb4"  alt="description 4"src="http://lorempixel.com/output/nature-q-c-500-500-5.jpg" height="150px" width="150px" class="small">
</div>

<p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ac est rutrum, eleifend tortor consectetur, pulvinar risus. Nunc auctor mattis turpis, vitae tempus leo gravida eu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam nec augue mi. Sed eu vehicula libero. In at dictum mi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus vitae commodo eros, quis fermentum elit. Cras id egestas diam, eu commodo augue.
</p>

<p>
    Donec magna metus, dictum vitae dapibus eu, interdum id libero. Phasellus ut velit vehicula, faucibus ipsum eu, iaculis nunc. Nam venenatis vel ipsum vitae posuere. Curabitur pellentesque erat est, fringilla sollicitudin felis volutpat id. Vestibulum condimentum ex vitae blandit lacinia. Donec non nunc auctor, luctus mi ac, pretium nisl. In eu arcu a enim facilisis varius. Nulla ullamcorper, lorem nec cursus porta, ligula arcu fermentum nunc, et sollicitudin tellus magna ac mi. Fusce faucibus fermentum nibh id pulvinar. In ornare venenatis placerat. Curabitur varius rhoncus neque. Duis lobortis, quam ac iaculis gravida, lectus dui tristique dui, sed commodo nunc nibh in ex.
</p>
<script>

    var thumb1 = document.getElementById("thumb1");
    var thumb2 = document.getElementById("thumb2");
    var thumb3 = document.getElementById("thumb3");
    var thumb4 = document.getElementById("thumb4");
    var back = document.getElementById("back");
    var fore = document.getElementById("fore");
    var btn = document.getElementById("btn");
    var what = document.getElementById("what");



    thumb1.addEventListener("click", function() {
        lightBox(thumb1.src,thumb1.getAttribute('alt'));
    }, false);
    thumb2.addEventListener("click", function() {
        lightBox(thumb2.src,thumb2.getAttribute('alt'));
    }, false);
    thumb3.addEventListener("click", function() {
        lightBox(thumb3.src,thumb3.getAttribute('alt'));
    }, false);
    thumb4.addEventListener("click",  function() {
        lightBox(thumb4.src,thumb4.getAttribute('alt'));
    }, false);
    back.addEventListener("click", Box, false);




    function lightBox(imgSource,imgCaption){
        var preview = document.getElementById('changeImg');
        var caption = document.getElementById('caption');
        caption.innerHTML = imgCaption;
        preview.src = imgSource;
        back.style.display = "block";
        fore.style.display = "block";
    };

    function Box(){
        back.style.display = "none";
        fore.style.display = "none";
    }
</script>


</body>
</html>
person Michael Money    schedule 25.11.2014
comment
Последний вопрос :) Если бы я должен был добавить кнопку «x» в галерею, которая закрывает изображение после нажатия, где вы рекомендуете мне разместить его, и какой js мне понадобится для этого? - person user3594463; 25.11.2014
comment
Добавить кнопку закрытия не проблема. Это был бы чистый HTML+CSS. Вам нужно создать два три новых контейнера (div), куда вы вставляете свой символ [X]. После этого добавьте CSS к этим элементам div, чтобы они выглядели как кнопки. Это было бы все. Проверьте рабочий JSFiddle. Я сделал для вас пример и немного его прокачал - jsfiddle.net/cx20mdzm/1 - person Michael Money; 26.11.2014

Это зависит от того, какой плагин лайтбокса вы используете. Вы можете попробовать с атрибутом ALT. Это настоятельно рекомендуется для SEO. Как и просил Сай, вы должны предоставить пример JSFiddle. В противном случае вам было бы трудно помочь.

 <img alt="This is you caption" src="daisy.jpg" height="150px" width="150px" class="small"   onClick="lightBox('daisy.jpg');">
person Michael Money    schedule 24.11.2014
comment
Спасибо, Майк, это сработает, если я поставлю свою подпись под всеми моими фотографиями, но я хочу сделать разные подписи для каждой. Я не использую плагин лайтбокса, сделал его сам с помощью css и javascript, я попробую еще раз с jsfiddle, но, к сожалению, он не будет работать с моими изображениями:/ - person user3594463; 25.11.2014