Статьи

Как создать пользовательский тур с овчаркой в ​​JavaScript

Что вы будете создавать
Визуальный Тур с Шепардом - Пример Шепард Тур с темой по умолчанию

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

Если вы следовали моей серии Envato Tuts + Building Your Startup With PHP , вы знакомы с Meeting Planner . Посмотрев, как пользователи планируют свою первую встречу, я решил, что будет лучше создать какое-то руководство.

Сначала я подумал о том, чтобы создать его сам, но потом я нашел вариант с открытым исходным кодом, Shepherd.

В сегодняшнем уроке я познакомлю вас с созданием визуального пользовательского тура с Shepherd . Использование Shepherd относительно просто, и я рассмотрю некоторые из моего собственного кода, который я использовал, чтобы упростить процесс разработки.

Shepherd — это предложение с открытым исходным кодом от HubSpot , службы входящего маркетинга. Престижность им за предоставление надежной библиотеки с хорошей документацией.

Я принимаю участие в комментариях ниже, поэтому, пожалуйста, не стесняйтесь задавать вопросы и делиться своими отзывами. Мне особенно интересно ваше знакомство с другими решениями для визуальных гидов. Вы также можете связаться со мной в Твиттере @lookahead_io .

Давайте пройдемся по простому сценарию для Пастыря.

Интеграция базового тура с Shepherd в ваше приложение проста. Сначала вы выбираете файл темы и интегрируете их JavaScript следующим образом:

1
2
3
<link rel=»stylesheet» href=»shepherd-theme-arrows.css» />
<script src=»tether.min.js»></script>
<script src=»shepherd.min.js»></script>

Вы можете скачать файлы со страницы Shepherd GitHub . Я использую shepherd-theme-arrows.css выше, но вы можете выбрать любой из значений по умолчанию ниже и настроить их:

Визуальный тур с пастухом - CSS-файлы по умолчанию

Далее вы создаете тур объект:

1
2
3
4
5
6
7
8
var tour;
  
tour = new Shepherd.Tour({
  defaults: {
    classes: ‘shepherd-theme-arrows’,
    scrollTo: true
  }
});

Значения по умолчанию могут быть определены для всех шагов при создании тура. Классы ссылаются на определения тем, которые вы использовали, например, shepherd-theme-arrows . И scrollTo обеспечить scrollTo всех шагов в видимой области просмотра.

Затем вы добавляете отдельные шаги в тур:

01
02
03
04
05
06
07
08
09
10
11
12
tour.addStep(‘example-step’, {
  text: ‘This step is attached to the bottom of the <code>.
         example-css-selector</code> element.’,
  attachTo: ‘.example-css-selector bottom’,
  classes: ‘example-step-extra-class’,
  buttons: [
    {
      text: ‘Next’,
      action: tour.next
    }
  ]
});

text — это то, что появляется в теле визуального тура. attachTo указывает на селектор CSS для элемента, на который вы хотите указать всплывающее окно тура на этом шаге. buttons позволяют определить одну или несколько кнопок и их действия, например, Next .

И, наконец, вы начинаете тур:

1
tour.start();

Shepherd основан на Tether , другом предложении HubSpot с открытым исходным кодом, которое помогает позиционировать элементы на других элементах на странице. Тетер следит за тем, чтобы ваши шаги никогда не выходили за пределы экрана и не обрезались.

Хотя у меня не было проблем с Tether, я обнаружил проблемы с Shepherd, который неправильно отображал стрелки на некоторых элементах. Это произошло случайно, и я не единственный, кто столкнулся с этой проблемой . Команда HubSpot не ответила ни на один из моих запросов GitHub через две недели, что немного разочаровывает. Тем не менее, Shepherd — отличная библиотека JavaScript.

Визуальный тур с овчаркой - планирование демонстрации в Meeting Planner

Когда я начал экспериментировать с Shepherd, я быстро обнаружил, что создание руководства с большим количеством шагов может занять довольно много времени. Это то, что я рассмотрел в моей собственной реализации.

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

Например, я создал массив steps [] и определил маршрут, заполнив массив:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
var tour;
var steps =[];
steps.push([‘.nav-tabs top’,’Welcome’,’Allow me to show you how to plan a ‘+title+’. <p>If you prefer, you can <a href=»javascript::return false;» onclick=»turnOffGuide();»>turn off this guide</a>.<br /><br />’]);
steps.push([‘#headingWho top’,’Who would you like to invite?’,’You can add one person or a group of people to your ‘+title+’. <p>Click the person button to add participants.</p>’]);
steps.push([‘#invitation-url bottom’,’Inviting by email’,’Alternately, you can email the meeting link to your participant(s)’]);
steps.push([‘#headingWhat bottom’,’What is your meeting about?’,’You can customize the subject of your ‘+title+’. We\’ll use it for the invitation and reminder emails.<p>Click the pencil button to edit the subject.</p>’]);
if ($(‘#headingActivity’).length>0) {
  steps.push([‘#headingActivity top’,’What do you want to do?’,’You can suggest one or more activity ideas. With multiple ideas, your participants can help you select their favorite. <p>Click the plus button to suggest activities.</p>’]);
}
steps.push([‘#headingWhen top’,’When do you want to meet?’,’Suggest one or more dates and times for your ‘+title+’. With more than one, your participants can help you choose. <p>Click the + button to add them.</p>’]);
steps.push([‘#headingWhere top’,’Where do you want to meet?’,’Suggest one or more places for your ‘+title+’. With multiple places, your participants can help you choose. <p>We use Google Places to simplify adding them. Click the + button to begin.</p>’]);
steps.push([‘.virtualThing top’,’Is this a virtual meeting?’,’Switch between <em>in person</em> and <em>virtual</em> ‘+title+’s such as phone calls or online conferences.’]);
steps.push([‘#actionSend top’,’Sending invitations’,’Scheduling is collaborative. After you add times and places, you can <strong>Invite</strong> participants to select their favorites. <em>A place isn\’t necessary for virtual ‘+title+’\s.</em>’]);
steps.push([‘#actionFinalize right’,’Finalizing the plan’,’Once you choose a time and place, you can <strong>Complete</strong> the plan. We\’ll email the invitations and setup reminders.’]);
steps.push([‘#tourDiscussion left’,’Share messages with participants ‘,’You can write back and forth with participants on the <strong>Messages</strong> tab. <p>Messages are delivered via email.</p>’]);
steps.push([‘.container ‘,’Ask a question’,’Need help? <a href=»‘+$(‘#url_prefix’).val()+’/ticket/create»>Ask a question</a> and we\’ll respond as quickly as we can. <p>If you prefer, you can <a href=»‘+$(‘#url_prefix’).val()+’/user-setting?tab=guide»>turn off the guide</a> in settings.</p>’]);

Каждый элемент массива, который я добавил, включал три элемента:

  1. Визуальный элемент CSS, на который указывает этот шаг и где, например, '#headingWho top'
  2. Текст для заголовка, например, 'When do you want to meet?'
  3. Текст для инструкции

Поддерживать этот массив для меня было гораздо проще, чем определять кнопки для каждого шага учебника. Однако это означало, что мне нужно было программно определять кнопки, когда я загружал шаги в тур.

Я написал этот код, чтобы добавить и правильно ответить на кнопки для тура. С каждым шагом он создает массив button , который в противном случае мне пришлось бы определять вручную:

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
for (i = 0; i < steps.length; i++) {
 buttons=[];
 // no back button at the start
 if (i>0) {
   buttons.push({
     text: ‘Back’,
     classes: ‘shepherd-button-secondary’,
     action: function() {
       return tour.back();
     }
   });
 }
 // no next button on last step
 if (i!=(steps.length-1)) {
   buttons.push({
     text: ‘Next’,
     classes: ‘shepherd-button-primary’,
     action: function() {
       return tour.next();
     }
   });
 } else {
   buttons.push({
     text: ‘Close’,
     classes: ‘shepherd-button-primary’,
     action: function() {
       return tour.hide();
     }
   });
 }

Например, на первом шаге нет кнопки « Назад» , а на последнем шаге нет кнопки « Далее» . Но последний шаг имеет кнопку Закрыть .

Затем каждый шаг из моего массива и каждого массива кнопок добавляется в тур.

1
2
3
4
5
6
7
tour.addStep(‘step_’+i,{
   text: steps[i][2],
   title: steps[i][1],
   attachTo: steps[i][0],
   //classes: ‘shepherd shepherd-open shepherd-theme-arrows shepherd-transparent-text’,
   buttons: buttons,
 });

Используя этот подход, мне не приходилось многократно переопределять одни и те же кнопки для каждого шага моего урока. Он также предлагает некоторые программные возможности динамически настраивать тур на будущее.

Используя Yii, выбранную мной среду программирования PHP, я добавил необходимые файлы включения в свой файл ресурсов. Это загружается на определенных страницах, где тур необходим. В моем случае страница планирования встреч:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<?php
namespace frontend\assets;
use yii\web\AssetBundle;
 
class MeetingAsset extends AssetBundle
{
    public $basePath = ‘@webroot’;
    public $baseUrl = ‘@web’;
    public $css = [
      …
      ‘css/shepherd-theme-arrows.css’,
    ];
    public $js = [
      ‘js/meeting.js’,
      …
      ‘js/tether.min.js’,
      ‘js/shepherd.min.js’,
      ‘js/meeting_tour.js’,
    ];
    …

Вы увидите выше CSS для темы Shepherd и JavaScript для Tether, Shepherd и мой файл определения тура, meeting_tour.js .

Я также добавил CSS, чтобы контролировать общую ширину моего всплывающего окна тура до 40% от области просмотра:

1
2
3
.shepherd-element.shepherd-theme-arrows {
  max-width: 40%;
}

Вы можете посмотреть пример видео тура выше или на Vimeo . Если вы хотите попробовать это сами, зарегистрируйтесь в Meeting Planner, и вы сразу же попадете в расписание.

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

Визуальный тур с овчаркой - отключение гида через AJAX и просмотр ссылки на настройки

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

Visual Tour with Shepherd - пользовательская настройка для включения и выключения тура

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

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

Надеюсь, вам понравилось узнавать о Пастыре. Это, безусловно, визуально отлаженный, удобный для разработчиков визуальный тур, который вы можете быстро интегрировать в любое приложение.

Пожалуйста, поделитесь своим опытом с Shepherd и другими библиотеками визуальных туров в комментариях. И не стесняйтесь задавать вопросы.

Вы также всегда можете связаться со мной через Twitter @lookahead_io напрямую. Если вы хотите прочитать больше моих учебных пособий по Envato Tuts + , вот несколько интересных:

  • щебет
    Создание с помощью API Twitter: создание друзей для подписки
    Джефф Рейфман
  • PHP
    Создание вашего стартапа: повышение безопасности
    Джефф Рейфман
  • PHP
    Обновление вашего Linux-сервера до PHP 7.0
    Джефф Рейфман