Главная · Windows 10 · Эффект лупы jquery. Эффект лупы с использованием jQuery

Эффект лупы jquery. Эффект лупы с использованием jQuery

В статье рассмотрена процедура установки плагина cloud-zoom на базе jQuery, а также описаны вспомогательные настройки плагина для оптимизации отображения увеличительного окна.

Довольно часто на ресурсах с большим запасом графического материала прибегают к применению приема лупы. К примеру, имеется изображение большого размера и разрешения. Чтобы оно поместилось в видимую зону экрана, его понадобится уменьшить, что ухудшит читабельность картинки, сложно будет рассмотреть детали. В этом случае поможет специальный плагин, который будет локально увеличивать определенные зоны картинки при наведении. Также такой прием очень часто используется в интернет-магазинах для того, чтобы потенциальный клиент мог хорошо в деталях изучить предлагаемый ему товар.

Стоит отметить, что в сети довольно много схожих программных пакетов, которые позволяют реализовать лупу для изображений. Поэтому логично выбрать из всего множества плагинов наиболее оптимальный вариант. Во время проведения своего анализа, я выбрал 3 основных критериев, по которым проводил отбор:

  • поддержка разных браузеров;
  • объем функциональных возможностей;
  • объем плагина и скорость, с которой он работает.

Первый вариант, который идеально подошел к моим критериям, стал cloud-zoom . Эта статья будет посвящена установке и работе только этого скрипта, а последующие решения, которые тоже соответствуют поставленным критериям, будут рассмотрены в будущих статьях.

Установка

Итак, cloud-zoom . Автором этой разработки является некий профессор Туча, стоит уважить его труды и поблагодарит за этот продукт. В первую очередь хотелось бы отметить главное преимущество скрипта, в сравнении с другими – способность кода взаимодействовать с разными форматами галерей.

Первым этапом установки плагина станет скачивание последней jQuery, также непосредственно, файл самого плагина и таблица стилей к нему. Все это можно найти на официальном ресурсе продукта.

После того, как необходимые документы были скачены и размещены в соответствующей директории вашего ресурса, можно перейти к кодовой части установки. В теге head мы подключаем таблицу стилей для нашей лупы, а в само тело сайта вставляем тег script, который подключит программное обеспечение нашего плагина. Пример кода, который осуществляет вышеперечисленные задачи, приведен ниже

HTML

/*в head */ < link rel= "stylesheet" type= "text/css" href= "cloud-zoom/cloud-zoom.css" /> /*в body*/ < script type= "text/javascript" src= "https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" > < script type= "text/javascript" src= "cloud-zoom/cloud-zoom.1.0.2.js" >

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

HTML

< a class = "cloud-zoom" href= "big-img.jpg" > < img src= "small-img.jpg" />

Как вы можете заметить, ничего сверхъестественного в типовой конструкции HTML-тела плагина нет: ссылка на увеличенное изображение и сама картинка внутри нее. Также хочу отметить, что принципиально важно указать класс плагина, иначе скрипт не сработает. Если все было сделано правильно, то в браузере вы будете наблюдать примерно следующую картину

Как видно, окно лупы намертво прилипло к уменьшенной версии картинки. Этот недочет устраняется посредством специальных настроек, которые корректируют оформление и положение окна лупы. В данном примере рассмотрим, как можно поправить местоположение окна лупы

HTML

< a class = "cloud-zoom" href= "big-img.jpg" rel= "adjustX: 20, adjustY: 0" > < img src= "small-img.jpg" />

Данная запись означает, что мы немного переопределили координаты вывода окна, относительно оси Х. также обратите внимание на то, что все настройки для плагина прописываются в атрибуте rel через запятую. Проверяем, сработала ли наша команда

Настройки

Ниже приведен список всех возможных настроек плагина и краткое их описание

  • zoomWidth – определяет размер ширины окна для вывода локального увеличения картинки. Если для этого параметра ничего не определено, то окно повторит значение ширины картинки.
  • zoomHeight – определяет размер высоты окна для вывода локального увеличения картинки. Если для этого параметра ничего не определено, то окно повторит значение высоты картинки.
  • position – переопределяет позицию расположения окна для вывода. Аналогично одноименному CSS-свойству, принимает значения "left", "right", "top" и "bottom". Позиция устанавливается относительно рассматриваемой картинки. Также можно определить вывод окна в необходимом контейнере через привязку к идентификатору. За это отвечает значение "blockId".
  • adjustX – устанавливает положение окна лупы относительно оси координат абсцисс.
  • adjustY – устанавливает положение окна лупы относительно оси координат ординат.
  • tint – отвечает за цвет рамки, которая обрамляет окно вывода лупы. Не работает при использовании параметра softFocus.
  • tintOpacity – определяет просвечиваемость границ курсора лупы.
  • lensOpacity – определяет просвечиваемость границ окна вывода лупы.
  • softFocus – придает эффект размытия той части картинки, которую не захватывает курсор лупы. Не работает при использовании параметра tint.
  • smoothMove – позволяет настроить более плавное передвижение курсора лупы в зоне изучаемой картинки.
  • showTitle – соответствует функциям обычного атрибута title.
  • titleOpacity – позволяет контролировать прозрачность блока с описанием картинки.

