среда, сентября 13, 2006

Коробка передач, управляемая Javascript

Аккурат в канун Дня программиста выпало одно из нелюбимых занятий: писать Яваскрипт. Почему нелюбимых? Во-первых, потому что я постоянно забываюсь и в процессе сбиваюсь на PHP :-) Во-вторых, даже если написано правильно, не факт, что будет работать везде (кто-нибудь, убейте Майкрософт. И Оперу!).

Тем не менее, при реализации eye candy для сайта «Фортуны» пришлось описывать подсвечивание символов на автомобильной ручке передач в зависимости от того, в какой области меню гуляет курсором посетитель.

У любой программистской задачи есть три решения:

  1. Тупо описать процесс, уподобив себя Ассемблеру. Много обезьяньей работы, мало отладки. При изменении условий почти всё переписывается заново.
  2. Создать изысканный и интеллектуальный код, предусматривающий все возможные и невозможные условия, самостоятельно находящий все данные и вызываемый один раз и без аргументов :-) Три дня его отлаживать, потом пять лет пользоваться.
  3. Средняя линия: где можно — тупо, где нужно — поизысканнее. Чтобы пройти такой линией, нужно всё время напоминать себе, что ты всего лишь описываешь переключение картинок, не несущее никакой смысловой нагрузки :-)

В итоге задача решилась довольно быстро (решилась бы ещё быстрее, не пытайся я делать конкатенацию строк точкой, а не плюсом) — добавлением к вставленному Dreamweaver-ом Яваскрипту двух функций. Одна возвращает в исходное состояние все переданные в аргументах объекты (снимает выделения для перечисленных поимённо позиций на ручке скоростей). Вторая — вызывает первую и устанавливает выделение на нужную позицию. Обе в конечном итоге пользуются сакраментальной MM_swapImage от Macromedia :-)

Следование средней линии в этом случае заключается в том, что функция my_restore() могла бы быть и поумнее: скажем, сама находить объекты и восстанавливать их состояние, пропуская указанный в аргументе. Но в коде она вызывается лишь пять раз :-)  Copy+Paste с минимальной правкой — гораааздо быстрее, чем написание Окончательной Функции. А вот вызов функции hilite() нужно прописать на каждом линке, а их несколько десятков :-) поэтому она должна вызываться просто, с одним очевидным аргументом.

В общем, не бог весть какой программистский подвиг (я всё это время говорил о 15 строчках кода :-D ), но даёт повод поразмыслить и пообобщать, а это, в итоге, и отличает нашу работу от обезьяньей.

Комментариев нет:

Поиск по этому блогу