2014-10-28 4 views
-1

Я новичок в веб-разработке, но очень увлечен им. Таким образом, в основном я создаю световой блок, в котором на экране будут отображаться эскизы изображений, и они будут больше по размеру, когда пользователь нажимает на них. Теперь, когда я хочу, чтобы пользователь зависал над изображениями галереи/эскизами, тогда какой-то текст должен появиться поверх текущего изображения, может быть какая-то анимация или в основном мышеловка, должно вызвать какое-то событие, но я не могу этого сделать. Текст должен быть добавлен динамически или может быть ранее сохранен в массиве или что-то в этом роде. Пожалуйста, взгляните на мой код и скажите мне, как его изменить, чтобы добиться такого эффекта, и если вы знаете лучший и простой способ сделать это, тогда не стесняйтесь делиться ими. Огромное спасибо!!Как переносить текст на изображения динамически с помощью javascript/jquery

HTML:

<div class="gallery"> 
    <ul id="images"></ul> 
    <div class="lightbox"> 
     <div class='limage'> 
     </div> 
     <div class='left'> 
     </div> 
     <div class='right'> 
     </div> 
     <div class='close'> 
      x 
     </div> 
    </div> 
</div> 

JAVASCRIPT:

var gallery_slider = new Array(); 
 
gallery_slider[0] = "im1.jpg"; 
 
gallery_slider[1] = "im2.jpg"; 
 
gallery_slider[2] = "im3.jpg"; 
 

 

 
function displayAllImages() { 
 
    var i = 0, 
 
     len = gallery_slider.length; 
 
    for (; i < gallery_slider.length; i++) { 
 

 
     var img = new Image(); 
 
     img.src = gallery_slider[i]; 
 
     img.style.width = '200px'; 
 
     img.style.height = '120px'; 
 
     img.style.margin = '3px'; 
 
     img.style.cursor = 'pointer'; 
 

 
     document.getElementById('images').appendChild(img); 
 
    } 
 
}; 
 

 

 
$(function() { 
 
    displayAllImages(); 
 
}); 
 

 

 

 
$(function() { 
 

 
    $('img').click(function() { 
 
     var hell = (this).src; 
 
     display(hell); 
 
    }); 
 
}); 
 

 
function display(hello) { 
 
    $('header').css('display', 'none'); /*for some other purposes*/ 
 
    $('.limage').html("<img src=" + hello + " >"); 
 
    $('.lightbox').css("display", "block"); 
 
    $('.lightbox').fadeIn(); 
 

 
    $('.right').click(function() { 
 
     var im = new Array(); 
 
     var x; 
 
     var p; 
 
     for (x = 0; x < gallery_slider.length; x++) { 
 
      im[x] = gallery_slider[x]; 
 
     } 
 
     for (p = 0; p < im.length; p++) { 
 
      if (im[p] == hello) { 
 
       break; 
 
      } else { 
 
       continue; 
 
      } 
 
     } 
 
     if (p >= (im.length - 1)) { 
 
      p = -1; 
 
     } 
 

 
     $('.limage').fadeOut(0); 
 
     $('.limage').html("<img src= " + im[p + 1] + ">"); 
 
     $('.limage').fadeIn(500); 
 
     hello = im[p + 1]; 
 
    }); 
 
    $('.left').click(function() { 
 
     var im = new Array(); 
 
     var x; 
 
     var p; 
 
     for (x = 0; x < gallery_slider.length; x++) { 
 
      im[x] = gallery_slider[x]; 
 
     } 
 
     for (p = 0; p < im.length; p++) { 
 
      if (im[p] == hello) { 
 
       break; 
 
      } else { 
 
       continue; 
 
      } 
 
     } 
 
     if (p == 0) { 
 
      p = (im.length); 
 
     } 
 

 
     $('.limage').fadeOut(0); 
 
     $('.limage').html("<img src= " + im[p - 1] + ">"); 
 
     $('.limage').fadeIn(500); 
 
     hello = im[p - 1]; 
 
    }); 
 
    $('.close').click(function() { 
 
     $('.lightbox').fadeOut(); 
 
     $('header').css('display', 'block'); /*for some other purposes*/ 
 
    }); 
 
};

CSS:

.gallery { 
 
    width: 100%; 
 
    height: 400px; 
 
    overflow: hidden; 
 
    margin: auto; 
 
} 
 
.gallery ul { 
 
    list-style: none; 
 
} 
 
.lightbox { 
 
    background-color: rgba(0, 0, 0, 0.3); 
 
    position: fixed; 
 
    top: 0; 
 
    left: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
    display: none; 
 
    z-index: 106; 
 
} 
 
.close { 
 
    color: #fff; 
 
    border: 1px solid #fff; 
 
    border-radius: 100px; 
 
    background-color: #000; 
 
    position: absolute; 
 
    top: 10px; 
 
    right: 20px; 
 
    padding: 10px; 
 
    font-family: firstfont; 
 
    font-size: 30px; 
 
    z-index: 101; 
 
    cursor: pointer; 
 
} 
 
.close:hover { 
 
    background-color: #ebebeb; 
 
    color: #000; 
 
} 
 
