Как найти книги в html

вставить pdf на сайт
Как вставить видеоролик, аудио или flash на сайт знают все, а как разместить на сайте книгу pdf в виде удобной читалке читайте в этой статье.
Оглавление:

  1. Простой код размещения книги pdf на сайте,
  2. Вставить pdf-файл  c помощью google диск
  3. Книга на сайте в виде удобной читалки с эффектом перелистывания страниц.

Размещаем книгу pdf с помощью кода html

Вы можете загрузить pdf-файл книги на сайт. Если у вас blogger, то вы не сможете загрузить pdf – в этом случае вы можете загрузить файл на ucoz в файловом менеджере или в сообщение блога liveinternet.ru.

Загружаем на ucoz – в админ панели переходим в радел “Файловый менеджер” –> загрузить файл и скопируйте прямую ссылку:
ucoz

Второй способ получения прямой ссылки на файл pdf – загрузка в сообщение блога liveinternet.ru. Создайте запись в расширенном режиме и загрузите ваш файл в виде вложения. Опубликуйте сообщение. Скопируйте ссылку на файл:
2014-06-03_18-22-45

Подставляем ссылку на файл в код:

<iframe src="http:/spishu.ru/Zarabotok-na-partnerskih-programmah.pdf" />

или так:

<iframe height="480" src="https://spishu.ru/Zarabotok-na-partnerskih-programmah.pdf" width="500"></iframe>

Замените ссылку, выделенную желтым на вашу ссылку на книгу в формате pdf.
Пример:

Как разместить книгу на сайте с google диск

Загружаем pdf-файл на google диск и открываем ссылку. Не забудьте сделать загруженный файл общедоступным.
настройка-доступа
Осталось получить код вставки книги для размещения в блоге: Файл –> Опубликовать в интернете
2014-06-03_18-37-09
гугл диск
Пример

Размещаем книгу в виде читалки

Для этого нам нужно зарегистрироваться на сайте https://issuu.com/.
Загружаем книгу в форматах pdf, doc, ppt и др, но не более 500 листов через функцию upload. Дожидаемся загрузки, даем название, описание публикации и, если вы хотите, чтобы ваши посетители могли скачивать вашу книгу, отмечаем флажок напротив “Readers can download”.

На данный момент вставить книгу с сайта https://issuu.com/ возможно только в премиум версии.

2014-06-03_18-47-56
После публикации (Кнопка “Publish now”), просматриваем книгу – “Open Publication”.
Для того, чтобы получить код книги для публикации на сайте или в блоге под просмотром книги перейдите по ссылкам Share –> Embed и выберите подходящий код для вашего ресурса:
книга
Это может быть скрипт или iFrame-код.

Esso11

5 / 5 / 0

Регистрация: 20.08.2017

Сообщений: 685

1

06.03.2019, 19:51. Показов 7013. Ответов 18

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

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

PHP/HTML
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
<html>
<head>
    <meta charset="utf-8">
 
    <link rel="stylesheet" href="3_4(2).css">
 
</head>
<body>
 
<ul >
<ol id="t">1. JavaScript: The Good Parts («JavaScript. Сильные стороны»)</ol>
<ol id="t">2. You Don’t Know JS («Вы не знаете JS»)</ol>
<ol id="t">3. Eloquent JavaScript: A Modern Introduction to Programming («Выразительный Javascript»)</ol>
<ol id="t">4. Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript («Сила JavaScript. 68 способов эффективного использования JS»)</ol>
<ol id="t">5. JavaScript: The Definitive Guide («JavaScript. Подробное руководство»)</ol>
<ol id="t">6. Secrets of the JavaScript Ninja («Секреты JavaScript ниндзя»)</ol>
<ol id="t">7. JavaScript Patterns: Build Better Applications with Coding and Design Patterns («JavaScript. Шаблоны»)</ol>
<ol id="t">8. The Principles of Object-Oriented JavaScript («Принципы ООП в Javascript»)</ol>
<ol id="t">9. Programming JavaScript Applications: Robust Web Architecture with Node, HTML5, and Moderns JS Libraries («Программирование приложений на JavaScript. Устойчивая веб-архитектура с помощью Node, HTML5 и современных JS-библиотек»)</ol>
<ol id="t">10. Beginning JavaScript («JavaScript. Основы»)</ol>
</ul>
 
    <script>
var elem = document.getElementById("t");
t.onclick= function()
{
if(this.style.backgroundColor)
this.style.backgroundColor="";
else
this.style.backgroundColor="Orange";
}
 
  </script>
  
  
</body>
</html>

но моя белеберда не работает подскажите как это исправить что бы хоть менялся цвет при нажатии на название книги



0



523 / 380 / 244

Регистрация: 31.05.2016

Сообщений: 1,035

06.03.2019, 20:11

2



0



5 / 5 / 0

Регистрация: 20.08.2017

Сообщений: 685

06.03.2019, 20:14

 [ТС]

3

sash23, да, именно так, а можно комментарий к вашему коду?



0



sash23

523 / 380 / 244

Регистрация: 31.05.2016

Сообщений: 1,035

06.03.2019, 20:25

4

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var list = document.querySelectorAll('.bookList ol'); // Извлекаем все элементы списка
 
