Реализация айФонных UI прелестей с помощью jQuery. Часть 1.

Реализация айФонных UI прелестей с помощью jQuery. Часть 1.

Всякий, кто когда-либо держал в руках продукцию apple, испытал на себе wow-эффект от приятных как на ощупь, так и внешне привлекательных продуктов. Но сегодня мы сконцентрируемся не на воспевании яблочной корпорации, а присмотримся к элементам интерфейса таких девайсов как iPhone и iPod touch.

Это первая статья из цикла, посвященного реализации элементов интерфейса айфона на JavaScript, используя jQuery.

Надеюсь всем понравится. Я, например, очень доволен :)

В этой части мы попробуем использовать плагин jQuery mousewheel, который контролирует прокрутку колесика мыши.

Первое что мы сделаем, нарисуем iPhone, чтобы можно было оценивать плоды нашего труда сравнивая непосредственно с оригиналом.

Хотя нет, рисовать не будем. Возьмем со smashingmagazine. Хорошо прорисованый набор элементов дизайна. Он нам пригодится.

Мы будем делать список элементов, расположеных по алфавиту. То есть как на iPhone реализованы контакты и просмотр альбомов в музыке.

Верстка и CSS нехитрые, поэтому не буду цитировать здесь код. Я думаю, что если вы захотите, сами разберетесь как смотреть исходник.

Итак. Шаблон верстки.

Теперь, когда шаблон готов, подключим плагин jQuery.mousewheel. Он позволяет нам отлавливать событие прокрутки колесика мыши, и делать с этим событие что нам вздумается. Мы, например сделаем плавную прокрутку содержимого нашего виртуального айфона. По умолчанию она плавная только в Опере.

Итак, скрипт:

<script type="text/javascript">
$(document).ready(function(){
var margintop = 0;
$('#myIphoneDiv')
.mousewheel( function (event, delta)
{
if ( delta > 0 ){
margintop -= 60;
$('#innerDiv').animate({'marginTop':margintop});
}
else if ( delta < 0 ){
margintop+=60;
$('#innerDiv').animate({'marginTop':margintop});
} event.stopPropagation();
event.preventDefault();
});

});
</script>

 

Функции event.stopPropagation() и event.preventDefault() нужны нам для того чтобы при прокрутке колесика внутри айфона, внешная страница не моталась (в том случае если там будет скролл)

Теперь сделаем еще такую вещь. При прокрутке более чем в конец списка или в менее чем в начало, наш скрипт должен возвращать нас соответственно в конец или в начало. Разумеется плавно.

<script type="text/javascript">
$(document).ready(function(){
var difference = $('#innerDiv').height() - $('#myIphoneDiv').height();
var margintop = 0;
$('#myIphoneDiv')
.mousewheel( function (event, delta)
{
if( ( margintop <= 0 ) && ( margintop + difference >= 0 ) )
{
$('#innerDiv').stop();
if ( delta > 0 ){
margintop -= 60;
$('#innerDiv').animate({'marginTop':margintop},
function()
{
if( difference + margintop < 0 ) {
margintop = -difference;
$('#innerDiv').animate({'marginTop':margintop})
}
});
}
else if ( delta < 0 ){
margintop+=60;
$('#innerDiv')
.animate({'marginTop':margintop},
function()
{
if( margintop > 0 ) {
margintop=0;
$('#innerDiv').animate({'marginTop':margintop})
}
});
}
}
event.stopPropagation();
event.preventDefault();
});
});
</script>

Результат.

Дальше — больше. Читаем продолжение.

От читателей жду предложений и идей. Если есть какие-то вопросы — задавайте.

Всем интересной рабочей недели!

 

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

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

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

Steward
У меня глюки в голове или вы перепутали направление вращения колеса мыши?
Денис Чистяков
@Steward
Вы наверное в опере смотрите?
Слышал, что у какой-то ее версии была с этим путаница и там все было задом на перед )
Кстати в Опера 9.00 смотреть страшно, все крутиться правильно но список не ограничивается экраном айфона показывается весь полностью.
#
Денис Чистяков
k-life.ru
В айфоне прокрутка с затуханием сделана. Поэтому там скольжение списка смотрится естественно, а в данном примере нет.
#
k-life.ru
surger
Здорово сделано :)
#
surger
Виктор Б.
В хроме тоже проблемы с прокруткой.
#
Виктор Б.
Steward
смотрю 3-м фаерфоксом
Snowcore
А почему ссылки не рабочие?
s1ver
Все ссылки работают.
Здоровский урок.
#
s1ver
mohno
Классно. Жду продолжения.
#
mohno
Smitana
как-то не в ту сторону но супер!
#
Smitana
Глазунов Иван
Использую такую систему прокрутки в одном из своих проектов. Появились сложности - не могу ограничить область действия прокрутки.

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

Я хорошо владею jQuery, но прикрутка к функция .mouseover не привела не к чему. Прошу о помощи.
#
Глазунов Иван
Evgenij
Иван, в примерах работы плагина mousewheel как раз есть демонстрация того, как можно сделать, чтобы один блок был внутри другого и прокрутка работала на них отдельно.

На сайте автора этого нету, но на гитхабе есть архивчик с плагином и примером
Глазунов Иван
Огромное спасибо, Evgenij! Очень и очень сильно благодарствую!
#
Глазунов Иван
Глазунов Иван
Евгений, попробуйте поставить вместо marginTop - marginLeft.

Я пытаюсь сделать прокрутку горизонтальную, но она работает везде кроме как в Google Chrome, подскажите пожалуйста как реализовать такой эффект? И вообще возможно ли это...
#
Глазунов Иван
Evgenij
Иван, конечно возможно. Код по идее не меняется. Если не получается, кидайте ссылку на ваш пример - посмотрим, разберемся.
TjRus
зацените вот такую вот реализацию iPhone фишек: http://ensoul.me/
TjRus
естественно работает только в новых браузерах + ориентированно под macOS (но под виндой тоже работает, только со шрифтами трабл) - http://ensoul.me/3b
Борис
А как поменять направление прокрутки мышки, а то для настольного ПК непривычно не туда двигается

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

как выглядит какой тег
жирный текст <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