.left { 
 
    width: 50%; 
 
    height: 100%; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    cursor: pointer; 
 
} 
 
.right { 
 
    width: 50%; 
 
    height: 100%; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
    cursor: pointer; 
 
} 
 
.limage { 
 
    position: relative; 
 
    margin: auto; 
 
    top: 17%; 
 
    left: 15%; 
 
    max-width: 90%; 
 
    max-height: 90%; 
 
}

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

Jsfiddle: http://jsfiddle.net/psd6cbd7/1/

+0

К сожалению, ваш вопрос слишком широк для SO. Вы не получите слишком много полезных ответов, просто попросите «заставить его работать». Вместо этого попробуйте заставить его работать самостоятельно, а затем вернуться с * очень * конкретным вопросом, если вы застряли и не можете найти ответ на свой конкретный вопрос в другом месте в Интернете (подсказка: вы, вероятно, можете).В стороне, я вижу, вы иногда используете JQuery, а иногда нет (например, displayAllImages), я бы предложил придерживаться одного или другого для одного проекта. – oliakaoil

+0

Я пробовал и все еще пытаюсь. Я просто хочу, может быть, кто-то попытается запустить этот код и вернется с ответом или, по крайней мере, скажет мне, что это достойный способ выполнить требуемую задачу или нет. Этот код работает для отображения изображений в виде эскизов и в качестве слайдера в лайтбокс при нажатии на них. Я не могу понять, как добавить функциональность зависания в начальные миниатюры. P.S. displayAllImages - это пользовательская функция в jquery или я что-то не так? – Yomesh

ответ

0

Я предложил бы положить div внутри образа div, содержащего текст, а затем с помощью CSS, чтобы скрыть/показать.

HTML:

<div class="gallery"> 
     <ul id="images"></ul> 
     <div class="lightbox"> 
      <div class='limage'> 
       <div class=".caption">Caption here</div> 
      </div> 
      <div class='left'> 
      </div> 
      <div class='right'> 
      </div> 
      <div class='close'> 
       x 
      </div> 
     </div> 
    </div> 

CSS:

.limage { position: relative; } 
.caption { display: none; } 
.limage:hover .caption { display: block; position: absolute;} 
+0

Спасибо, но это не работает, так как изображения хранятся в массиве и добавляются к тегу ul через функцию, поэтому, если мы создаем div внутри изображения, то на каждом изображении может отображаться одна и та же подпись, но каждое изображение должно иметь другую подпись. Более того, я попробовал, но текст не отображается при наведении. – Yomesh

+0

Вы можете изменить содержимое div заголовка с помощью Javascript, используя свойство '.innerText'. Можете ли вы создать jsfiddle.net с кодом? – arcyqwerty

+0

Jsfiddle: http://jsfiddle.net/psd6cbd7/1/ – Yomesh

0

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

HTML:

<ul id="images"> 
</ul> 
<!-- assume this is the place that you want to display the caption --> 
<div id="caption"></div> 

Javascript:

var images = new Array(); 
images[0] = "p1.png"; 
images[1] = "p2.png"; 
images[2] = "p3.png"; 
images[3] = "p4.png"; 

var captions = new Array(); 
captions[0] = "Picture 1"; 
captions[1] = "Picture 2"; 
captions[2] = "Picture 3"; 
captions[3] = "Picture 4"; 

var x = $("#images"); 
var y = $("#caption"); 
const prefix = "image-"; 

, если вы используете HTML5:

for (var i = 0; i < images.length; i++) { 
    x.append("<img class='roll' src='" + images[i] + "' data-caption='" + captions[i] + "'>"); 
} 

$(".roll").mouseover(function(){ 
    //do whatever effect here when mouse over 
    y.html($(this).attr("data-caption")); 
}); 

Если вы хотите получить обратную совместимость:

for (var i = 0; i < images.length; i++) { 
    x.append("<img id='" + prefix + i + "' class='roll' src='" + images[i] + "'>"); 
} 

$(".roll").mouseover(function(){ 
    //do whatever effect here when mouse over 
    var index = $(this).attr("id").substring(prefix.length); 
    y.html(captions[index]); 
}); 

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

+0

Я опробовал свой метод (Jsfiddle: http://jsfiddle.net/psd6cbd7/5/), но все же наведение мыши не работает. Это наведение мыши или onmouseover? Оба не работают, и я использую массив, потому что, когда пользователь нажимает на изображение, src этого изображения сохраняется и сопоставляется с элементами массива, и как только позиция найдена, он используется для отображения следующего изображения/элемента массива, как в следующее изображение в слайд-шоу (im [p + 1]). Слайд-шоу работает как шарм, у меня просто возникают проблемы с начальными эскизами. Вы знаете более простой способ их отображения, пожалуйста, поделитесь. Спасибо огромное! – Yomesh

+0

Я просто просматриваю ваш код, перемещаю код 'mouseover' после' displayAllImages(); 'потому что, когда он запускается, изображение все еще не существует. Кроме того, положите 'var y = $ (" # caption ");' из 'displayAllImages()' else код внутри 'mouseover' не сможет ссылаться на переменную y. –