// Это обработчик клика
function setSelected() {
  // сначала удаляем класс selected у всех элементов
  document.querySelectorAll('.bookList ol.selected').forEach(function (el) {
    el.classList.remove('selected');
  });
  this.classList.add('selected'); // здесь добавляем класс элементу на который кликнули
}
 
// здесь навешиваем наш обработчик на элементы списка
list.forEach(function(ol) {
   ol.onclick = setSelected;
});
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<ul class="bookList">
<ol>1. JavaScript: The Good Parts («JavaScript. Сильные стороны»)</ol>
<ol>2. You Don’t Know JS («Вы не знаете JS»)</ol>
<ol>3. Eloquent JavaScript: A Modern Introduction to Programming («Выразительный Javascript»)</ol>
<ol>4. Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript («Сила JavaScript. 68 способов эффективного использования JS»)</ol>
<ol>5. JavaScript: The Definitive Guide («JavaScript. Подробное руководство»)</ol>
<ol>6. Secrets of the JavaScript Ninja («Секреты JavaScript ниндзя»)</ol>
<ol>7. JavaScript Patterns: Build Better Applications with Coding and Design Patterns («JavaScript. Шаблоны»)</ol>
<ol>8. The Principles of Object-Oriented JavaScript («Принципы ООП в Javascript»)</ol>
<ol>9. Programming JavaScript Applications: Robust Web Architecture with Node, HTML5, and Moderns JS Libraries («Программирование приложений на JavaScript. Устойчивая веб-архитектура с помощью Node, HTML5 и современных JS-библиотек»)</ol>
<ol>10. Beginning JavaScript («JavaScript. Основы»)</ol>
</ul>
CSS
1
2
3
4
5
6
7
.bookList ol {
  cursor: pointer;
}
 
.selected {
  color: orange;
}



0



5 / 5 / 0

Регистрация: 20.08.2017

Сообщений: 685

06.03.2019, 20:32

 [ТС]

5

sash23, а зачем ……сначала удаляем класс selected у всех элементов



0



Эксперт JS

2033 / 1092 / 408

Регистрация: 29.04.2016

Сообщений: 2,612

06.03.2019, 20:49

6

Esso11, что бы эемент который выделен стал черным



1



5 / 5 / 0

Регистрация: 20.08.2017

Сообщений: 685

06.03.2019, 20:54

 [ТС]

7

Mr_Sergo, а где про это прочесть можно я не пойму все равно для чего это ну станет черным… рочему нельзя сразу взять елемент такой какой он есть



0



Эксперт JS

2033 / 1092 / 408

Регистрация: 29.04.2016

Сообщений: 2,612

06.03.2019, 20:59

8

Цитата
Сообщение от Esso11
Посмотреть сообщение

а где про это прочесть можно

Не знаю, это логика придуманная автором…

Цитата
Сообщение от Esso11
Посмотреть сообщение

для чего это ну станет черным

ну вам же нужно что бы цвета переключались? для этого и становится обратно черным

Добавлено через 29 секунд

Цитата
Сообщение от Esso11
Посмотреть сообщение

рочему нельзя сразу взять елемент такой какой он есть

вот этого не понял



0



sash23

523 / 380 / 244

Регистрация: 31.05.2016

Сообщений: 1,035

06.03.2019, 21:24

9

Esso11, если этого не сделать то при следующем клике предыдущий элемент останется оранжевым.

Добавлено через 11 минут
немного другой вариант

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const list = document.querySelectorAll('.bookList ol'); // Извлекаем все элементы списка
 
// Это обработчик клика
function setSelected(event) {
  // сначала удаляем класс selected у текущего выбранного элемнета 
  const selected = document.querySelector('.bookList ol.selected');
  if(selected) {
    selected.classList.remove('selected');
  }
  // здесь добавляем класс элементу на который кликнули
  event.currentTarget.classList.add('selected');
}
 
// здесь навешиваем наш обработчик на элементы списка
list.forEach(function(ol) {
   ol.onclick = setSelected;
})



1



5 / 5 / 0

Регистрация: 20.08.2017

Сообщений: 685

07.03.2019, 20:49

 [ТС]

10

Mr_Sergo, подскажите почему может не работать ваш код? ошибок нет но цвета не меняет(((



0



Mr_Sergo

Эксперт JS

2033 / 1092 / 408

Регистрация: 29.04.2016

Сообщений: 2,612

07.03.2019, 22:12

11

Цитата
Сообщение от Esso11
Посмотреть сообщение

ваш код?

Не знаю где вы тут нашли мой код я бы сделал немного по-другому -> https://codepen.io/Mr_Sergo/pen/RdpOBL

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<ul class="bookList">
    <ol>1. JavaScript: The Good Parts («JavaScript. Сильные стороны»)</ol>
    <ol>2. You Don’t Know JS («Вы не знаете JS»)</ol>
    <ol>3. Eloquent JavaScript: A Modern Introduction to Programming («Выразительный Javascript»)</ol>
    <ol>4. Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript («Сила JavaScript. 68 способов эффективного использования JS»)</ol>
    <ol>5. JavaScript: The Definitive Guide («JavaScript. Подробное руководство»)</ol>
    <ol>6. Secrets of the JavaScript Ninja («Секреты JavaScript ниндзя»)</ol>
    <ol>7. JavaScript Patterns: Build Better Applications with Coding and Design Patterns («JavaScript. Шаблоны»)</ol>
    <ol>8. The Principles of Object-Oriented JavaScript («Принципы ООП в Javascript»)</ol>
    <ol>9. Programming JavaScript Applications: Robust Web Architecture with Node, HTML5, and Moderns JS Libraries («Программирование приложений на JavaScript. Устойчивая веб-архитектура с помощью Node, HTML5 и современных JS-библиотек»)</ol>
    <ol>10. Beginning JavaScript («JavaScript. Основы»)</ol>
</ul>
Javascript
1
2
3
4
5
6
7
8
function setSelected(e) {
    if(e.target.tagName == 'OL'){
        var selected = document.querySelector('.bookList .selected');
        if(selected) selected.classList.remove('selected');
        e.target.classList.add('selected');
    }
}
document.querySelector('.bookList').addEventListener('click',setSelected);
CSS
1
2
3
4
5
6
7
.bookList ol {
  cursor: pointer;
}
 
.selected {
  color: orange;
}

Код мог не работать из-за синтаксиса

Добавлено через 4 минуты
Esso11, так работает?



0



супермизантроп

Эксперт JS

3938 / 2976 / 692

Регистрация: 18.04.2012

Сообщений: 8,625

08.03.2019, 17:41

12

Цитата
Сообщение от Esso11
Посмотреть сообщение

а можно комментарий

можно, только сначала изучите HTML-теги unordered lists <UL>, ordered lists <OL> и list items <LI>
иначе смысла нет комментировать

Mr_Sergo, вас моя рекомендация тоже касается



1



523 / 380 / 244

Регистрация: 31.05.2016

Сообщений: 1,035

08.03.2019, 18:18

13



0



Mr_Sergo

Эксперт JS

2033 / 1092 / 408

Регистрация: 29.04.2016

Сообщений: 2,612

08.03.2019, 20:27

14

Тут вообще без JS можно было -> https://codepen.io/Mr_Sergo/pen/KEmEKz

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<ul>
    <a href="#acc1"><li id="acc1">JavaScript: The Good Parts («JavaScript. Сильные стороны»)</li></a>
    <a href="#acc2"><li id="acc2">You Don’t Know JS («Вы не знаете JS»)</li></a>
    <a href="#acc3"><li id="acc3">Eloquent JavaScript: A Modern Introduction to Programming («Выразительный Javascript»)</li></a>
    <a href="#acc4"><li id="acc4">Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript («Сила JavaScript. 68 способов эффективного использования JS»)</li></a>
    <a href="#acc5"><li id="acc5">JavaScript: The Definitive Guide («JavaScript. Подробное руководство»)</li></a>
    <a href="#acc6"><li id="acc6">Secrets of the JavaScript Ninja («Секреты JavaScript ниндзя»)</li></a>
    <a href="#acc7"><li id="acc7">JavaScript Patterns: Build Better Applications with Coding and Design Patterns («JavaScript. Шаблоны»)</li></a>
    <a href="#acc8"><li id="acc8">The Principles of Object-Oriented JavaScript («Принципы ООП в Javascript»)</li></a>
    <a href="#acc9"><li id="acc9">Programming JavaScript Applications: Robust Web Architecture with Node, HTML5, and Moderns JS Libraries («Программирование приложений на JavaScript. Устойчивая веб-архитектура с помощью Node, HTML5 и современных JS-библиотек»)</li></a>
    <a href="#acc10"><li id="acc10">Beginning JavaScript («JavaScript. Основы»)</li></a>
</ul>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
li{
    margin: 0px 0px 0px 0px;
    padding: 10px;
    list-style-type: none;
}
li:target {
    background: #9C27B0;
    color: #fff;
    -webkit-transition: all 0.2s ease;
    -moz-transition: all 0.2s ease;
    -ms-transition: all 0.2s ease;
    -o-transition: all 0.2s ease;
    transition: all 0.2s ease;
}
 
a{
    text-decoration: none;
    color: #000;
}
a:hover{
    color: orange;
}



0



mrtoxas

Эксперт JSЭксперт HTML/CSS

3824 / 2674 / 1521

Регистрация: 12.07.2015

Сообщений: 6,674

Записей в блоге: 4

08.03.2019, 20:28

15

Цитата
Сообщение от Mr_Sergo
Посмотреть сообщение

без JS

HTML5
1
2
3
4
5
6
7
8
9
10
11
<ol>
  <li>
    <label><input type="radio" name="list"><span>JavaScript: The Good Parts («JavaScript. Сильные стороны»)</span></label>
  </li>
  <li>
    <label><input type="radio" name="list"><span>You Don’t Know JS («Вы не знаете JS»)</span></label>
  </li>
  <li>
    <label><input type="radio" name="list"><span>Secrets of the JavaScript Ninja («Секреты JavaScript ниндзя»)</span></label>
  </li>
</ol>
CSS
1
2
3
4
5
6
ol input {
  display: none;
}
ol input:checked + span{
  color:red;
}



1



Mr_Sergo

Эксперт JS

2033 / 1092 / 408

Регистрация: 29.04.2016

Сообщений: 2,612

08.03.2019, 20:43

16

mrtoxas,
или так

HTML5
1
2
3
4
5
<ol type="1">
    <a href="#acc1"><li id="acc1">JavaScript: The Good Parts («JavaScript. Сильные стороны»)</li></a>
    <a href="#acc2"><li id="acc2">You Don’t Know JS («Вы не знаете JS»)</li></a>
    <a href="#acc3"><li id="acc3">Eloquent JavaScript: A Modern Introduction to Programming («Выразительный Javascript»)</li></a>
</ol>
CSS
1
2
3
4
5
6
7
li:target{
    color: orange;
}
a{
    text-decoration: none;
    color: #000;
}



0



Эксперт JSЭксперт HTML/CSS

3824 / 2674 / 1521

Регистрация: 12.07.2015

Сообщений: 6,674

Записей в блоге: 4

08.03.2019, 20:47

17

Mr_Sergo, вариант с target будет скроллить страницу



0



Эксперт JS

2033 / 1092 / 408

Регистрация: 29.04.2016

Сообщений: 2,612

09.03.2019, 00:04

18

mrtoxas,
Будет. Это так… мало ли кому интересно будет.

Добавлено через 3 часа 8 минут
Много способов нашел как можно обойтись без JS, в данном случае, но похоже что способ с <input type=»radio» name=»list»> самый адекватно работающий…



0



5 / 5 / 0

Регистрация: 20.08.2017

Сообщений: 685

09.03.2019, 13:08

 [ТС]

19

kalabuni, спасибо за совет



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

09.03.2019, 13:08

19

Вы когда-нибудь задумывались о том, что на HTML и CSS можно сделать книгу? Оказывается, есть умельцы, выкладывающие свои работы на codepen.io, которые с помощью 3D трансформаций могут сделать вполне реалистичные страницы, а также позволить заглянуть внутрь книги. Некоторые примеры нужно смотреть только на большом экране.

Макет книги

Автор Erin E. Sullivan

See the Pen Book Layout by Erin E. Sullivan (@erinesullivan) on CodePen.18892

Открывающаяся книга на чистом CSS

Автор Dhanish

See the Pen CSS Only Flipping Book by Dhanish (@dhanishgajjar) on CodePen.18892

Открывающаяся книга с картинками

Автор Fabrizio Bianchi

See the Pen CSS 3D Bending Effect — Page Flip by Fabrizio Bianchi (@_fbrz) on CodePen.18892

Предзагрузчик в виде книги (блокнота, тетради)

Автор Jon Kantner

See the Pen Book Preloader by Jon Kantner (@jkantner) on CodePen.0

Приоткрытая книга при наведении

Автор Yancy Min

See the Pen Books Hover Animation by Yancy Min (@yancy) on CodePen.18892

Поздравительная открытка

Автор Vladislav

See the Pen [3D] Flip Hover Effects, Book Of Congratulations from the game by Vladislav (@rikanutyy) on CodePen.18892

Приоткрываем книгу при наведении

Автор Rafael

See the Pen Bookshelf by Rafael (@rafaelrinaldi) on CodePen.18892

Отличная анимация открывающейся книги при наведении курсора мыши

Внутри предусмотрена рабочая ссылка Download для скачивания книги.

Автор Ronny Siikaluoma

See the Pen CSS Animated books by Ronny Siikaluoma (@siiron) on CodePen.18892

Эффект 3d книги при клике

Автор NVC

See the Pen Book Group UI by NVC (@Snowing) on CodePen.18892

Поворот книги при движении мышью

Автор Thomas Podgrodzki

See the Pen Book Flip by Thomas Podgrodzki (@Podgro) on CodePen.18892

Автор Anna Sabatini

See the Pen Book. HTML+CSS only. #CodePenChallenge by Anna Sabatini (@sabanna) on CodePen.18892

Анимация поворота книги

Сам пример позволяет посмотреть на книгу с разных сторон, используя переключатели вида книги и камеры. Но лучше всего смотрится  анимация поворота книги. Бесценная вещь для онлайн-магазина!

Автор Alex

See the Pen 3d Lighting Effects in CSS by Alex (@alexmwalker) on CodePen.18892

Листаем книгу

Автор maxew

See the Pen
cpc — bookText by Elen (@ambassador)
on CodePen.0

Книга на столе

Автор Mina Mounir

See the Pen 3D Book Design by Mina Mounir (@mina-mounir) on CodePen.18892

Книжная полка

Автор Yuhomyan

See the Pen Pure CSS Books by Yuhomyan (@yuhomyan) on CodePen.18892

Автор Lynn Fisher

See the Pen Single div CSS book search by Lynn Fisher (@lynnandtonic) on CodePen.18892

Не совсем книжная, но полка с большим количеством элементов

Автор Lynn Fisher

See the Pen CSS collector’s cabinet by Lynn Fisher (@lynnandtonic) on CodePen.18892

Книга в 2-х проекциях

Автор Lynn Fisher

See the Pen CSS coffee table book effect by Lynn Fisher (@lynnandtonic) on CodePen.18892

Автор Tanner Dolby

See the Pen Books — CSS by Tanner Dolby (@tannerdolby)on CodePen.0

Постеры в 2D и 3D

Автор Lynn Fisher

See the Pen CSS leaning card effect by Lynn Fisher (@lynnandtonic) on CodePen.18892

Вариант страницы для книжного магазина

В примере есть сортировка по категориям, алфавиту, дате публикации. При наведении мы видим поворот книги. При клике на кнопке «Details» — дополнительную информацию.

Автор Joe

See the Pen Book Viewer by Joe (@jjcarey) on CodePen.18892

Анимация появления книг

Автор Michael Schofield

See the Pen Library Books CSS Spinner by Michael Schofield (@michaelschofield) on CodePen.18892

Эффект опускания книги при наведении курсора мыши

Автор Lyna Nguyen

See the Pen Book animation (HTML & CSS) by Lyna Nguyen (@WebDevLyna) on CodePen.18892

Слайдер для демонстрации книг

Автор Aysenur Turk

See the Pen
Book Store UI by Aysenur Turk (@TurkAysenur)
on CodePen.0

Второй слайдер с использованием анимации GSAP от автора Jos Faber.

See the Pen
Switch 3D game cover slider with GSAP by Jos Faber (@josfabre)
on CodePen.0

Трехмерная карточка

Трехмерная карточка (3d-card), которая может быть стилизована под книгу.

Автор Amit Sheen

See the Pen 3D CSS card by Elen (@ambassador)
on CodePen.0

Карточки для оплаты

Трехмерные карты для оплаты. Могут быть использованы для стилизации книг или постеров

Автор Andreas Storm

See the Pen Tariff Cards by Elen (@ambassador) on CodePen.0

Трехмерные слои (блоки), парящие в воздухе

Сделано на React. Автор Daniel Barrio Fierro.

See the Pen
Isometric Floating Layers (SVG) by Daniel Barrio Fierro (@db4rr)
on CodePen.0

Просмотров: 2 190

Галерея в виде записной книжки

В данном уроке будет рассмотрено, как использовать и настраивать отличный плагин jQuery Booklet (автор Will Grauvogel). Сделаем страницу в виде записной книжки со ссылками на уроки.

Начнем!

demosourse

Разметка HTML

Структура кода HTML задается разметкой для плагина, которая должна включать элемент div с idmybook”. Также мы добавим несколько навигационных элементов и индикатор загрузки, который будет выводиться во время загрузки контента.

<div class="book_wrapper">

	<a id="next_page_button"></a>
	<a id="prev_page_button"></a>
	
	<div id="loading" class="loading">Загружаем страницы...</div>
	
	<div id="mybook" style="display:none;">
	
		<div class="b-load">
		
			<div>
			
				<img src="images/1.jpg" alt=""/>
				
				<h1>Витаем в облаках - тема для сайта</h1>
				
				<p>В данном уроке с помощью jQuery ...</p>
				
				<a href="#" class="article">Урок</a>
				<a href="#" class="demo">Демонстрация</a>
				
			</div>
			
			<div>
			
				...
				
			</div>
			
			
		</div>
	</div>
</div>

Каждая страница записной книжки размещается внутри элемента div, который также помещен внутрь элемента div с классом “b-load”. Так как плагин позволяет использовать пользовательские кнопки для переворачивания страниц, то в конфигурации мы зададим использование наших ссылок со стрелками.

CSS

Для определения стилей мы зададим «шкурку» для плагина, то есть таблицу стилей, в которой будут переопределяться некоторые стили, которые идут вместе с плагином (поэтому «шкурка» должна подключаться к странице после стилей плагина).

Начнем адаптацию с класса “booklet” и определим для него тени и скругленные углы для рамочки:

.booklet{
	-moz-box-shadow:0px 0px 1px #fff;
	-webkit-box-shadow:0px 0px 1px #fff;
	box-shadow:0px 0px 1px #fff;
	-moz-border-radius:10px;
	-webkit-border-radius:10px;
	border-radius:10px;
}

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

.booklet .b-wrap-left{
	background:#fff url(../images/left_bg.jpg) no-repeat top left;
	-webkit-border-top-left-radius: 10px;
	-webkit-border-bottom-left-radius: 10px;
	-moz-border-radius-topleft:10px;
	-moz-border-radius-bottomleft: 10px;
	border-top-left-radius: 10px;
	border-bottom-left-radius: 10px;
}
.booklet .b-wrap-right{
	background:#efefef url(../images/right_bg.jpg) no-repeat top left;
	-webkit-border-top-right-radius: 10px;
	-webkit-border-bottom-right-radius: 10px;
	-moz-border-radius-topright: 10px;
	-moz-border-radius-bottomright: 10px;
	border-top-right-radius: 10px;
	border-bottom-right-radius: 10px;
}

Также определим стили для нумерации страниц и добавим подходящий верх рамочки:

.booklet .b-counter{
	bottom:10px;
	position:absolute;
	display:block;
	width:90%;
	height:20px;
	border-top:1px solid #ddd;
	color:#222;
	text-align:center;
	font-size:12px;
	padding:5px 0 0;
	background:transparent;
	-moz-box-shadow:0px -1px 1px #fff;
	-webkit-box-shadow:0px -1px 1px #fff;
	box-shadow:0px -1px 1px #fff;
	opacity:0.8;
}

В структуре HTML мы добавили обертку вокруг книги, поэтому мы можем использовать фоновое изображение:

.book_wrapper{
	margin:0 auto;
	padding-top:50px;
	width:905px;
	height:540px;
	position:relative;
	background:transparent url(../images/bg.png) no-repeat 9px 27px;
}

Добавим линию ниже заголовка каждой страницы:

.book_wrapper h1{
	color:#13386a;
	margin:5px 5px 5px 15px;
	font-size:26px;
	background:transparent url(../images/h1.png) no-repeat bottom left;
	padding-bottom:7px;
}

Абзацы и ссылки будут иметь следующие стили:

.book_wrapper p{
	font-size:16px;
	margin:5px 5px 5px 15px;
}
.book_wrapper a.article,
.book_wrapper a.demo{
	display:block;
	height:41px;
	text-decoration:none;
	outline:none;
	font-size:16px;
	color:#555;
	float:left;
	line-height:41px;
}
.book_wrapper a.demo{
	margin-left:100px;
	background:transparent url(../images/circle_demo.png) no-repeat 50% 0px;
	width:145px;
	padding-left:50px;
}
.book_wrapper a.article{
	margin-left:10px;
	background:transparent url(../images/circle_article.png) no-repeat 50% 0px;
	width:45px;
	padding-left:20px;
}
.book_wrapper a.article:hover,
.book_wrapper a.demo:hover{
	background-position:50% -41px;
	color:#13386a;
}

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

.book_wrapper img{
	margin:10px 0px 5px 35px;
	width:300px;
	padding:4px;
	border:1px solid #ddd;
	-moz-box-shadow:1px 1px 1px #fff;
	-webkit-box-shadow:1px 1px 1px #fff;
	box-shadow:1px 1px 1px #fff;
}

Цвет рамки правой страницы нужно сделать немного темнее:

.booklet .b-wrap-right img{
	border:1px solid #E6E3C2;
}

Для стрелок навигации будем использовать спрайт, который содержит все четыре стрелки (на все состояния):

a#next_page_button,
a#prev_page_button{
	display:none;
	position:absolute;
	width:41px;
	height:40px;
	cursor:pointer;
	margin-top:-20px;
	top:50%;
	background:transparent url(../images/buttons.png) no-repeat 0px -40px;
}
a#prev_page_button{
	left:-30px;
}
a#next_page_button{
	right:-30px;
	background-position:-41px -40px;
}
a#next_page_button:hover{
	background-position:-41px 0px;
}
a#prev_page_button:hover{
	background-position:0px 0px;
}

