03.06.10

Пример эффекта черно-белого изображения на jQuery и CSSС помощью нехитрой манипуляции, описанной в данном посте, вы сможете с помощью небольшого количества CSS-кода и пары строк кода на jQuery сделать очень красивый эффект черно-белого изображения.

Несмотря на то, что для страниц с большим количеством фотографий данный способ будет малоэффективным из-за проблем с производительностью (это по большей части касается такого замечательного браузера, как Internet Explorer), его можно с успехом применять в тех частях сайта, где такой эффект будет уместен (например с помощью такой технологии можно организовать красивейший просмотр ваших работ в портфолио, или каком-нибудь фотоальбоме).

Каркас из HTML

XHTML
1
2
3
4
5
6
<ul class="gallery">
    <li>
        <a class="thumb" href="#"><span><img src="image.gif" alt="" /></span></a>
<h2><a href="#">Image Name</a></h2>
</li>
</ul>

Стоит заметить, что каждое изображение обернуто в тег <span>. Данный тег необходим для того, чтобы была возможность отсечь только ту часть изображения, которая нам нужна (с помощью CSS-свойства overflow:hidden). Посмотрите на изображение ниже, чтобы лучше понять это:

Свойство CSS overflow:hidden;

Добавляем CSS

Стили у нас будут стандартными для практически любой галереи. Но за одним исключением – свойство overflow у элемента span будет установлено как hidden (об этом я писал выше).

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
ul.gallery {
    width: 600px;
    list-style: none;
    margin: 0; padding: 0;
}
ul.gallery li {
    float: left;
    margin: 10px; padding: 0;
    text-align: center;
    border: 1px solid #ccc;
    -moz-border-radius: 3px;
    -khtml-border-radius: 3px;
    -webkit-border-radius: 3px;
    display: inline;
}
ul.gallery li a.thumb {
    width: 204px;
    height: 182px;
    padding: 5px;
    border-bottom: 1px solid #ccc;
    cursor: pointer;
}
ul.gallery li span {
    width: 204px;
    height: 182px;
    overflow: hidden;
    display: block;
}
ul.gallery li a.thumb:hover {
    background: #333;
}
ul.gallery li h2 {
    font-size: 1em;
    font-weight: normal;
    text-transform: uppercase;
    margin: 0; padding: 10px;
    background: #f0f0f0;
    border-top: 1px solid #fff;
}
ul.gallery li a {text-decoration: none; color: #777; display: block;}

jQuery – добавляем анимацию

Будем считать, что сама библиотека у вас уже подключена, поэтому перейдем сразу к делу.
Реализация нашего плана будет такова: мы постепенно затеним картинку (эффект FadeOut) и добавим к элементу <a> фоновое изображение. Используя CSS спрайты, мы спозиционируем изображение на “передний план” таким образом, чтобы черно-белая картинка стала видна нам.
Итак, код:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$(document).ready(function() {
    $("ul.gallery li").hover(function() { //При наведении мыши
        var thumbOver = $(this).find("img").attr("src"); //Получить адрес картинки на сервере
        //установить эту картинку как фон ссылки, в которой картинка находится
        $(this).find("a.thumb").css({'background' : 'url(' + thumbOver + ') no-repeat center bottom'});
        //Эффект FadeOut (прозрачность стремиться к 0)
        $(this).find("span").stop().fadeTo('normal', 0 , function() {
            $(this).hide() //Скрыть изображения после изменения прозрачности
        });
    } , function() { //когда мышь вышла за пределы изображения
        //Восстановить прозрачность изображения
        $(this).find("span").stop().fadeTo('normal', 1).show();
    });
});

Ну вот собственно и все. Напоследок хочу привести демо-версию эффекта черно-белого изображения при помощи CSS и jQuery

Комментарии

  1. FF 3.6 – не пашет )

  2. Chrome 10 – не пашет =\

  3. Chrome 10 – нестабильная версия, текущая стабильная на момент написания комента – 8-я. Так что ничего слышать не хочу.

  4. на восьмом хроме не пашет

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>