В тоже время к настройкам можно отнести форматирование таблицы стилей. Ниже показан список всех селекторов таблицы, а также какой из них какому элементу лупы соответствует:

  • .cloud-zoom-lens – курсор, который определяет локальную зону увеличения.
  • .cloud-zoom-title – отвечает за стилизацию заголовка лупы.
  • .cloud-zoom-big – окна для вывода увеличения картинки.
  • – оформление сообщения загрузки информации.
Работа в режиме галереи

В том случае, когда мы работаем с галереей, структура кода немного изменяется, и в то же время появляется несколько новых параметра настроек. Рассмотрим на живом примере

HTML

< a class = "cloud-zoom" href= "big-img.jpg" id= "loupe1" rel= "position: "right", adjustX: 10, adjustY: 0" > < img src= "small-img.jpg" width= "200" /> < ul> < li> < a class = "cloud-zoom-gallery" href= "big-img.jpg" title= "" rel= > < img src= "small-img.jpg" width= "100" /> < li> < a class = "cloud-zoom-gallery" href= "masdefault.jpg" title= "" rel= "useZoom: "loupe1", smallImage: "small-img.jpg"" > < img src= "masdefault.jpg" width= "100" height= "114px" /> < li> < a class = "cloud-zoom-gallery" href= "kostyum" title= "" rel= "useZoom: "loupe1", smallImage: "small-img.jpg"" > < img src= "kostyum.jpg" width= "100" height= "114px" />

По внешнему виду напоминает обычную галерею, созданную посредством маркированного списка. Также уже узнаются элементы плагина cloud-zoom с указанием некоторых его настроек. В этом случае необходимо обратить внимание на команду useZoom , который привязывает каждый элемент галереи к основному блоку для просмотра. Связь образовывается за счет соответствия идентификаторов. Помимо этого добавилась еще один параметр – smallImage , он в свою очередь определяет, какое именно изображение показать в уменьшенном формате. Стоит отметить, что для режима галереи необходимо наличие трех картинок: 2 которые будут взаимодействовать с плагином, и еще одна в уменьшенном варианте для создания списка иконок.

На практике этот пример будет выглядеть так

На заметку

Если для запуска галереи используется ajax, то плагин может не отработать. Чтобы исправить этот баг, необходимо прописать переинициализацию плагина. В стандартном виде это выглядит так

JavaScript

jQuery(".cloud-zoom, .cloud-zoom-gallery" ) . CloudZoom() ;

Подводя итог

В завершении хочется отметить простоту использования плагина и гибкость при внесении корректировок в оформление данного функционального элемента. Помимо этого радует высокий показатель кроссбраузерности и маленький объем скрипта – всего 6 килобайт. Отдельного внимания заслуживает поддержка режима галереи. Единственное, что немного смущает, что все настройки вносятся непосредственно в HTML-документ, это немного засоряет наш код. Более практичнее было бы вынести их во внешний js-файл. Ну а в целом плагин достоин внимания и признания.

Плагин Zoomy реализует красивый эффект наведения лупы над изображением. Все выполнено на высшем уровне — лупа выглядит «как живая».

Проверено в:

  • IE 6-8
  • Firefox 4
  • Opera 9.5-10
  • Safari 4
  • Chrome
Что качать?
  • библиотеку jquery качаем или .
  • (10.99 Kb) — плагин или его (4.49 Kb).
  • (2.87 Kb) стили для лупы.
Быстрый старт

Подключаем библиотеки и таблицу стилей:

HTML простой и интуитивно понятный — маленькая картинка, обернутая ссылкой на большую. Для удобства инициализации ссылке присвоим класс zoom.

Инициализируем плагин:

jQuery(function(){ jQuery(".zoom").zoomy(); });

Вот собственно и все.

А теперь подробнее

При инициализации, можно передавать следующие параметры:

Параметры zoomy() События

Можно настраивать включение лупы в зависимости от действий пользователя. Доступны четыре события:

Примеры инициализации с параметрами

Настраиваем лупу. Задаем размер, русифицируем надпись, изменяем атрибут с адресом большой картинки.

