Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обсуждение темы о "прототипах", флейм, флуд, спасибы, пожелания allowed 
:(
    Опции темы
dm9
Дата 20.3.2006, 03:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Цитата(Ciber SLasH @ 20.3.2006, 04:13 Найти цитируемый пост)
Не мог бы ты описать сам алгоритм?


Давай я попробую smile

Цитата(Sardar @ 20.3.2006, 02:19 Найти цитируемый пост)

function colorFade(id, obj, style, colorfrom, colorto, secs) {
// Это понятно
  function numerize(v) { return parseInt(v, 16);}
// Не знаю, зачем smile Всё будет работать и без этого, вроде бы. То есть var nid = id тоже работает
  var nid = '~'+id; 
// secs * 1000 - миллискекунды, за которые всё должно перелиться
// arguments.callee.resolution - задержка между двумя изменениями цвета, миллисекунды
// secs * 1000 / arguments.callee.resolution - число шагов, за которые произойдёт полное изменение цвета
  var steps = secs * 1000 / arguments.callee.resolution;
// рег, которые выделит из XXXXXX или #XXXXXX (где Х - цифра) 6 цифр.
  var reg = /\#?([0-9a-fA-F]{6})/;
// Теперь в массиве colorfrom будут составляющие цвета (colorfrom[0] - R, colorfrom[1] - G, colorfrom[2] - B)
  colorfrom = reg.exec(colorfrom)[1].chunk(2).map(numerize);
// Аналогично, только для того цвета, К которому идём, а не ОТ которого
  colorto = reg.exec(colorto)[1].chunk(2).map(numerize);
// Массив, 3 элемента (RGB). Содержит изменение цвета на каждом шаге. То есть в colorstep[0] содержится число, которое будет добавляться к R-составляющей цвета на каждом шаге, и т. д. Изменение цвета происходит по линейному закону.
  var colorstep = colorfrom.map(function(a, b) {return (a - b)/steps;}, colorto);
// Текущий шаг - 0 (инициализация) 
  var curstep = 0;
// Направление изменения цвета (1 - от colorfrom к colorto, 0  - наоборот)
  var dir = 1;
// Инициализация цвета. Тут у Сардара небольшая ошибка - по логике тут должна быть colorfrom, а не to. Чтобы исправить - надо разбираться со знаками выражений. Сейчас я этим заниматься не буду smile
  var ret = colorto;
// В зависимости от направления - вычитаем или прибавляем интервал  к цвету 
  function next(a, b) { return (a + b * dir); }
// Если таймаут уже установлен (второе нажатие кнопки) - сбрасываем его нафик
  if(arguments.callee.handles[nid]) window.clearTimeout(arguments.callee.handles[nid]);
// ... и устанавливаем его
  arguments.callee.handles[nid] = window.setInterval(function() {

      ret = ret.map(next, colorstep);
// устанавливаем стиль (цвет) нужному css-свойству (backgroundColor)
// ret.map(Math.round) округляет каждую составляющую цвета
      obj.style[style] = "rgb("+ ret.map(Math.round).join(',')+")";
// Если мы уже прошли в одну сторону до конца - меняем направление
      if(++curstep >= steps) {
        ret = dir>0? colorfrom: colorto;
        curstep = 0;
        dir*=-1;
      }
  }, arguments.callee.resolution);
}
// таймеры для каждого инстанса переливания цвета
colorFade.handles={};
// как часто меняем цвет - время в ms
colorFade.resolution = 50;


Это сообщение отредактировал(а) dm9 - 20.3.2006, 03:46
PM MAIL ICQ   Вверх
Ciber SLasH
Дата 20.3.2006, 05:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



dm9, спасибо за разжовывание. В принципе меня интересовал только сам механизм смены цветов. smile
PM   Вверх
Sardar
Дата 20.3.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(dm9 @ 20.3.2006, 02:11 Найти цитируемый пост)
Вот это, конечно, для меня странно smile

colorFade.handles={}; - в JS нет человеческой карты обьект=>обьект, потому пользуемся обьектом как хештаблицей. Сохраняем таймеры в общем регистре, что бы потом можно было остановить если человек нескольк раз нажмёт на кнопку.
colorFade.resolution = 50; - это конфигурационная переменная, одна на все fade.
Да можно было сделать некий класс, возможно даже singleton, но в JS мне так проще. В PHP5 или в Java уже классами.

Цитата(dm9 @ 20.3.2006, 02:42 Найти цитируемый пост)
// Не знаю, зачем smile Всё будет работать и без этого, вроде бы. То есть var nid = id тоже работает

Не совсем, это идентификатор для карты handles, где храним таймеры. Но карт в JS нет, это обьект, а обьект имеет стандартный интерфейс. Таким образом ключь toString и прочие будут перезаписывать совсем не то что ты хотел. В итоге лучше "обезоапсить" добавив тильду, т.к. ни одно поле у обьекта с тильды не начинаеться. Не красивый, но рабочий хак... smile
Цитата(dm9 @ 20.3.2006, 02:42 Найти цитируемый пост)
ут у Сардара небольшая ошибка - по логике тут должна быть colorfrom, а не to

Угу, пример накатал за 15 минут для поста, ночью, была заморочка с "дёрганьем цветов" если от c colorfrom, разбираться не хотел и попросту схалтурил smile

Отсюда можно вывести два понятия что люди часто путают: выразительность и читабельность языка. Выразительность это то, на сколько просто языком описать свою мысль/идею, либо это пара строк кода, либо 100кб в куче файлов. Читабельность это простота восприятия синтаксиса, не каждый новичёк считает тернарный оператор ?: хорошо читаемым, в то же время он очень выразителен. Самые читабельные по моему паскалеподобные языки, самые выразительные функциональные и ООП (Java и C#, a C++ пусть идёт лесом). Чем выше уровень программиста, тем больше потребность именно в выразительности. ИМХО JS'у не хватает выразительности, это красивый и мощный язык, но имплементируя его я бы пошёл дальше ECMA. Если откинуть прямую "обьектность" то легко можно распараллелить исполнение (хотя это будет уже не JS...), натолкнуло это

Ciber SLasH, ничего в алгоритме нету smile Вычисляем разность между цветами, далее с этой разностью ходим от одного цвета к другому.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
dm9
Дата 20.3.2006, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



А всё-таки... немного оффтоп, конечно, но тут вся тема - оффтоп smile

Цитата(dm9 @ 20.3.2006, 04:11 Найти цитируемый пост)
Скажи, а не существует таких библиотек, которые это всё реализуют? Наверняка кто-то пытался собрать этакий STL для JS.


Интересны не отдельные разработки "по мелочам", а именно попытка собрать всё в один пакет.

PM MAIL ICQ   Вверх
Sardar
Дата 20.3.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(dm9 @ 20.3.2006, 11:23 Найти цитируемый пост)
Интересны не отдельные разработки "по мелочам", а именно попытка собрать всё в один пакет.

Лишний вес по сути Посмотри что я писал для этой шкурки форума, MyLib.js, там доведение до ума интерфейса Array, addEventListener и прочее. Только то что использовал, то и осталось. Видел либы для анимаций и эфефктов, дахзе сам писал, но как то в реальной жизни не требуеться. Да и написать это всё по новой просто, скрипты ведь.

Угу, думал как это всё аккуратно вырезать в отдельную тему, от работы в мыслях хаос, почищю топ позже smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
elferno
Дата 31.8.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 31.8.2007

Репутация: нет
Всего: -3



я похоже слишком  примитивный  чтобы  понять  концеп
прототипного JS, Вы не могли бы, пожалуйсто, ответить:

1. зачем вообще применять такую модель.
2. если я все пишу примитивным способом:

            document.getElementById("my_element").innerHTML='123';

            вместо

            inner='123';
            document.getElementById("my_element").appendChild(inner);   //вроде как-то так

то каким образом мне сейчас лучше поступить?

заранее спасибо.

P.S. был бы весьма признателен получив Ваш ответ в ICQ на номер 282-897-997

Это сообщение отредактировал(а) elferno - 31.8.2007, 16:06
PM MAIL   Вверх
cruelangel
Дата 12.9.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



>во многих языках есть понятие полей обьекта, при изменении которого вызывается функция обработчик(т.н. get/set функции).

их правильнее называть свойствами, а поля - это просто хранилище данных безо всяких геттеров и сеттеров
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0970 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.