Индикатор загрузки имеет рамку со скругленными углами, и она полупрозрачная. Мы позиционируем его на правой стороне книги:

.loading{
	width:160px;
	height:56px;
	position: absolute;
	top:50%;
	margin-top:-28px;
	right:135px;
	line-height:56px;
	color:#fff;
	padding-left:60px;
	font-size:15px;
	background: #000 url(../images/ajax-loader.gif) no-repeat 10px 50%;
	opacity: 0.7;
	z-index:9999;
	-moz-border-radius:20px;
	-webkit-border-radius:20px;
	border-radius:20px;
}

JavaScript

В jQuery мы просто вызовем плагин после того, как все изображения будут загружены. Описание всех опций плагина можно посмотреть на странице плагина jQuery Booklet:

$(function() {
	var $mybook 		= $('#mybook');
	var $bttn_next		= $('#next_page_button');
	var $bttn_prev		= $('#prev_page_button');
	var $loading		= $('#loading');
	var $mybook_images	= $mybook.find('img');
	var cnt_images		= $mybook_images.length;
	var loaded			= 0;
	//Предварительно загружаем все страницы в книжке,
	//а затем вызываем плагин Booklet
		$mybook_images.each(function(){
		var $img 	= $(this);
		var source	= $img.attr('src');
		$('<img/>').load(function(){
			++loaded;
			if(loaded == cnt_images){
				$loading.hide();
				$bttn_next.show();
				$bttn_prev.show();
				$mybook.show().booklet({
					name:               null,                            // Имя буклета, которое выводится в заголовке документа
					width:              800,                             // Ширина контейнера
					height:             500,                             // Высота контейнера
					speed:              600,                             // Скорость перехода между страницами
					direction:          'LTR',                           // Направление организации контента, по умолчанию LTR (left to right - слева направо), может быть RTL (справа налево)
					startingPage:       0,                               // Индекс страницы, которая будет выводиться первой
					easing:             'easeInOutQuad',                 // Метод сглаживания для завершения трансформации
					easeIn:             'easeInQuad',                    // Метод сглаживания для первой половины трансформации
					easeOut:            'easeOutQuad',                   // Метод сглаживания для второй половины трансформации
						closed:             true,                    // Запускаем книгу "закрытой", будут добавлены пустые страницы в начало и конец
					closedFrontTitle:   null,                            // Используется с опциями "closed", "menu" и "pageSelector", определяет заголовок пустой начальной страницы
					closedFrontChapter: null,                            // Используется с опциями "closed", "menu" и "chapterSelector", определяет имя главы пустой начальной страницы
					closedBackTitle:    null,                            // Используется с опциями "closed", "menu" и "pageSelector", определяет заголовок пустой последней страницы
					closedBackChapter:  null,                            // Используется с опциями "closed", "menu" и "chapterSelector", определяет имя главы пустой конечной страницы
					covers:             false,                           // Используется с опцией "closed", делает первую и последнюю страницу обложками, без нумерации страниц (если возможно)
						pagePadding:        10,                      // Отступ для обертки каждой страницы
					pageNumbers:        true,                            // Выводит номер на каждой странице
						hovers:             false,                   // Разрешает анимацию предварительного просмотра страниц при наведении курсора мыши, выводятся маленькие изображения предыдущей и следующей страницы
					overlays:           false,                           // Разрешает навигацию с использованием слоя перекрытия, когда разрешено - ссылки в контексте не будут реагировать на нажатия кнопки мыши
					tabs:               false,                           // Добавляет закладки вдоль верха страницы
					tabWidth:           60,                              // Определяем ширину закладок
					tabHeight:          20,                              // Определяем высоту закладок
					arrows:             false,                           // Добавляем стрелки поверх кромок книжки
					cursor:             'pointer',                       // Установка css для курсора для боковой области книжки
						hash:               false,                   // Разрешает навигацию с использованием хэш строки, например: #/page/1 для страницы 1, будет действовать на все книжки с разрешенной опцией 'hash'
					keyboard:           true,                            // Разрешает навигацию с использованием клавиш стрелок(влево: предыдущая страница, вправо: следующая)
					next:               $bttn_next,          	     // Селектор для элемента, который используется как выключатель перехода к следующей странице
					prev:               $bttn_prev,          	     // Селектор для элемента, который используется как выключатель перехода к предыдущей странице
						menu:               null,                    // Селектор элемента, который используется как область меню, требуется для 'pageSelector'
					pageSelector:       false,                           // Разрешает навигацию с помощью выпадающего меню для страниц, требует опции 'menu'
					chapterSelector:    false,                           // Разрешает навигацию с помощью выпадающего меню глав, определяется атрибутом "rel", требует опции 'menu'
						shadows:            true,                    // Выводить тени при анимации страниц
					shadowTopFwdWidth:  166,                             // Ширина тени для верха анимации вперед
					shadowTopBackWidth: 166,                             // Ширина тени для верха анимации назад
					shadowBtmWidth:     50,                              // Ширина тени для низа анимации
						before:             function(){},            // Возвратная функция, которая вызывается перед выполнением каждой анимации
					after:              function(){}                     // Возвратная функция, которая вызывается после выполнения каждой анимации
				});
				Cufon.refresh();
			}
		}).attr('src',source);
	});
	
});

