21.02.2013, 15:02
|
Аспирант
|
|
Регистрация: 08.04.2010
Сообщений: 34
|
|
Универсальный GrayScale с плавной работой (затухание и проявление), принцип работы?
Приветствую.
Появилась задача сделать скрипт. который бы делал картинки на сайте серыми по-умолчанию (т.е. после загрузи страницы) и цветными при наведении мышкой. Универсального рецепта, который одинаково бы работал во всех браузерах (читай в IE тоже) - не нашел. Если кто-то знает такой скриптег - прошу подсказать. Но это лишь быстрый способ решения проблемы...
Отрыв один такой скрипт, который работает не особо универсально, я заглянул внутрь и понял, что большой проблемы его поправить - нет. Но понимания джаваскрипта у меня полного нет. И проблема в том, что не понимаю какого рода информацию мне нужно искать... а вопрос вот в чем.
Я могу сделать черно-белую картинку по наведению/загрузке страницы - не проблема. Но не понимаю как сделать плавный переход от черно-белого состояния к цветному. Каким образом осуществляются подобные плавные переходы? Наложить невидимую цветную картинку поверх серой, и просто плавно проявлять? Т.е. через opacity? Или есть более адекватные и красивые методы?
Если предложенный мною вариант адекватен, то подскажите, пожалуйста, как в Jquery работать с таймерами? Ибо эту часть понимаю плохо
Спасибо.
|
|
21.02.2013, 15:31
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от master_alf
|
предложенный мною вариант адекватен
|
Вполне...
Сообщение от master_alf
|
как в Jquery работать с таймерами?
|
Там есть эффекты, например
http://jquery-docs.ru/Effects/animat...easingcallback
|
|
22.02.2013, 14:46
|
Аспирант
|
|
Регистрация: 08.04.2010
Сообщений: 34
|
|
Почти написал, судя по всему... но прошу помощи. Не получается собрать всё воедино. здесь выложил результат работы, вопросы следующие:
- Гугл Хром выдает багу, если я создание черно-белых копий вешаю на document.ready(). гугл показал, что ему не нравится что картинки не догрузились. Как победить - не понял, потому пока перевесил всё на кнопку.
- Не могу понять как правильно в функции прицепленные на hover передать указатель на ту картинку, на которую будет наведена мышь...
Как это всё победить?
|
|
22.02.2013, 15:02
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от master_alf
|
Как это всё победить?
|
С помощью простых тестовых примеров, которые выкладывай прямо тут...
|
|
22.02.2013, 15:15
|
Аспирант
|
|
Регистрация: 08.04.2010
Сообщений: 34
|
|
Как раз проблема в том, что по-отдельности у меня все работало
<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.
Как передать внутрь функции вызывающей анимацию ссылку на конкретную картинку? Ибо селектором получить нужный элемент - нереально. На сайте картинок для которых пишется скрипт будет много, и взять конкретную по селектору - невозможно.
|
|
22.02.2013, 15:40
|
Аспирант
|
|
Регистрация: 08.04.2010
Сообщений: 34
|
|
Вопрос снят - нашел косяк. И в целом сделал иначе - перевесил привязку hoverа на момент создания элемента. Плюс, как оказалось, нужно делать не
$('.gray').hover(hoverIn(), hoverOut());
а
$('.gray').hover(hoverIn, hoverOut);
Теперь разбираюсь с вызовом функции в правильный момент...
|
|
22.02.2013, 21:28
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от master_alf
|
как оказалось, нужно делать не
$('.gray').hover(hoverIn(), hoverOut());
а
$('.gray').hover(hoverIn, hoverOut);
|
Можно и так
$('.gray').hover(function (){
hoverIn();
}, function (){
hoverOut();
});
|
|
23.02.2013, 12:04
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от ksa
|
Можно и так
$('.gray').hover(function (){
hoverIn();
}, function (){
hoverOut();
});
|
А еще можно так:
$('.gray').hover(function (){
(function(){ hoverIn() })();
}, function (){
(function(){ hoverOut() })();
});
Но.. только зачем?
|
|
23.02.2013, 13:17
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,217
|
|
Сообщение от danik.js
|
только зачем?
|
В моём случае в те функции можно передать параметры.
|
|
23.02.2013, 13:35
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от 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)
);
Но да, анонимные функции тож довольно удобно.
|
|
|
|