Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Универсальный GrayScale с плавной работой (затухание и проявление), принцип работы? (https://javascript.ru/forum/jquery/35765-universalnyjj-grayscale-s-plavnojj-rabotojj-zatukhanie-i-proyavlenie-princip-raboty.html)

master_alf 21.02.2013 15:02

Универсальный GrayScale с плавной работой (затухание и проявление), принцип работы?
 
Приветствую.
Появилась задача сделать скрипт. который бы делал картинки на сайте серыми по-умолчанию (т.е. после загрузи страницы) и цветными при наведении мышкой. Универсального рецепта, который одинаково бы работал во всех браузерах (читай в IE тоже) - не нашел. Если кто-то знает такой скриптег - прошу подсказать. Но это лишь быстрый способ решения проблемы...

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

Я могу сделать черно-белую картинку по наведению/загрузке страницы - не проблема. Но не понимаю как сделать плавный переход от черно-белого состояния к цветному. Каким образом осуществляются подобные плавные переходы? Наложить невидимую цветную картинку поверх серой, и просто плавно проявлять? Т.е. через opacity? Или есть более адекватные и красивые методы?

Если предложенный мною вариант адекватен, то подскажите, пожалуйста, как в Jquery работать с таймерами? Ибо эту часть понимаю плохо :(

Спасибо.

ksa 21.02.2013 15:31

Цитата:

Сообщение от master_alf
предложенный мною вариант адекватен

Вполне... :yes:

Цитата:

Сообщение от master_alf
как в Jquery работать с таймерами?

Там есть эффекты, например
http://jquery-docs.ru/Effects/animat...easingcallback

master_alf 22.02.2013 14:46

Почти написал, судя по всему... но прошу помощи. Не получается собрать всё воедино. здесь выложил результат работы, вопросы следующие:
  1. Гугл Хром выдает багу, если я создание черно-белых копий вешаю на document.ready(). гугл показал, что ему не нравится что картинки не догрузились. Как победить - не понял, потому пока перевесил всё на кнопку.
  2. Не могу понять как правильно в функции прицепленные на hover передать указатель на ту картинку, на которую будет наведена мышь...
Как это всё победить? :(

ksa 22.02.2013 15:02

Цитата:

Сообщение от master_alf
Как это всё победить?

С помощью простых тестовых примеров, которые выкладывай прямо тут...

master_alf 22.02.2013 15:15

Как раз проблема в том, что по-отдельности у меня все работало :(
<script type="text/javascript">
        $(document).ready(function() { 
               $('.gray').hover(hoverIn(this), hoverOut());});
       });
    </script>

Не могу понять как правильно передать указатель на картинку для функции hover, если я передаю this - то передается ссылка на файл (на локальном компе ссылка передается именно на файл html. Вида file:///d:/garbage/.../file.html
Если не передаю ничего, а просто в функции вызываемой hover-ом используют $(this).animate() - то скрипт падает с ошибками. Вывод alert(this) показывает object window.
Как передать внутрь функции вызывающей анимацию ссылку на конкретную картинку? Ибо селектором получить нужный элемент - нереально. На сайте картинок для которых пишется скрипт будет много, и взять конкретную по селектору - невозможно.

master_alf 22.02.2013 15:40

Вопрос снят - нашел косяк. И в целом сделал иначе - перевесил привязку hoverа на момент создания элемента. Плюс, как оказалось, нужно делать не
$('.gray').hover(hoverIn(), hoverOut());
а
$('.gray').hover(hoverIn, hoverOut);


Теперь разбираюсь с вызовом функции в правильный момент...

ksa 22.02.2013 21:28

Цитата:

Сообщение от master_alf
как оказалось, нужно делать не
$('.gray').hover(hoverIn(), hoverOut());
а
$('.gray').hover(hoverIn, hoverOut);

Можно и так

$('.gray').hover(function (){
   hoverIn();
}, function (){
   hoverOut();
});

danik.js 23.02.2013 12:04

Цитата:

Сообщение от ksa
Можно и так

$('.gray').hover(function (){
   hoverIn();
}, function (){
   hoverOut();
});


А еще можно так:

$('.gray').hover(function (){
   (function(){ hoverIn() })();
}, function (){
   (function(){ hoverOut() })();
});

Но.. только зачем?

ksa 23.02.2013 13:17

Цитата:

Сообщение от danik.js
только зачем?

В моём случае в те функции можно передать параметры.

danik.js 23.02.2013 13:35

Цитата:

Сообщение от ksa
В моём случае в те функции можно передать параметры.

$('.gray').hover(
    $.proxy(hoverIn, this, arg1, arg2)),
    $.proxy(hoverOut, this, arg1, arg2))
);

ES5:
$('.gray').hover(
    hoverIn.bind(this, arg1, arg2),
    hoverOut.bind(this, arg1, arg2)
);

Но да, анонимные функции тож довольно удобно.


Часовой пояс GMT +3, время: 14:24.