Также в проекте используется Cufon для вывода специфических шрифтов. Для него нужно добавить следующие строки  в раздел заголовка нашего кода HTML:

<script src="cufon/cufon-yui.js" type="text/javascript"></script>
<script src="cufon/RodeoExtraBold_400.font.js" type="text/javascript"></script>
<script src="cufon/Betina_400.font.js" type="text/javascript"></script>
<script type="text/javascript">
	Cufon.replace('h1,p,.b-counter');
	Cufon.replace('.book_wrapper a', {hover:true});
	Cufon.replace('.title', {textShadow: '1px 1px #C59471', fontFamily:'RodeoExtraBold'});
	Cufon.replace('.reference a', {textShadow: '1px 1px #C59471', fontFamily:'RodeoExtraBold'});
	Cufon.replace('.loading', {textShadow: '1px 1px #000', fontFamily:'RodeoExtraBold'});
</script>

Готово!

Время на прочтение
5 мин

Количество просмотров 7.7K

Поскольку большинство книг я читаю с наладонника, книги для чтения нужно где-то брать. Как правило, интересующие меня книги я нахожу в сетевых библиотеках в текстовом формате (txt, html, fb2). Вместе с тем, бывают случаи, когда хочется прочитать книгу, которая выложена на сайте, где скачивание в принципе не предусмотрено, да ещё и разделена на несколько html-страниц (как эта, например). В таком случае можно сохранить каждую html страницу вручную, но такой способ имеет два важных недостатка. Во-первых, если книга разделена на 15-20 страниц, сохранение вручную займёт много времени и будет раздражать. Во-вторых, вместе с текстом книги мы получим кучу всякого мусора — текст, не относящийся к книге, таблицы, скрипты, ссылки на другие сайты и прочую муть.

Чтобы упростить себе жизнь, мы напишем программу, которая скачает книгу для нас. Из сказанного выше следует, что нам нужна программа, которая: а) скачает в нужном порядке все страницы, по которым разбросана книга; б) с каждой страницы возьмёт только тест и ничего лишнего и в) сохранит весь текст книги в одном html-файле.

В качестве примера мы возьмём книгу Владимира Плунгяна «Почему языки такие разные. Популярная лингвистика». Я нашёл только одну сетевую бибилотеку, где её можно скачать в текстовом формате, да и там требуется регистрация, поэтому мы скачаем её по указанной ссылке с помощью программы, о которой речь пойдёт дальше. Для написания программы мы используем язык программирования Python. Я использовал Python версии 2.6. Эту или более новую версию можно скачать бесплатно на официальном сайте.

Скачиваем страницы

Чтобы скачать страницы, нам понадобятся их адреса. Как мы видим, адреса всех страниц кроме первой одинаковы и различаются только номером:

http://profismart.ru/web/bookreader-115980-номер_страницы.php

Благодаря этому, мы сможем не писать их вручную, а сгенерировать с помощью следующего кода:

for i in range(2,29):
        url = "http://profismart.ru/web/bookreader-115980-%i.php" % i

Это даст нам адреса всех страниц со второй по двадцать восьмую. Адрес первой страницы отличается от остальных (http://profismart.ru/web/bookreader-115980.php), поэтому его мы вставим в программу вручную.

Далее каждую из этих страниц мы скачаем, а сам html-код запишем в переменную html:

for i in range(2,29):
        # Генерируем гиперссылку
        url = "http://profismart.ru/web/bookreader-115980-%i.php" % i

        # Качаем страницу
        html = ""
        sock = urllib.urlopen(url)
        html = sock.read()
        sock.close()

Извлекаем из страницы нужный текст

Html-код, содержащий текст книги, мы извлечём из кода страницы с помощью регулярных выражений (regular expressions). В нашем случае текст находится внутри страницы между тегами <td style="padding:7px" class="ps24 ps37"> и </td>. Каждый параграф текста находится между тегами <div> и </div>, а сами теги <div> без дополнительных параметров используются только в тексте книги. Таким образом, чтобы извлечь текст, нам достаточно найти первый тег <div> и взять весь текст от него до первого тега </td>. Регулярное выражение будет выглядеть так:

(<div>.+?</div>)</td>

Точка обозначает любой символ, а знак «плюс» говорит, что символ должен быть как минимум один. Знак вопроса после комбинации .+ говорит, что мы хотим взять минимальное количество символов, которые удовлетворяют нашему запросу. Таким образом, мы ищем весь текст от первого найденного в html-коде тега <div> до первой (благодаря знаку вопроса) комбинации </div></td>. Скобки указывают на ту часть найденного текста, которую мы возьмём. В данном случае мы берём весь найденный текст без тега </td>, который нам не нужен. Чтобы использовать регулярное выражение в нашей программе, добавим в её начало следующую строку:

text_regex = re.compile(u"(<div>.+?</div>)</td>", re.IGNORECASE | re.DOTALL | re.UNICODE)

Обращаться к выражению мы будем по имени text_regex. Текст книги мы сохраним в переменной book. С добавкой регулярного выражения код, который обрабатывает страницы 2-28, будет выглядеть так:

for i in range(2,29):
        # Генерируем гиперссылку
        url = "http://profismart.ru/web/bookreader-115980-%i.php" % i

        # Качаем страницу
        html = ""
        sock = urllib.urlopen(url)
        html = sock.read()
        sock.close()

        # Извлекаем из страницы нужный текст и добавляем его к уже имеющемуся
        book = book + text_regex.search(html).group(1)

Первую страницу мы обработаем отдельно. Из неё мы возьмём текст книги и заголовок для нового html-файла, который создаст наша программа. Заголовок мы извлечём с помощью следующего регулярного выражения:

(<html.+?<body>)

То есть мы берём весь код от тега <html> до тега <body> включительно. В коде, который мы получим, будет немного мусора, но поскольку он не повлияет на отображение страницы в браузере или на экране наладонника, мы оставим его как есть. Если очень захотим, позже удалим вручную в каком-нибудь редакторе. Как и для предыдущего выражения, добавим в начало программы строку:

head_regex = re.compile(u"(<html.+?<body>)", re.IGNORECASE | re.DOTALL | re.UNICODE)

Код, обрабатывающий первую страницу будет выглядеть так:

# Качаем первую страницу
url = "http://profismart.ru/web/bookreader-115980.php"
html = ""
sock = urllib.urlopen(url)
html = sock.read()
sock.close()

# Берём заголовок
head = head_regex.search(html).group(1)
book = book + head
# Извлекаем и сохраняем текст книги
book = book + text_regex.search(html).group(1)

Сохраняем текст книги в файл

Здесь всё просто. К содержимому переменной book нужно добавить закрывающие теги для <html> и <body> и записать его в файл. Это делает следующий код:

# Открываем файл для записи
file_out = open('book.html', 'w')
# Записываем содержимое переменной
file_out.write(book)
# Записываем закрывающие теги
file_out.write("n</body></html>")
# Закрываем файл
file_out.close()

Собираем всю программу вместе

В конечную версию программы я добавил замену тегов <div>...</div> на <p align=justify>...</p> и вывод информации о странице, которая обрабатывается в данный момент. Первое — потому что мне нравится, когда текст выровнен по ширине страницы. Второе — чтобы программа во время работы подавала хоть какие-нибудь признаки жизни.

Полный текст программы можно сохранить в файле с расширением .py и запустить. Вот он:

import urllib
import re

text_regex = re.compile(u"(<div>.+?</div>)</td>", re.IGNORECASE | re.DOTALL | re.UNICODE)
head_regex = re.compile(u"(<html.+?<body>)", re.IGNORECASE | re.DOTALL | re.UNICODE)

book = ""

# Download first page
url = "http://profismart.ru/web/bookreader-115980.php"
print "Page 1"
print url
html = ""
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
print "Page downloaded."

# Extract page head and book text
book = book + head_regex.search(html).group(1)
book = book + text_regex.search(html).group(1)

for i in range(2,29):
        # Generate page url
        url = "http://profismart.ru/web/bookreader-115980-%i.php" % i
        print "Page %i" % i
        print url

        # Download the page
        sock = urllib.urlopen(url)
        html = sock.read()
        sock.close()
        print "Page downloaded."

        # Extract required text
        book = book + text_regex.search(html).group(1)

# Replace <div> with <p align=justify>
book = book.replace("<div>", "n<p align=justify>")
book = book.replace("</div>", "</p>")

# Write to file
file_out = open('book.html', 'w')
file_out.write(book)
file_out.write("n</body></html>")
file_out.close()

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти нарушение за парковку
  • Как составить isbn
  • Как составить заявление об отказе от кредита
  • Как найти неисправность в пылесосе
  • Как найти символ книжки в ворде

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии