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 25.02.2013 16:55

Потестирую с разными картинками текущее решение, если даст где-то сбой, перепишу как ты сказал. Пока же - наконец-то работает! %)

danik.js 25.02.2013 18:07

Уже конечно намного лучше )
Цитата:

Сообщение от master_alf
$(this).each

Добавь впереди ключевое слово return, чтобы вернуть объект для продолжениия цепочки. То есть чтобы могло работать так:
$('img').makeGray().css('border': '1px solid');

Цитата:

Сообщение от master_alf
function() makeCopy(this);

Тут вы конечно втупили оба ))
Можно просто this.onload = makeCopy;
При событии load будет вызывана makeCopy, в которой this укажет на картинку.
Однако что будет если картинка уже загрузилась? Я не уверен что обработчик сработает. Поэтому нужно проверять - загрузилась ли картинка (через img.complete кажется, может для ишака иначе).
Цитата:

Сообщение от master_alf
'ms-filter'

А это еще зачем? Нет такого свойство. Префиксные начинаются с дефиса.
И еще раз спрашиваю - разве без этого всего в ишаке не работает? Ведь jQuery внутри уже сама использует нужные для ишака свойства при анимировании opacity...

master_alf 25.02.2013 21:52

Цитата:

Сообщение от danik.js (Сообщение 237071)
Уже конечно намного лучше )
Добавь впереди ключевое слово return, чтобы вернуть объект для продолжениия цепочки. То есть чтобы могло работать так:
$('img').makeGray().css('border': '1px solid');

*апстену*
Вернуть целую функцию?.. что за безумный язык! Нет, я понимаю, что ваши советы по существу... но, блин... мои олдскульные устои человека, учившегося кодить на Паскале - ломаются окончательно :blink:
Цитата:

Сообщение от danik.js (Сообщение 237071)
Можно просто this.onload = makeCopy;
При событии load будет вызывана makeCopy, в которой this укажет на картинку.

Я правильно понимаю, что при подобной записи получается, что функция makeCopy вызывается как метод для this, т.е. в данном случае для объекта типа Image? Я это просто что б в голове уложить, откуда внутри появится this с указателем на объект... :blink:
Цитата:

Сообщение от danik.js (Сообщение 237071)
Однако что будет если картинка уже загрузилась? Я не уверен что обработчик сработает. Поэтому нужно проверять - загрузилась ли картинка (через img.complete кажется, может для ишака иначе).

Добавлю проверку на завершение загрузки, согласен, что очевидная проверка лучше, чем надежда что браузер сработает как надо. Для Ишака .complete прекрасно работает. По крайней мере 7-8. Шестой поставлю - проверю.
Цитата:

Сообщение от danik.js (Сообщение 237071)
А это еще зачем? Нет такого свойство. Префиксные начинаются с дефиса.

Под рукой ссылки нет, завтра из офиса скину - я читал, что фильтры вызываются без дефиса для 6-7 ишака, и с дефисом для 8+. А значит нужно две записи.
Цитата:

Сообщение от danik.js (Сообщение 237071)
И еще раз спрашиваю - разве без этого всего в ишаке не работает? Ведь jQuery внутри уже сама использует нужные для ишака свойства при анимировании opacity...

Анимирования не получается. Только резкий переход. Собственно из-за того, что найденные мною рецепты не делали анимирование в ишаках, я и затеял написать эту фигню сам... :)
Ну либо я находил кривые решения, и сам не смог добиться иным путём. Тут я не могу ничего сказать - совершенно нуб :)

P.S. Извиняюсь за, по сути, оффтоп, но, ребят, можете подсказать какую конкретно часть документации/учебника/справочника/самоучителя/пофиг_чего прочитать, что бы врубиться таки во все эти хитросплетения вызовов, колбэков и прочих тонкостей джаваскрипта? Ибо что и как в каких случаях следует вызывать - для меня просто... неочивидно.
Например function some() {some code here} где-то вызывать как some, без () - для меня... непонятно - как так-то, вообще?!.. а хотелось бы ориентироваться, что я делаю...

Deff 25.02.2013 22:16

master_alf,
Думаю нун не спеша для начала выспаться, Утро -вечера мудреннее!

danik.js 25.02.2013 22:23

Цитата:

Сообщение от master_alf
Вернуть целую функцию?

Всего лишь ссылку на текущую jQuery коллекцию (по сути - объект, похожий на массив). Язык тут не причем. Это такая плюшка jQuery - цепочки вызовов, chained calls вроде. На сайте jquery.com полюбому есть демонстрация цепочек.

Цитата:

Сообщение от master_alf
в голове уложить, откуда внутри появится this с указателем на объект

Все просто. Почитай про this в javascript. Вобще - тут все очень просто - мы определили метод someimage.onload. В некоторый момент он будет вызван браузером. Мы можем даже сами вызвать его - someimage.onload() - при таком вызове this будет указывать на someimage, верно?
Цитата:

Сообщение от master_alf
без дефиса для 6-7 ишака, и с дефисом для 8+

Не без дефиса, а без префикса. Префикс - это -ms-
Какие еще рецепты. Просто убери этот кусок кода, все должно работать без него. В крайнем случае запили тестовый пример прям тут - посмотрим.
По части документации - для начала можешь покурить Учебник

master_alf 26.02.2013 09:50

Цитата:

Сообщение от danik.js (Сообщение 237133)
Всего лишь ссылку на текущую jQuery коллекцию (по сути - объект, похожий на массив). Язык тут не причем. Это такая плюшка jQuery - цепочки вызовов, chained calls вроде. На сайте jquery.com полюбому есть демонстрация цепочек.

Понято, почитаю. Спасибо.

Цитата:

Сообщение от danik.js (Сообщение 237133)
Мы можем даже сами вызвать его - someimage.onload() - при таком вызове this будет указывать на someimage, верно?

Да. Пытался сформулировать в чем у меня был вопрос, но внятно описать не смог. Видимо просто надо перечитать про области видимости. Похожу я в этом где-то запутался. :)
Цитата:

Сообщение от danik.js (Сообщение 237133)
Не без дефиса, а без префикса. Префикс - это -ms-

Совершенно верно, глянул на ту ссылку - префикс это -ms- ... память подводит :(. Если интересно, то ссылка вот.
Цитата:

Сообщение от danik.js (Сообщение 237133)
Какие еще рецепты. Просто убери этот кусок кода, все должно работать без него. В крайнем случае запили тестовый пример прям тут - посмотрим.

И снова я был не прав. Убрал функцию step в animate() - плавность всё равно осталась. Всё работает. Я же был уверен в том, что работать не будет т.к. изначально пробовал в animate() поместить
newImg.style.filter ='progid:DXImageTransform.Microsoft.BasicImage(grayScale=1)';

Т.е. просто плавный переход в серый цвет. И не работало именно такое решение, а не с применением прозрачности.
Цитата:

Сообщение от danik.js (Сообщение 237133)
По части документации - для начала можешь покурить Учебник

Начал еще вчера, но там мноооого всего. Думал нужные куски найти побыстрее, но да это уже совершенно другой вопрос.

P.S. на сайте/форуме нет раздела в духе "вот мой плагин, пользуйтесь на здоровье"? Вижу на форуме место для обсуждения плагинов, но это немного не то. И так оффтопиков развёл. :(

P.P.S. прикручу реализацию кросдоменных картинок, и выложу окончательный вариант. Ну или раньше приду с вопросами :D

Deff 26.02.2013 10:44

Цитата:

Сообщение от master_alf
P.S. на сайте/форуме нет раздела в духе "вот мой плагин, пользуйтесь на здоровье"?

http://javascript.ru/forum/project/

master_alf 26.02.2013 10:51

Цитата:

Сообщение от Deff (Сообщение 236987)
Лучше имхо отдельным расширением, связанным плагином
На хабре видал статейку, как реализуемо для свежих версий браузеров => http://habrahabr.ru/post/120917/

Deff, я посмотрел этот пост... скажу честно - очень многое осталось непонятым совершенно. Судя по всему, ты рекомендовал мне использовать CORS? Но это не будет работать в ишаках 7-, а так же требует настройки сервера, дабы он возвращал
Код:

Header set Access-Control-Allow-Origin "*"
Это написано вот здесь.
Вопрос - я прав, и это действительно тот способ который ты посоветовал? Или я проглядел что-то более простое... Ибо если нужно перенастроить заголовки ответа сервера, с которого планируется получать свои картинки... То во многих случаях плагин работать не будет. Т.к. доступа к серверу нет, а вряд ли большинство хостеров/админов такие добрые, что станут настраивать такой заголовок "впрок, дабы людям было удобно".

Deff 26.02.2013 11:20

Цитата:

Сообщение от master_alf
Deff, я посмотрел этот пост... скажу честно - очень многое осталось непонятым совершенно. Судя по всему, ты рекомендовал мне использовать CORS? Но это не будет работать в ишаках 7-, а так же требует настройки сервера, дабы он возвращал

Да - скорее Всего - тут я не прав. Нун искать статьи: загрузка в канвас картинки с инодомена

master_alf 26.02.2013 11:30

Понято. Значит погуглю всевозможные варианты.


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