Лупа на jQuery

Лупа на jQuery

Привет!

Сегодня мы рассмотрим еще один полезный плагин jQuery — лупу (jQuery magnify tool).

Все, что вам нужно, это сделать 2 пропорциональные картинки (одну маленькую и одну нормальных размеров), html разметку и небольшой кусок javascript кода.

Как обычно, сначала посмотрим пример. А теперь поехали.

Протестировано

  • Windows: IE 6, IE 7, FF 2+, Safari 3.1;
  • Mac: FF 2+, Safari 3.1.

Замечания по использованию

  • пропорции маленького и большого изображения должны быть одинаковыми — т. е. если маленькая картинка имеет размеры 300 на 400 пикселов, то оно имеет пропорции 3 на 4, следовательно большое изображение должно быть 900 на 1200, 1500 на 2000 и так далее;
  • если у вас большая картинка очень тяжелая, то вы можете выключить прелоад картинки и отложить его до события, при котором включается лупа (наведение курсора или клик).

HTML

Итак, начинаем. Для начала посмотрим HTML код. Здесь все стандартно — подключаем jQuery, файл плагина и делаем разметку для картинки:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Лупа на jQuery</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.magnify-1.0.2.js"></script>
<style>
img {
border: 1px solid #CCC;
}
</style>
</head>

<body>
<h1>Лондонское метро</h1>
<p>Карта лондонского метро довольно большая. Но теперь у нас есть лупа ;-)</p>
<h3>Дефолтные настройки</h3>
<p><a href="walkmap.gif" id="magnify1"><img src="walkmap_small.gif" /></a></p>

<h3>Немного модифицированные настройки</h3>
<p><a href="walkmap.gif" id="magnify2"><img src="walkmap_small.gif" /></a></p>

</body>
</html>

JavaScript

Первый раз вызовем лупу стандартным способом (при наведении курсора), без всяких дополнительных настроек.

<script type="text/javascript">
$("#magnify1").magnify();
</script>

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

<script type="text/javascript">
$("#magnify2").magnify({

showEvent: 'click',
hideEvent: 'click',
lensWidth: 60,
lensHeight: 60,
stagePlacement: 'right',
lensCss: { backgroundColor: '#cc0000',
border: '0px',
opacity: 0.5 },
stageCss: { border: '4px solid #33cc33' }

});
</script>

Таблица дополнительных параметров

параметр тип по умолчанию описание
lensWidth integer 100 длина лупы
lensHeight integer 100 высота лупы
showEvent string ’’mouseover’’ событие, при котором появляется лупа
hideEvent string ’’mouseout’’ событие, при котором исчезает лупа
stagePlacement string ’’right’’ положение лупы относительно картинки, может быть справа (’’right’’) или слева (’’left’’)
preload boolean true если стоит ’’true’’, скрипт загрузит большую картинку сразу после загрузки страницы;
если ’’false’’ — после события вызова лупы
loadingImage string пустая строака путь до индикатора загрузки; если пусто, то будет просто написано «Loading…»
stageCss object пустой объект дополнительные стили для зоны увеличения на меленькой картинки
lensCss object пустой объект дополнительные стили для лупы
onBeforeShow function пустая функция функция, которая запускается до появления лупы
onAfterShow function пустая функция функция, которая запускается после появления лупы
onBeforeHide function пустая функция функция, которая запускается до скрытия лупы
onAfterHide function пустая функция функция, которая запускается после скрытия лупы

Перекрытие select в IE 6

В шестом осле все селекты находятся выше (даже если вы будете менять z-index). Для этого можно использовать вот такой маленький хак, который скрывает селект, находящийся под лупой, до ее появления и показывает его при скрытие лупы.

$("#myimageid").magnify({
onBeforeShow : function() {
if ($.browser.msie && $.browser.version == '6.0')
$("select").css("visibility","hidden");
},
onAfterHide : function() {
if ($.browser.msie && $.browser.version == '6.0')
$("select").css("visibility","visible");
}
});

 

Ну вот, посмотрим пример еще раз и, если очень надо, сходим на страницу скрипта.

На этом все. Жду ваших вопросов и замечаний в комментариях.

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 20

Влад
Полезная вещ
#
Влад
Octane
Что-то оно не работает, события мыши чтоли не правильно отлавливаются, пробовал в FireFox 3.0.4 и Google Chrome.
grejjo
Замечательно, но было бы удобнее если лупа появлялась не в дополнительном окошке справа, а непосредственно туда куда наводишь указателем. Иначе теряется весь смысл экономии пространства, уж проще взять и открыть данное изображение целиком.
#
grejjo
Olhado
Согласен. Даже в том виде, в каком эта лупа выглядит на картинке к статье, реализация была бы более удобной и логичной.
#
Olhado
[{DarkAngel}]
Класно конечно, но не особо вижу где это можно применить.
Есть гугл мапс. Если применительно не к картографии то незнаю даже где оно нужно.
#
[{DarkAngel}]
Grin
Olhado, такую (круглую) лупу нельзя реализовать без флеша.

grejjo, если помещать увеличение непосредственно на картинку, то некоторые части изображения нельзя будет увеличить (углы, например).
#
Grin
Grin
Octane, оба примера не работают? У меня тоже третий FF и все нормально
#
Grin
Vamp
такую круглую лупу можно реализовать без флэша, используя canvas, не вводите людей в заблуждение
#
Vamp
Octane
>> Octane, оба примера не работают? У меня тоже третий FF и все нормально
Попробовал еще раз, проблема наблюдается в вашем примере. У меня почему-то мышь выскакивает за границу плавающей рамки во время движения, и сама рамка не всегда появляется.
jusalex
Очень меня выручила эта статья и сам скрипт. Надо было просматривать большую групповую фотку и это легко удалось.
#
jusalex
Ney
Ссылка на страницу скрипта нерабочая. Вот правильный вариант:
http://www.jnathanson.com/index.cfm?page=jquery/magnify/magnify
#
Ney
Blind
И углы можно лупой показывать, попытался схематически изобразить как бы это выглядело :-)

|----|
--------| |
| |----|
| |
| |
----------
#
Blind
Grin
Blind, что-то очень уж схематично )
#
Grin
Grin
Спасибо, Ney, исправил ссылку
#
Grin
Vadim
вот на этом сайте использован интересный скрипт, пологаю что если пойти аналогичным путем то можно реализовать "круглую лупу"
http://www.parallel.ua
#
Vadim
Александр
Павел Марковнин, как реализовать отображение увеличенной области не справа, а под исходной картинкой? Или вообще в любом заданном месте.
#
Александр
gps
Спасибо большое отличный сайт...
#
gps
Евгений
Можно реализовать просмотр углов если увеличить размер холста... (120 процентов). Немного места потеряется зато невероятно просто и работоспособно :)
#
Евгений
Владислав
Дайте кто знает пожалуйста ссылку, на как сделать лупу zoom плавное приближение и удаление. И еще надо такое: при позиционировании мышки на карте на миниатюре объекта или клик по этой миниатюре, чтобы отображалась фотография на эту миниатюру.
#
Владислав  
deeserge
Попробуйте вот этот плагин http://zoomsl.tw1.ru. Похож на Cloud Zoom v3.0, но совершенно бесплатен. Работает во всех браузерах, даже в ие8 поддерживается плавность анимации, чего не скажешь про другие бесплатные плагины.

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler