Полноэкранная книга с помощью jQuery и CSS3
В наше время почти всё есть в онлайне — музыка, фильмы, игры, книги. Вот последнее было намного удобнее читать если бы книги имитировали настоящие книги, была анимация перелистывания страниц, оглавление. И в этом уроке мы создадим такую книгу, в которой будут присутствовать все эти элементы. В уроке мы будем использовать несколько jQuery плагинов, которые помогут достичь нужного эффекта.
Вообще, легче увидеть и понять что я здесь хочу вам сказать 🙂 . Пример таблиц с плавающими колонками и заголовком можно увидеть здесь:
Посмотреть примерСкачать
Используемые плагины
Нам понадобятся следующие jQuery плагины:
HTML часть
Создадим структуру книги из тех элементов, из которых она обычно состоит(стрелки на следующую и предыдущую страницу, кнопка вызова оглавления и само оглавление, а также каждую страницу в отдельном блоке с классом bb-item и идентификатором item#):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <div id="container" class="container"> <div class="menu-panel"> <h3>Содержание</h3> <ul id="menu-toc" class="menu-toc"> <li class="menu-toc-current"><a href="#item1">Страница 1</a></li> <li><a href="#item2">Страница 2</a></li> <li><a href="#item3">Страница 3</a></li> <li><a href="#item4">Страница 4</a></li> <li><a href="#item5">Страница 5</a></li> </ul> </div> <div class="bb-custom-wrapper"> <div id="bb-bookblock" class="bb-bookblock"> <div class="bb-item" id="item1"> <div class="content"> <div class="scroller"> <h2>Страница 1</h2> <p>...</p> </div> </div> </div> <div class="bb-item" id="item2"><!-- ... --></div> <div class="bb-item" id="item3"><!-- ... --></div> <div class="bb-item" id="item4"><!-- ... --></div> <div class="bb-item" id="item5"><!-- ... --></div> </div> <nav> <a id="bb-nav-prev" href="#">←</a> <a id="bb-nav-next" href="#">→</a> </nav> <span id="tblcontents" class="menu-button">Содержание</span> </div> </div> |
CSS часть
Все стили плагина BookBlock находятся в файле bookblock.css.
Сначала подключаем необходимый шрифт:
1 | @import url(http://fonts.googleapis.com/css?family=Lato:300,400,700); |
Книга у нас будет на всю высоту, поэтому высоту выставляем 100%. Также прописываем цвет и шрифт текста:
1 2 3 4 5 6 7 8 9 10 11 | html { height: 100%; } body { font-family: 'Lato', Calibri, Arial, sans-serif; font-weight: 400; font-size: 100%; color: #333; height: 100%; } |
Определяем стиль ссылок:
1 2 3 4 5 6 7 8 | a { color: #555; text-decoration: none; } a:hover { color: #000; } |
Главный контейнер с текстом занимает всю ширину экрана 100х100 процентов. А оглавление у нас будет как бы сдвигать часть с текстом при открытии.
1 2 3 4 5 6 7 8 9 10 11 12 | .container, .bb-custom-wrapper, .bb-bookblock { width: 100%; height: 100%; } .container { position: relative; left: 0px; transition: left 0.3s ease-in-out; } |
Когда мы нажимаем на кнопку чтобы раскрыть оглавление, мы добавляем еще один класс, в котором содержится ширина оглавления:
1 2 3 | .slideRight { left: 240px; } |
Без Javascript у нас не получится динамически присвоить свойство, поэтому сразу сделаем отступ слева:
1 2 3 | .no-js .container { padding-left: 240px; } |
По умолчанию оглавление у нас слева:
1 2 3 4 5 6 7 8 9 10 | .menu-panel { background: #f1103a; width: 240px; height: 100%; position: fixed; z-index: 1000; top: 0; left: 0; text-shadow: 0 1px 1px rgba(0,0,0,0.1); } |
Когда Javascript включен, мы можем задать отрицательное значение и спрятать оглавление:
1 2 3 4 | .js .menu-panel { position: absolute; left: -240px; } |
Зададим стили для элементов оглавления:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | .menu-panel h3 { font-size: 1.8em; padding: 20px; font-weight: 300; color: #fff; box-shadow: inset 0 -1px 0 rgba(0,0,0,0.05); } .menu-toc { list-style: none; } .menu-toc li a { display: block; color: #fff; font-size: 1.1em; line-height: 3.5; padding: 0 20px; cursor: pointer; background: #f1103a; border-bottom: 1px solid #dd1338; } .menu-toc li a:hover, .menu-toc li.menu-toc-current a{ background: #dd1338; } |
Навигация по страницам находится всегда вверху и она зафиксирована:
1 2 3 4 5 6 | .bb-custom-wrapper nav { top: 20px; left: 60px; position: absolute; z-index: 1000; } |
Также пропишем стили для стрелок, которые также осуществляют «перелистывание» страниц:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | .bb-custom-wrapper nav span, .menu-button { position: absolute; width: 32px; height: 32px; top: 0; left: 0; background: #f1103a; border-radius: 50%; color: #fff; line-height: 30px; text-align: center; speak: none; font-weight: bold; cursor: pointer; } .bb-custom-wrapper nav span:last-child { left: 40px; } .bb-custom-wrapper nav span:hover, .menu-button:hover { background: #000; } |
Кнопка открытия/закрытия оглавления располагается в левом верхнем углу:
1 2 3 4 5 6 | .menu-button { z-index: 1000; left: 20px; top: 20px; text-indent: -9000px; } |
Сейчас создадим маленькую иконку оглавления:
1 2 3 4 5 6 7 8 9 10 11 | .menu-button:after { position: absolute; content: ''; width: 50%; height: 2px; background: #fff; top: 50%; margin-top: -1px; left: 25%; box-shadow: 0 -4px #fff, 0 4px #fff; } |
Но в случае, когда Javascript отключен, нам не нужны элементы открытия/закрытия оглавления, поэтому их можно спрятать:
1 2 3 4 | .no-js .bb-custom-wrapper nav span, .no-js .menu-button { display: none; } |
Javascript часть
Подключаем все необходимые плагины в конце страницы:
1 2 3 4 5 6 | <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="js/jquery.mousewheel.js"></script> <script src="js/jquery.jscrollpane.min.js"></script> <script src="js/jquerypp.custom.js"></script> <script src="js/jquery.bookblock.js"></script> <script src="js/page.js"></script> |
Всё необходимое для правильной работы с классами, которые заданы сейчас, прописано в файле page.js.
Нам лишь остается вставить в конце страницы небольшой Javascript код вызова функции:
1 2 3 4 5 | <script> $(function() { Page.init(); }); </script> |
Вывод
Действительно красивая книга. Ее читать было бы очень удобно, если бы те сайты, на которых можно читать книги онлайн, сделали это в виде такой вот книги 🙂 .
Успехов!
Источник: http://tympanus.net/codrops/2012/12/11/fullscreen-pageflip-layout/
Спасибо за ваше обращение!
Мы свяжемся с вами в течение 2-х часов (график работы: пн-пт, с 10 до 19)
Действительно красивая книга получилась. Спасибо. И вообще, всегда с интересом читаю Ваши статьи!
😎
Спасибо, Александр. Приятно видеть что не зря пишу 🙂
Добрый день . Большое спасибо книга получилась. Подскажите пожалуйста как еще добавить страниц. Желаю счастья и удачи.
Спасибо, Валентина! Чтобы добавить еще одну страницу нужно после блока (там где закрывается тег </div>) с классом «bb-item» и идентификатором «item5» (то есть мы добавляем 6-ю страницу), вставить следующий код:
<div class="bb-item" id="item6">
<div class="content">
<div class="scroller">
<h2>Страница 6</h2>
<p>Ваш текст</p>
</div>
</div>
</div>
Если что-то не получается — обязательно пишите. 🙂
Добрый день . Подскажите пожалуйста как добавить страницу динамически. Т.е. у меня есть несколько , а я хочу уже к имеющимся добавить еще одну «на-лету»? спасибо.
Олег, здравствуйте! Например вы добавите еще одну страницу, но нужно придумать где ее хранить, в базе данных? Тогда нужно еще на PHP написать код записи в БД. Ведь если вы выйдете из браузера, а потом заново зайдете — ваша страница исчезнет.
Добрый день, Юрий, подскажите, можно ли прикрутить данное чудо к сайту на WordPress, чтобы контент в книге выводился из записи
Здравствуйте, Вячеслав. Такое сделать можно, ведь это всего лишь разметка страницы.
Добрый день. Подскажите где находится сам скрипт для перелистывания страниц
Здравствуйте. Скрипт находится в файле jquery.bookblock.js.
Здравствуйте. Не подскажите можно ли добавить кнопку для прокрутки в начало страницы, я перепробовал кучу кодов, но ничего не работает.
Здравствуйте Юрий.
Подскажите пожалуйста как сделать прокрутку в содержании? И еще нюанс — по протоколу https:// книга не работает, как исправить?