Статьи

Узнайте, как оформить статьи для печати и электронной почты

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


В конце этого урока мы выполним следующее:

  • Используйте jQuery для автоматической печати или отправки по электронной почте любого раздела страницы при нажатии на определенный элемент.
  • Отформатируйте и измените стиль для оптимизации печати или электронной почты.
  • Добавить переменные в версию электронной почты (Кому, От, Сообщение и т. Д.)
страница

Вау … эта страница красочная. Я согласен — это не самая лучшая цветовая схема в мире. Этот дизайн определенно не был предназначен для печати. Хотя синий фон не будет распечатываться на большинстве принтеров, принтер просто заставит его исчезнуть. Это может испортить весь остальной дизайн, потому что теперь ярко-оранжевый и зеленый текст будет печататься на белом фоне. Для пользователя не существует простого способа распечатать хорошую статью в черно-белом формате с этой страницы, если не считать ее копирование в текстовый процессор и самостоятельное форматирование.

Одним из решений может быть предоставление таблицы стилей для печати, как это сделал Tuts +. Это сработало бы, если бы на странице была только одна статья. К сожалению, этот пример в формате блога. Это означает, что на странице есть несколько статей; и есть вероятность, что пользователь хочет распечатать только одну статью. Мы собираемся использовать jQuery, чтобы позволить пользователю щелкать ссылку после каждой статьи, которая форматирует статью и позволяет распечатать или отправить ее по электронной почте.

Кнопки печати электронной почты

HTML довольно прост для этой страницы. Мы добавим пару стандартных классов: один для обозначения раздела для печати / отправки по электронной почте (.printSection), другой для обозначения области, содержащей ссылки для печати или электронной почты (.printControls), класс для всех ссылок для печати ( .printControl) и класс для всех ссылок электронной почты (.emailControl). Обратите внимание, как мы также связались с минимизированным файлом Google. Это позволяет нам использовать jQuery позже.

CSS тоже довольно прост.

Мы также добавим немного CSS для повышения удобства использования. В случае, если Javascript отключен, нам не нужны мертвые ссылки — поэтому мы скрываем ссылки:

  • добавьте слушателя, чтобы дождаться нажатия кнопки .printControl или .emailControl.
  • изменить внешний вид раздела для удобства печати
  • захватить части страницы, которые мы хотим напечатать
  • откройте окно и измерьте его.
  • положить части страницы, которые мы схватили в окно
  • откройте диалоговое окно печати
  • закройте окно после завершения печати

Мы помещаем слушатель печати в функцию чтения DOM:

1
2
3
4
5
$(document).ready(function(){
    $(‘.printControl’).click(function(){
        //Here we will put the printing code
    });
});

Нам нужно изменить цвета с красочной схемы на черный и белый. Есть несколько способов, которыми мы можем выполнить эту задачу. Метод, который мы будем использовать, заключается в том, чтобы временно добавить класс в уязвимую секцию, взять код для печати, а затем немедленно снова удалить класс. Мы добавляем класс с помощью селектора CSS jQuery для выбора элементов div, а затем добавляем класс ко всем элементам внутри с помощью команды children ().

1
2
3
4
5
6
$(document).ready(function(){
    $(‘.printControl’).click(function(){
        $(‘.printSection’).children().addClass(‘printversion’);
        $(‘.printSection’).children().removeClass(‘printversion’);
    });
});

Мы также должны добавить еще несколько стилей для элементов с printversion:

Теперь мы собираемся взять раздел и поместить его в переменную. Мы собираемся поместить это после добавления класса, но перед тем, как удалить его, чтобы версия в переменной соответствовала добавленному классу. Мы берем HTML-код в голове, чтобы получить информацию о стиле и объединяем его с HTML-кодом раздела. «Это» позволяет нам выбрать только тот раздел, который был выбран, а не все. Затем мы поднимаемся на уровень от кнопки печати и берем это.

1
2
3
4
5
6
7
$(document).ready(function(){
    $(‘.printControl’).click(function(){
        $(‘.printSection’).children().addClass(‘printversion’);
        var printContent= $(‘head’).html() + $(this).parent().parent().html();
        $(‘.printSection’).children().removeClass(‘printversion’);
    });
});

Теперь нам нужно поместить переменную куда-нибудь. Но сначала нам нужно открыть новое окно. Эти строки не очень важны и представляют собой просто JavaScript — на этом шаге нет jQuery. По сути, мы открываем окно, присваиваем уникальное имя и присваиваем ему некоторые основные параметры.

01
02
03
04
05
06
07
08
09
10
11
$(document).ready(function(){
    $(‘.printControl’).click(function(){
        $(‘.printSection’).children().addClass(‘printversion’);
        var printContent= $(‘head’).html() + $(this).parent().parent().html();
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ‘PrintSection’ + uniqueName.getTime();
         var printWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600,height=1000’);
    });
});

Теперь нам нужно заполнить окно тем, что мы захватили ранее. Мы просто записываем в окно значение переменной.

01
02
03
04
05
06
07
08
09
10
11
12
$(document).ready(function(){
    $(‘.printControl’).click(function(){
        $(‘.printSection’).children().addClass(‘printversion’);
        var printContent= $(‘head’).html() + $(this).parent().parent().html();
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ‘PrintSection’ + uniqueName.getTime();
         var printWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600,height=1000’);
         printWindow.document.write(printContent);
    });
});

Нам нужно добавить еще несколько строк, прежде чем мы закончим. Сначала нам нужно сфокусировать окно, а затем открыть диалоговое окно печати. Затем мы закрываем окно после закрытия диалогового окна.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
$(document).ready(function(){
    $(‘.printControl’).click(function(){
        $(‘.printSection’).children().addClass(‘printversion’);
        var printContent= $(‘head’).html() + $(this).parent().parent().html();
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ‘PrintSection’ + uniqueName.getTime();
         var printWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600,height=1000’);
         printWindow.document.write(printContent);
          printWindow.document.close();
         printWindow.focus();
         printWindow.print();
         printWindow.close();
    });
});

Вот и все. Теперь у нас должна быть функциональная кнопка печати после каждой статьи. Хорошая работа, но мы еще не закончили. Теперь мы должны правильно настроить функцию электронной почты.

Распечатать

  • добавьте слушателя, чтобы дождаться нажатия кнопки .printControl или .emailControl.
  • Нам нужен адрес электронной почты, на который они отправляют.
  • Нам нужно их имя.
  • Нам нужна их электронная почта.
  • Нам нужно короткое сообщение для отправки.
  • поместите всю эту информацию в переменные с помощью подсказок.
  • изменить внешний вид раздела, чтобы он удобнее для электронной почты
  • Нам нужен URL-адрес страницы, включая тег привязки, чтобы пропустить прямо к статье.
  • положить всю эту информацию в одну переменную.
  • поместите это в новое окно.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
$(document).ready(function(){
        $(‘.emailControl’).click(function(){
        $(‘.printSection’).children().addClass(‘printversion’);
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ’emailSection’ + uniqueName.getTime();
         var emailWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600’);
         emailWindow.document.write(printContent);
         emailWindow.document.close();
         emailWindow.focus();
    });
});

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
$(document).ready(function(){
        $(‘.emailControl’).click(function(){
        var sendTo = prompt(‘Please type who you would like to send this to’);
        var fromWho = prompt(‘And What is Your Name?’);
        var fromWhoEmail = prompt(‘And What is Your Email?’);
        var fromMessage = prompt(‘Do You have a Message?’);
        $(‘.printSection’).children().addClass(‘printversion’);
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ’emailSection’ + uniqueName.getTime();
         var emailWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600’);
         emailWindow.document.write(printContent);
         emailWindow.document.close();
         emailWindow.focus();
    });
});
ИнформацияИнформацияИнформацияИнформацияИнформация

Теперь нам нужно сохранить текущий URL и номер статьи (через тег привязки) в переменных. Мы объединим их позже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
$(document).ready(function(){
        $(‘.emailControl’).click(function(){
        var sendTo = prompt(‘Please type who you would like to send this to’);
        var fromWho = prompt(‘And What is Your Name?’);
        var fromWhoEmail = prompt(‘And What is Your Email?’);
        var fromMessage = prompt(‘Do You have a Message?’);
        $(‘.printSection’).children().addClass(‘printversion’);
        var emailID=$(this).parent().parent().find(‘a’).attr(‘name’);
        var currentURL= window.location.href;
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ’emailSection’ + uniqueName.getTime();
         var emailWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600’);
         emailWindow.document.write(printContent);
         emailWindow.document.close();
         emailWindow.focus();
    });
});

Сначала мы объединяем URL вместе с тегом привязки и помещаем его в красивую строку текста. Затем мы объединяем это со всем остальным, что нам нужно, в переменной с именем emailContent.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
$(document).ready(function(){
        $(‘.emailControl’).click(function(){
        var sendTo = prompt(‘Please type who you would like to send this to’);
        var fromWho = prompt(‘And What is Your Name?’);
        var fromWhoEmail = prompt(‘And What is Your Email?’);
        var fromMessage = prompt(‘Do You have a Message?’);
        $(‘.printSection’).children().addClass(‘printversion’);
        var emailID=$(this).parent().parent().find(‘a’).attr(‘name’);
        var currentURL= window.location.href;
        var emailLink='<p><b>Source:</b> <a href=»‘ + currentURL + ‘#’ + emailID + ‘»>’ + currentURL + ‘#’ + emailID +'</a></p>’;
        var emailContent= $(‘head’).html() + ‘<div style=»text-align:left;»><p><b>To:</b>’ + sendTo + ‘</p>’ + ‘<p><b>From(Name):</b>’ + fromWho + ‘</p>’ + ‘<p><b>From(Email):</b>’ + fromWhoEmail + ‘</p>’ + ‘<p><b>Message:</b>’ + fromMessage + ‘</p>’ + emailLink + ‘</div>’ + $(this).parent().parent().html();
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ’emailSection’ + uniqueName.getTime();
         var emailWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600’);
         emailWindow.document.write(printContent);
         emailWindow.document.close();
         emailWindow.focus();
    });
});
01
02
03
04
05
06
07
08
09
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
$(document).ready(function(){
    $(‘.printControl’).click(function(){
        $(‘.printSection’).children().addClass(‘printversion’);
        var printContent= $(‘head’).html() + $(this).parent().parent().html();
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ‘PrintSection’ + uniqueName.getTime();
         var printWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600,height=1000’);
         printWindow.document.write(printContent);
         printWindow.document.close();
         printWindow.focus();
         printWindow.print();
         printWindow.close();
    });
    $(‘.emailControl’).click(function(){
        var sendTo = prompt(‘Please type who you would like to send this to’);
        var fromWho = prompt(‘And What is Your Name?’);
        var fromWhoEmail = prompt(‘And What is Your Email?’);
        var fromMessage = prompt(‘Do You have a Message?’);
        $(‘.printSection’).children().addClass(‘printversion’);
        var emailID=$(this).parent().parent().find(‘a’).attr(‘name’);
        var currentURL= window.location.href;
        var emailLink='<p><b>Source:</b> <a href=»‘ + currentURL + ‘#’ + emailID + ‘»>’ + currentURL + ‘#’ + emailID +'</a></p>’;
        var emailContent= $(‘head’).html() + ‘<div style=»text-align:left;»><p><b>To:</b>’ + sendTo + ‘</p>’ + ‘<p><b>From(Name):</b>’ + fromWho + ‘</p>’ + ‘<p><b>From(Email):</b>’ + fromWhoEmail + ‘</p>’ + ‘<p><b>Message:</b>’ + fromMessage + ‘</p>’ + emailLink + ‘</div>’ + $(this).parent().parent().html();
        $(‘.printSection’).children().removeClass(‘printversion’);
        var windowUrl = ‘about:blank’;
         var uniqueName = new Date();
         var windowName = ’emailSection’ + uniqueName.getTime();
         var emailWindow = window.open(windowUrl, windowName, ‘left=500,top=000,width=600’);
         emailWindow.document.write(emailContent);
         emailWindow.document.close();
         emailWindow.focus();
    });
});

Теперь у нас есть автоматический способ печати и отправки по электронной почте разделов веб-сайта, который ухудшается, когда JavaScript отключен. Молодец! Если вам понравился этот урок, следите за обновлениями; в следующем уроке мы расскажем, как превратить это в плагин jQuery. Между тем, если у вас есть какие-либо вопросы или комментарии, обязательно оставьте их ниже. Я хотел бы услышать от вас!