jQuery

индекс
283,92

jQuery iPhone UI

jQuery iPhone UI

Уже, наверное, месяц хвастаюсь своим коллегам своими успехами в написании тех или иных виджетов под jQuery-UI, но вот последнего шага к законченому и полезному продукту сделать не получалось, до сегодня…


Началось всё с того, что потребовался промо-сайт для iPhone приложения, в основу реализации легла идея о простом и ненавязчивом сайте, который должен иметь много общего с самим iPhone. Результатом таких рассуждений стала страничка с изображением телефона, экран которого выполнял роль информационного табло. Но на этом я решил не останавливаться — хотелось интерактивности, и большего подобия «прототипу», что у меня получилось — сможете попробовать на домашней странице библиотеки jQuery iPhone UI

Совсем недавно на хабре был анонс библиотеки jQTouch, которая предназначена для разработки web-интерфейсов для мобильных устройств, бибилотека jQuery iPhone UI предназначена для desktop-браузеров и имитирует интерфейс iPhone


Interface


Начну с основного — «создание» iPhone — ведь именно с этого и начиналась разработка. Нам потребуется подключить iphone.css и создать достаточно простую HTML страничку (графические элементы взяты из iPhone GUI PSD 3.0):

<link rel="stylesheet" href=css/iphone.css" type='text/css' media='all' />
 
<!-- or horizontal -->
<div class="iphone vertical">
    <div class="phone">
        <div class="topbar"></div>
        <div class="screen">
            <div class="titlebar">
                iPhone UI
            </div>
            <div class="scroll">
 
            </div>
        </div>
    </div>
    <a href="iphone.hohli.com" class="bigbutton">Exit</a>
</div>


Результатом будет следующая картинка:
iPhone UI vertical

Так же в iphone.css есть описание для пачки иконок в количестве 100 штук:
iPhone UI icons

Для их использования необходимо создать элемент с классом iicon и внутри элемент <em> с классом необходимой иконки (префикс в классе иконки необходим, дабы не было пересечений с остальными элементами):
<a href="#" class="iicon"><em class="ii-frame"></em>ссылка с иконкой</a>


Еще есть заготовочка для кнопок, не знаю насколько они будут полезны, но всё же:
iPhone UI Buttons

HTML код:
<a href="#" title="Label" class="button green">Label</a>
<a href="#" title="Label" class="button white">Label</a>
<a href="#" title="Label" class="button black">Label</a>
<a href="#" title="Label" class="button orange">Label</a>
<a href="#" title="Label" class="button red">Label</a>


Далее буду рассказывать о виджетах…

Widgets


Библиотека на данный момент содержит 10 виджетов, и файл jquery.iphone.js, в котором реализована автоинициализация виджетов с простым алгоритмом:
  1. Берем список всех реализованных виджетов и проверяем загружены ли они
  2. Пытаемся инициализировать каждый из загруженных плагинов — подразумевая, что элемент нуждающийся в обработке имеет класс соответствующий имени плагина (т.е. плагину iScroll будут скормлены все элементы с классом iscroll)


Если говорить о виджетах в jQuery — то надо понимать — что для работы нам потребует jQuery-UI, конечно не полностью, лишь core, но не забывайте его подключать:
<link rel="stylesheet" href="css/iphone.css" type='text/css' media='all' />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-ui.js"></script>
<script type="text/javascript" src="js/jquery.iphone.js"></script>


Теперь перейду непосредственно к списку виджетов (все картинки ведут на соответствующие демки).

iMenu


Создаем меню в стиле стандартного меню опций в iPhone:
iMenu Widget

HTML Код:
<script type="text/javascript" src="js/ui/ui.iMenu.js"></script>
 
<ul class="imenu">
<li><a href="upackinglist/description.html" title="Description" class="arrow">Description</a></li>
<li><a href="upackinglist/gallery.html" title="Gallery" class="arrow">Gallery</a></li>
<li><a href="#" title="Try FREE version" class="external">Try FREE version</a></li>
<li><a href="#" title="Buy FULL version" class="external">Buy FULL version<span>$1.99</span></a></li>
</ul>

iMenuManager


Специфический виджет, его основная задача — смена «экранов» используя AJAX, его работу можете увидеть уже на первой странице проекта, а так же на промо-страничке приложения uPackingList. Пока его работа тесно завязана на «телефон», в дальнейшем постараюсь это исправить.

// вешаемся на элемент с классом = screen
$('.screen').iMenuManager({
link   : 'a[href!=#]:not(.external)', // внутри него ищем все ссылки, которые мы будем подгружать AJAXом
content: '.screen',    // загружать будем только то, что находится внутри данного селектора
title  : '.titlebar',  // внутри данного элемента ищем заголовок
back   : '.titlebar'   // внутрь данного элемента запихиваем кнопку назад
});


iTabs


Табы с иконками, простая инициализация:
<script type="text/javascript" src="js/ui/ui.iTabs.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $(".tabbar").iTabs();
    }); 
</script>
 
<ul class="tabbar">
    <!-- ссылка указывает на идентификатор таба -->
    <li><a class="iicon" href="#mail" title="Mail"><em class="ii-envelope"></em>Mail</a></li>
    <li><a class="iicon" href="#chat" title="Chat"><em class="ii-chat2"></em>Chat</a></li>
    <li><a class="iicon" href="#search" title="Search"><em class="ii-magnify"></em>Search</a></li>
    <li><a class="iicon" href="#options" title="Options"><em class="ii-gear2"></em>Options</a></li>
</ul>
 
<div id="mail" title="Mail">...</div>
<div id="chat" title="Chat">...</div>
<div id="search" title="Search">...</div>
<div id="options" title="Options">...</div>


Предсказуемый результат:
iTabs Widget

iScroll


Вертикальный скролинг, изначально идея/код был взят отсель: Реализация айФонных UI прелестей с помощью jQuery, но при дальнейшей переработке получился вполне полноценный и самостоятельный продукт:

iScroll Widget

Для работы требует плагин jQuery Mousewheel, опционально можно подключить плагин disableTextSelect — и тогда текст не будет выделятся при скроле с помощью курсора.

HTML Код:
<script type="text/javascript" src="js/other/jquery.disable.text.select.js"></script>
<script type="text/javascript" src="js/other/jquery.mousewheel.js"></script>
<script type="text/javascript" src="js/ui/ui.iScroll.js"></script>
 
<div class="iscroll" style="height:200px;">
Lorem Ipsum…
</div>


iGallery


Галерея картинок, для пролистывания изображения вам прийдется его «перетаскивать», аналогично iPhone интерфейсу:

iGallery Widget

HTML Код:
<script type="text/javascript" src="js/ui/ui.iGallery.js"></script>
 
<div class="igallery" style="width:320px;height:480px">
    <img src="images/home.jpg" alt="Home Screen"/>
    <img src="images/list.jpg" alt=""/>
    <img src="images/list_edit.jpg" alt=""/>
</div>


Элементы форм


Тут целый набор виджетов которые заменяют привычные нам элементы форм:
  • iInput
  • iPassword — может использовать плагин dPassword
  • iCheckBox — рекомендую использовать с плагином backgroundPosition, для более плавного переключения чекбокса
  • iRadioButton
  • iSelect — требует уже упомянутый mousewheel плагин


HTML Код:
<script type="text/javascript" src="js/ui/ui.iInput.js"></script>
<script type="text/javascript" src="js/ui/ui.iPassword.js"></script>
<script type="text/javascript" src="js/ui/ui.iCheckBox.js"></script>
<script type="text/javascript" src="js/ui/ui.iRadioButton.js"></script>
<script type="text/javascript" src="js/ui/ui.iSelect.js"></script>
 
<script type="text/javascript" src="js/other/jquery.dPassword.js"></script>
<script type="text/javascript" src="js/other/jquery.backgroundPosition.js"></script>
<script type="text/javascript" src="js/other/jquery.mousewheel.js"></script>
 
<input class="iinput" type="text" id="login" name="login" value=""/>
<input class="ipassword" type="password" id="password" name="password" value=""/>
 
<input class="icheckbox" type="checkbox" id="remember" name="remember" value="1"/> <label for="remember">remember me</label>
 
<input class="icheckbox" type="checkbox" id="noremember" name="noremember" value="1" checked="checked"/> <label for="noremember">forgot me</label>
 
<input class="iradiobutton" type="radio" name="type" id="type_abc" value="ABC" checked="checked" /> <label for="type_abc">ABC</label>
<input class="iradiobutton" type="radio" name="type" id="type_def" value="DEF" /> <label for="type_def">DEF</label>
<input class="iradiobutton" type="radio" name="type" id="type_ghi" value="GHI" /> <label for="type_ghi">GHI</label>
 
<select class="iselect" name="options" style="width:100%">
    <option>Option 1</option>
    <option selected="selected">Option 2</option>
    <option>Option 3</option>
    <option>Option 4</option>
</select>


Результат:
Form Elements WidgetsiSelect Widget

P.S.


Я надеюсь, данная библиотека Вам пригодится, если заметили баги — пишите репорты, если у вас нет Google аккаунта — пишите в комментариях…

RSS моего блога доступен по адресу http://anton.shevchuk.name/feed/, а твиттер тут http://twitter.com/AntonShevchuk
+59
7 сентября 2009, 13:56
67

комментарии (29)

0
NickMitin #
> Галерея картинок, для пролистывания изображения вам прийдется его «перетаскивать», аналогично iPhone интерфейсу.

+2
NickMitin #
Я бы на вашем месте не увлекался. Что хорошо для для тач-интерфейсов, может быть очень неудобно для мыши/клавиатуры.
0
DnV #
С каких пор айфоном управляют мышкой/клавиатурой? :)
+1
NickMitin #
бибилотека jQuery iPhone UI предназначена для desktop-браузеров и имитирует интерфейс iPhone
0
DnV #
Извиняюсь, мне даже в голову не пришло, что это имитация для браузера ) И картинка с айфоном. Специфическая вещь получается, массовое применение так с ходу и не придумать.
+4
pnd_ku #
не сочтите за рекламу, но
iwebkit.net/
:)
–2
Steward #
и что?.. я попробовал их Demo в FF открыть — убогий ужас
+4
pnd_ku #
что так сурово то и безаппеляционно? оО
я может быть чего-то не понимаю, но стили иФона сделаны для иФона а не для ФФ :)
а на иФоне выглядит всё как и должно выглядеть
0
Steward #
эмммм… при чём тут стили иФона? вы смотрели оба демо? разницу ощущаете?
вот я и написал своё впечатление — у Антона более-менее я бы даже сказал — хорошо, а предложенный вами — просто пипец… ака убогий ужас.
0
pnd_ku #
при том, что, как мне показалось, оба фреймворка сделаны для рендеринга сайтов в псевдо-нативном иФоновском ГУИ, и пользы от фреймоврков в не-иФон устройствах минимум :)
я не в коем случае не говорю ничего плохого про работу автора сего топика, а всего лиш предлагаю посматреть альтернативу — может кому-нибудь сгодица :)

и спорить по этому поводу уж точно не хочу, ибо с чем работать — личное дело каждого ;)
0
elfxf #
стили айфона тут при том, что это графическая библиотека для айфона) пользователи нормальных десктопов смотрят на нормальный дизайн, пользователи айфонов — на айфонный, что тут непонятного?

это библиотеки для создания сайтов для айфонов, похожих на native-iphone приложения. в firefox это смотреть не нужно
0
RomanNikitin #
мне кажется — оба фреймворка предназначены для написания сайтов в стиле айфона для самого айфона.
0
l0rda #
пробовали разрабатывать под него?
0
pnd_ku #
пробовал, два сайта… для изменения V в MVC ушло по часу на каждый :)
клиент остался доволен…
есть приятная документация в pdf и кучка семплов
+2
webmix #
библиотека, может, и интересная, но на примере работает все очень уж калично :(
да и вот это: «ненавящевом», «попробывать», «бибилотеки» и пр. стоит подправить.
0
AntonShevchuk #
Спасибо подправил.

Насчет багов — хотелось бы поподробнее…
+1
false #
Интересно, что еще можно оформить в стиле этого телефона?
–1
sulla #
Зделано прелестно.

Вот ещёб список сделать чтобы вверх и вниз прокурчивался плавно и когда отпускаеш мышь ещё и пробегал какоето расстояние по инерции вот как тут

Пруф — 1, 2, 3

И желательно в библиотечку Улучшение ввода пароля, будет смотреться ещё приятнее.
0
AntonShevchuk #
Надо будет посмотреть на скролинг…
dPassword используется в iPassword'e опционально…
0
l2k #
кстати там ошибка — когда список уходит за экран — он должен уходить на ПОЛОВИНУ движения мыши, а не на 1.

p.s. Ждём поддержки Мультитач? :D
0
sulla #
На iphone уходит примерно на одно движение пальца, так что скорее фишка а не ошибка.

пы.сы. да ждём, хочется попробовать работать 10 пальцевым методом )
+2
Grawl #
баги почти незаметны, но они есть.
и, да: в FF пытаюсь прокрутить список иконок, а браузер хватает картинку и пытается её куда-то перетащить. прокрутка получается неудобной: чтобы прокрутить вниз, надо хвататься за то место, где нет кнопок (справа/слева).
и ещё: схватившись, список едет за курсором, а когда я его отпускаю, список от курсора не отлепливается: всё равно куда курсор, туда и список.
а вообще… грандиозно, Антон!
0
Igas #
Нужно к заголовку добавить батоны «назад» и тп… как в галерее на 2м скрине
0
iShaman #
GoogleChrome 4.0
В «Form Elements» в поля Login и Password ничего нельзя ввести.
Инерцию при прокрутке добавить обязательно.
НЛО прилетело и опубликовало эту надпись здесь
0
AntonShevchuk #
Как бы, сыну год и три месяца, так что «прямота» не по месту…
НЛО прилетело и опубликовало эту надпись здесь
0
slatvick #
Отличная работа. Попробую сделать прототип заказчику в следующий раз.
0
ITdirector #
У меня не получилось подружить вкладки и менюшки (чтобы в каждой вкладке было свое меню)

А так — большое спасибо, отличное средство быстрого прототипирования и генерации красивых картинок для презентаций и анонсов

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