Как стать автором
Обновить

Как сделать круглую лупу без Canvas, SVG и VML

Время на прочтение2 мин
Количество просмотров1.1K


На сайте студии Лебедева в разделе "Наш портрет" есть лупа. Очень удобная штука — всегда можно приблизить и посмотреть на кого-нибудь поближе. И всем бы она хороша, да только дергается в IE со страшной силой. Видимо, автор подошел к решению задачи без огонька. Лебедевская лупа сделана на Canvas (для Опер, Сафарь и Фаерфоксов) и VML (для IE).

И тут у меня возник резонный вопрос: А можно ли всю эту красоту сделать исключительно средствами HTML4 — без всяких новомодных наворотов (сам же я, кстати, являюсь большим поклонником новомодных наворотов)?
 Зачем это делать? Во-первых, чтобы решить проблемму адовых тормозов в ИЕ. Во-вторых — чтобы сделать решение для стареньких браузеров без канвы. И в-третьих, чтобы решить эту головоломку.

Всё заметно бы упростилось будь бы лупа квадратной. Тогда бы мы просто двигали дивчик, а у него внутри бэкграунд с большой картинкой. Но раз уж у нас лупа круглая, пришлось придумать вот такую штуку:


Лупу я спёр у Лебедева для чистоты эксперимента. В диве с зеленым бордером я двигаю бэкграундом большую картинку, а в дивах с красным бордером — маленькую картинку. Таким образом выходит, что углы «увеличивающего» дива сливаются с маленькой картинкой. По-моему, это то, что надо.

Это решение работает везде очень плавно и хорошо, кроме ИЕ6. Он явно в шоке от того количества дивов, style которых ему надо менять на каждую итерацию mousemove. Есть вариант достать конспекты по теории графов и попробовать уменьшить количество красных дивов, но опытным путём стало ясно, что тормоза начинаются уже от 10 дивов. Сомневаюсь, что удалось бы сократить их число меньше 10.

Поэтому обратимся к истории. В ИЕ есть такая штука как фильтры. Их то я и использую. Понятно, что imageAlphaLoader здесь мне не поможет, поскольку он не способен загрузить только альфа канал для выбранного элемента. А вот в связке с фильтром Chroma — вполне себе.



Подгружаем imageAlphaLoader'ом эту PNG-шку. Белый круг прозрачный. А потом фильтром Chroma сделаем черный цвет прозрачным. Ура ура. Всё получилось.

И так. Удалось решить задачку старыми дедовскими способами и существенно ускорирть работу в ИЕ.

technocat.ru/zoom
Теги:
Хабы:
Всего голосов 26: ↑23 и ↓3+20
Комментарии18

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн