Подписи к изображениям Jquery

Я пытаюсь найти простой способ с помощью jquery добавить прозрачную подпись к выбранным изображениям, которые либо скользят, либо исчезают, используя атрибут alt или title (в зависимости от того, что лучше), который также не добавляет дополнительные div.

У кого-нибудь есть простой способ сделать это, о котором они могут думать?


person user1031508    schedule 20.11.2011    source источник
comment
ответ с jquery и css всегда: добавьте еще один div. Почему вы не хотите добавить еще один div?   -  person themerlinproject    schedule 20.11.2011
comment
Я думал, что это может быть так, во всяком случае, я просто надеялся, что смогу добавлять подписи, не затрагивая мой текущий css.   -  person user1031508    schedule 20.11.2011
comment
Вместо этого вы могли бы просто использовать псевдоэлементы CSS?   -  person Nightfirecat    schedule 20.11.2011
comment
очень верно, было бы лучше добавить новый элемент через html или jquery?   -  person user1031508    schedule 20.11.2011
comment
Например: Возьмем, к примеру, этот код: $(document).ready(function() { $('img').each(function() { $(this).wrap('<div class="caption"></div>').after('<div>' + $(this).attr('alt') + '</div>'); $('.caption').width($(this).width()).children('div').each(function(){ $(this).css({width: $(this).siblings('img').width() - 10, opacity: 0, display: 'block'}); }); }); $('.caption').hover( function() {$(this).children('div').stop().fadeTo(500, 0.7);}, function() {$(this).children('div').stop().fadeOut(500);} ); }); Можно ли адаптировать это с помощью псевдоэлемента?   -  person user1031508    schedule 20.11.2011
comment
Если у вас есть ответ, напишите! Комментарии не место для обширного кода. Вы можете сами ответить на свои вопросы. Или обновите исходный пост, добавив пример одной идеи.   -  person Greg Pettit    schedule 20.11.2011


Ответы (1)


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

Посмотреть рабочий скрипт

Начните с вашего единственного пустого div:

<div id='caption'></div>

JS: слушатели событий при наведении курсора мыши и наведении курсора мыши, чтобы расположить div, написать заголовок и затемнить его.

$('img').hover(function(){
    var yoffset = $(this).height();
    var width = $(this).width();
    var coords = $(this).offset();

    $('#caption').html($(this).data('caption'))
        .width(width)
        .animate({
            top: coords.top + yoffset - $('#caption').height(),
            left: coords.left            
        }, 0, function(){
            $(this).animate({
                opacity: 'show'
            }, 200);   
        });
});

$('img').mouseout(function(){
    $('#caption').animate({
        opacity: 'hide'
    }, 100);   
});

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

#caption {
    position: absolute;
    z-index: 99;
    display: none;
    background: rgba(0,0,0,0.6);
    color: white;
    padding: 2px;  
}

Что касается того, используете ли вы атрибуты title или alt, вы можете использовать .attr вместо .data, но таким образом вы можете указать текст заголовка, ничего не повредив. Атрибуты данных HTML5 используются с jQuery следующим образом.

<img src='#' data-caption='This is some caption text' />

а затем доступ так:

$('img').data('caption'); //returns our caption text 
person sicks    schedule 20.11.2011
comment
Мне нравится эта идея... но один вопрос: как браузер поддерживает заголовок данных? - person user1031508; 20.11.2011
comment
Он работает во всем, пока jquery обновлен. Javascript может анализировать пользовательские атрибуты в элементе, просто он не совместим с WC3. HTML5 делает их совместимыми с атрибутом данных, но, кроме соответствия WC3, нет никакой разницы между использованием метода HTML5 или вызовом .attr('frank') с frank='frank' внутри элемента. - person sicks; 20.11.2011
comment
Хорошо, спасибо, я использую это как свой ответ ... поэтому использование заголовка данных в браузерах, которые его не поддерживают, но не будут совместимы с WC3, это в основном то, что вы говорили? Кроме того, как мне отредактировать ваш код, чтобы заголовок скользил вверх/вниз, а не исчезал? - person user1031508; 20.11.2011
comment
Не забудьте отметить мой ответ галочкой :D изменить opacity на height в разделе .animate. Если вы хотите увидеть все возможности анимации, ознакомьтесь с документацией по анимации jQuery. - person sicks; 20.11.2011
comment
и да, он будет работать в браузерах, которые его не поддерживают, просто официально он не будет кодом жалобы WC3. - person sicks; 20.11.2011