Был рассмотрен плагин увеличения изображения Zoomy , имитирующий реальную лупу. В некоторых случаях его использование неудобно, так как лупа перекрывает основную картинку и затрудняет фокусировку на нужном участке. Для точного позиционирования точки увеличения можно использовать другой вариант лупы - jLoupe . Этот плагин для бесплатной библиотеки скриптов jQuery разработан веб-дизайнером Крисом Юфером (Chris Iufer). Он имеет значительно больше настроек и позволяет создавать красивые эффекты, имитирующие лупу, выводя увеличенный фрагмент изображения рядом с курсором-указателем.

Три варианта работы плагина jLoupe показаны на рисунке. Слева - лупа каплевидная и является ссылкой на вывод полномасштабного изображения, в центре - лупа прямоугольная без ссылки, справа - лупа в виде окружности. К сожалению, скругление, так же как и в рассмотренном ранее плагине лупы Zoomy , не работает в браузерах IЕ6 - IЕ8. Поэтому в них лупа всегда прямоугольная, а правый вариант, вообще, сплошное безобразие.


Примеры работы плагина jLoupe Установка плагина лупы jLoupe

Сначала скачиваем архив . Затем, как всегда, чтобы избежать путаницы, создадим на сайте новую папку, назвав её jloupe , и распакуем в неё скачанный архив. У нас получится три файла:
jquery-1.8.3.min.js, jquery.jloupe.js и вспомогательное изображение для круглой лупы loupe-trans.png.


Для работы плагина достаточно задать для изображения class="jloupe" , а сам вывод лупы можно организовать несколькими способами:
1. Создать два изображения - основное (image.jpg) и увеличенное (image_big.jpg). В теге изображения, размещенного на странице, указать путь к увеличенному варианту с помощью атрибута data-original:
.
2. Использовать только одно увеличенное изображение, а для его уменьшения в браузере задать нужные размеры на странице при помощи атрибутов width и height . Только не забывайте, что масштабирование, выполненное браузером, обычно ухудшает качество картинки:
.
3. Если необходимо дать ссылку на открытие большого изображения или на другой объект, то используйте следующую форму:
.

На этом установка плагина jLoupe закончена, и вы можете посмотреть его работу, открыв страницу с изображением в браузере.

Важное замечание: если на вашем сайте используется несколько плагинов jQuery , то удобнее перенести файл jquery.js (желательно последней версии) в корневую папку, чтобы не загружать его несколько раз. В этом случае, строка обращения к нему будет выглядеть одинаково для всех плагинов. В частности, для нашего примера получается так:
.
Не рекомендуется использовать на одной странице несколько разных версий jQuery , чтобы они не конфликтовали друг с другом. При этом обязательно проверяйте работу плагинов с установленной версией jQuery , так как не все версии взаимозаменяемы.

Настройка параметров плагина jLoupe

Основные настройки лупы jLoupe задаются в файле jquery.jloupe.js . Для их изменения откройте его в любом HTML-редакторе или в Блокноте. В самом начале файла есть строчки с доступными настройками, которые можно менять:

Свойство Установка по умолчанию Описание настройки лупы
width 200 ширина
height 200 высота
margin 6 отступ вокруг лупы
cursorOffsetX 10 горизонтальное расстояние от курсора
cursorOffsetY 10 вертикальное расстояние от курсора
color false разрешить использование цветов
borderColor "#999" цвет границы
backgroundColor "#ddd" цвет фона
radiusLT 0 верхний левый радиус скругления лупы
radiusLB 100 нижний левый радиус скругления лупы
radiusRT 100 правый верхний радиус скругления лупы
radiusRB 100 правый нижний радиус скругления лупы
image false адрес внешней картинки для лупы (image url) - определяет вид лупы. В правом примере - это изображение круга loupe-trans.png
repeat false повторение background image
fade true использование затемнения при выводе лупы
fadeIn true время затемнения при открытии (ms)
fadeOut true время затемнения при закрытии (ms)

Например, для показанного вверху статьи варианта каплевидной лупы (слева) использованы настройки по умолчанию, а для правого рисунка следующие:
radiusLT: 100,
margin: 12,
borderColor: false,
backgroundColor:"#ffffee",
image: "jloupe/loupe-trans.png"

Для варианта прямоугольной лупы (в центре) внешняя картинка не требуется (image: false):
radiusLT: 0,
radiusRT: 10,
radiusRB: 0,
radiusLB: 10,
width: 300,
height: 150,
borderColor: "#f2730b",
backgroundColor: "#000",
fade: false,
image: false

О других программах увеличения изображений, а также создания на сайте фотогалерей, каруселей изображений и слайд-шоу смотрите в и в разделе "

В данном уроке мы разберем создание эффекта лупы для статического изображения только средствами jQuery и CSS.

Шаг 1. XHTML

Разметка для получения эффекта достаточно проста. мы используем только несколько div и изображение.

demo.html

div #iphone отображает рамку iРhone. Внутри нее располагается div #webpage со скриншотом страницы. Скриншот показывается в половину от своего действительного размера, таким образом мы используем одно и тоже изображение для мелкой версии (показанной в рамке iPhone) и для большой версии, которая показывается в круглом окошке.

Также там есть div #retina, для которого задана круглая форма с помошью CSS3. Он отображает большую версию скриншота страницы как фон и смещается при движении курсора мыши.


Шаг 2. CSS

Зададим стили для div #iphone, #webpage и #retina, что сделает возможным воплощение задуманного эффекта.

style.css #iphone{ /* Рамка div iphone */ width:750px; height:400px; background:url("img/iphone_4G.png") no-repeat center center; position:relative; } #webpage{ /* Сожержит скриншот страницы */ width:499px; height:283px; position:absolute; top:50%; left:50%; margin:-141px 0 0 -249px; } #retina{ /* Эффект лупы */ background:url("img/webpage.png") no-repeat center center white; border:2px solid white; /* Позиционирование абсолютное, таким образом мы можем перемещать ее */ position:absolute; height:180px; width:180px; /* Скрыть по умолчанию */ display:none; /* A blank cursor, notice the default fallback */ cursor:url("img/blank.cur"),default; /* Тень CSS3 */ -moz-box-shadow:0 0 5px #777, 0 0 10px #aaa inset; -webkit-box-shadow:0 0 5px #777; box-shadow:0 0 5px #777, 0 0 10px #aaa inset; /* Скругленные углы CSS3 */ -moz-border-radius:90px; -webkit-border-radius:90px; border-radius:90px; } #retina.chrome{ cursor:url("img/blank_google_chrome.cur"),default; } #main{ /* Основной div */ margin:40px auto; position:relative; width:750px; }

Задавая абсолютное позиционирование div на странице, мы можем использовать технику вертикального и горизонтального центрирования, которая позволяет эффективно размещать скриншот в центре рамки iphone.

div #retina также получает абсолютное позиционирование, таким образом, возможно перемещать его в части jQuery просто задавая смещение от верха и слева. Данный div также имеет скриншот страницы в качестве фона (в своем оригинальном размере). Смещение фона при перемещении div созает иллюзию увеличения маленького кусочка скриншота позади него..


Также div #retina имеет граничный радиус со значением, равным ровно половине его ширины, что делает его точно круглым (по крайней мере в браузерах, которые поддерживают свойство border-radius CSS3 - Chrome, Safari, Opera и Firefox).

И в завершении мы прячем указатель мыши установкой пустого курсора (Google Chrome выдает ошибку при отрисовке полностью пустого курсора, поэтому нам надо установить для него белый курсор размером в 1px). Opera полностью игнорирует пользовательские курсоры, и сделать ничего нельзя с данным фактом. Поэтому пользователи данного браузера будут иметь негативный опыт при просмотре эффекта.

Шаг 3. jQuery

Стили заданы, пора приступать к программированию.

script.js $(document).ready(function(){ /* Код выполняется при получении события ready */ var left = 0, top = 0, sizes = { retina: { width:190, height:190 }, webpage:{ width:500, height:283 } }, webpage = $("#webpage"), offset = { left: webpage.offset().left, top: webpage.offset().top }, retina = $("#retina"); if(navigator.userAgent.indexOf("Chrome")!=-1) { retina.addClass("chrome"); } webpage.mousemove(function(e){ left = (e.pageX-offset.left); top = (e.pageY-offset.top); if(retina.is(":not(:animated):hidden")){ webpage.trigger("mouseenter"); } if(left sizes.webpage.height) { /* Если мы находимся вне границ сриншота страницы, то прячем div retina */ if(!retina.is(":animated")){ webpage.trigger("mouseleave"); } return false; } /* Перемещаем div retina за мышью (и прокручиваем фон) */ retina.css({ left: left - sizes.retina.width/2, top: top - sizes.retina.height/2, backgroundPosition: "-"+(1.6*left)+"px -"+(1.35*top)+"px" }); }).mouseleave(function(){ retina.stop(true,true).fadeOut("fast"); }).mouseenter(function(){ retina.stop(true,true).fadeIn("fast"); }); });

В функции mousemove текущие координаты курсора мыши передаются как e.pageX и e.pageY , но они являются абсолютными по отношению ко всему документу. Вычитая смещение div #webpage, мы получаем относительные координаты курсора мыши, которые позже используются для позиционирования div #retina.

Таким образом, в комбинации с пустым курсором мы создаем эффект лупы используя только JavaScript и CSS.

Заключение

Дебаты между приверженцами Flash и HTML5 разгорелись с новой силой в последнее время, так как люди начали искать способы получать тот же уровень функциональности без задействования внешних приложений. Данный подход приводит к более простым приложениям. Однако надо помнить о сохранении кроссбраузерности решений, что удается далеко не всегда (вспомните IE).

Надеюсь, что урок Вам понравился!