Обнаружил на днях симпатичный эффект увеличения миниатюр изображений с помощью jQuery. Немного оптимизировал увиденное решение и решил опубликовать для общего пользования. А для личностей, которые негативно относятся к повсеместному использованию javascript, добавил вариант без использования оного.

HTML разметка представляет собой список, состоящий из миниатюр:

<ul id="gallery">
<li><a href="" title="Фото 1"><img src="spring.jpg" width="100" height="100" alt="" /></a></li>
<li><a href="" title="Фото 2"><img src="spring2.jpg" width="100" height="100" alt="" /></a></li>
<li><a href="" title="Фото 3"><img src="spring3.jpg" width="100" height="100" alt="" /></a></li>
<li><a href="" title="Фото 4"><img src="spring4.jpg" width="100" height="100" alt="" /></a></li></ul>

Т.к. в первом случае описание изображения создаётся и отображается с помощью скрипта, то для варианта без javascript необходимо после миниатюры добавить элемент span c этим описанием.

CSS стили:

#gallery{
    list-style-type: none;
    height: 1%;
    width: 500px;
    margin: 0 auto;
    font-size: 0.75em;
    margin-bottom: 20px
}
#gallery:after{ /* Чтобы список «охватывал» вложенные элементы */
    content:"";
    display:block;
    clear:both
}
    #gallery li{
        margin:0 10px 10px 0;
        float:left
    }
        #gallery li a{
            position:relative;
            display:block;
            float:left;
            width:110px;
            height:110px;
            text-decoration:none
            }
        #gallery li img{
            padding:4px;
            background:#f0f0f0;
            border:solid 1px #ddd;
            position:absolute;
            left:0;
            top:0;
            -ms-interpolation-mode:bicubic /* Для нормального масштабирования изображений в IE6 и 7 */
        }
        #gallery li span{
            display:block;
            padding:5px;
            background:#f0f0f0;
            color:#666;
            position:absolute;
            top:-35px;
            left:-35px;
            width:170px
        }

А следующие стили нужно добавить в случае использования варианта без javascript:

#gallery li a:hover{
    z-index:100;
    display:inline
}
    #gallery li a:hover img{
        left:-40px;
        top:-40px;
        width:180px;
        height:180px
    }
    #gallery li a span{
        opacity:0.7; /* Если нужно сделать блок с информацией прозрачным */
        filter:alpha(opacity=70); /* Прозрачность в IE */
        visibility:hidden;
        cursor:pointer
    }
    #gallery li a:hover span{
        visibility:visible
    }

Далее необходимо подключить библиотеку jQuery и добавить следующий код:

$(document).ready(function(){
    $("#gallery a").hover(function() {
        $(this).css({'z-index' : '10'});
        $(this).find('img').stop()
        .animate({
            top: '-40px',
            left: '-40px',
            width: '180px',
            height: '180px'
        }, 400);
        $(this).append('<span>' + this.title + '</span>');
        $(this).find('span').hide();
        $(this).find('span').fadeIn(500);
        }, function() {
        $(this).css({'z-index' : '0'});
        $(this).find('img').stop()
        .animate({
            top: '0',
            left: '0',
            width: '100px',
            height: '100px'
        }, 250);
        $(this).find('span').remove();
    });
});

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

20 комментариев к статье «Эффект увеличения миниатюр»:

  1. ИМЯ (обязательно):

    перед .animate() надо писать .stop()

  2. Alex:

    Спасибо, запамятовал.

  3. даже в ie6 работает. прекрасно)

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

  4. Алексей:

    Спасибо тебе добрый человек! Как раз, то что искал – простенько и со вкусом!

  5. [...] Эффект увеличения миниатюр Обнаружил на днях симпатичный эффект увеличения миниатюр изображений с помощью jQuery. Немного оптимизировал увиденное решение и решил опубликовать дляя общего пользования. А для личностей, которые негативно относятся к повсеместному использованию javascript, добавил вариант без использования оного… [...]

  6. Tem@:

    Большое спасибо, это именно то, что я искал!!!

  7. Владимир:

    Большое спасибо! Долго искал что-либо подходящее и, наконец, нашел. Работает хорошо.

  8. Lantez:

    Подскажите как сделать чтобы комментарий картинки не показывался? И еще, у меня выпадающее меню css, попадает под миниатюры, именно под, а нужно поверх. Как это исправить?
    Спасибо! Скрипт полезный и доходчиво изложено!

    • Alex:

      Уберите из скрипта $(this).append('<span>' + this.title + '</span>');, а из стилей всё что относиться к span.

      Чтобы меню отоборажалось поверх используйте position и z-index.

  9. Lantez:

    Спасибо! Разобрался, всё работает.

  10. Lantez:

    На счет комментария, я не правильно изъяснился. Можно ли сделать чтобы при наведении (и увеличении) на картину, не появлялся alt (комментарий) к картинке? Если убрать это: $(this).append(» + this.title + »); , то исчезает и alt и title, а нужно только alt. Заранее спасибо.

    • Alex:

      $(this).append(» + this.title + »); эта часть всего лишь добавляет значение атрибута title ссылки в элемент span. Сам атрибут никуда не исчезает. А к атрибуту alt изображения это не касается.

  11. bush:

    Еще раз спасибо за эффект! У меня только одна проблема возникает, которую я все никак не могу решить, что делать если у меня в альбоме половина картинок, например: width: ‘80′, height: ‘110′ , а вторая width:’110′, height: ‘80′??? Получается, когда я навожу курсор у меня картинка либо сужается либо расширяется. Можно ли как-то прописать, чтоб размеры оставались стандартными. Например прописать высоту, а ширина, чтоб выставлялась автоматически….???? или может еще как-то?!
    Заранее спасибо!

  12. bush:

    Как вариант конечно можно. Даже смотрится терпимо! Спасибо! Наверно так и оставлю! так как уже перепробывал, все что в голову приходило!

  13. [...] Эффект увеличения миниатюр Обнаружил на днях симпатичный эффект увеличения миниатюр изображений с помощью jQuery. Немного оптимизировал увиденное решение и решил опубликовать для общего пользования. А для личностей, которые негативно относятся к повсеместному использованию javascript, добавил вариант без использования оного… [...]

  14. Natalie:

    Большое спасибо за Эффект увеличения миниатюр!!
    Подскажите, в Oper есть увеличение!. Однко, текст «фото 1″ отдельно, рядом с фото, и сама картинка без обрамления рамки :-(
    А в Explorer нет увеличения. Просто фотографии ( картинки).

  15. Слушайте, а можно чтобы текст был не на картинке, а рядом с ней? Т.е. чтобы он начинался там, где заканчивается изображение, не закрывая всю картинку?

Оставь комментарий: