1. Web Design
  2. UX/UI
  3. UX Design

Guía de los usuarios a través de tu sitio web con Bootstrap Tour

Cuando tienes una aplicación web que requiere que los usuarios se acostumbren a ella, es necesario hacer un recorrido por la interfaz. Crear un recorrido directamente sobre la interfaz hace las cosas muy claras, así que eso es lo que vamos a construir, usando Bootstrap Tour.
Scroll to top

Spanish (Español) translation by Esther (you can also view the original English article)

Cuando tienes una aplicación web que requiere que los usuarios se acostumbren a ella, es necesario hacer un recorrido por la interfaz. Crear un recorrido directamente sobre la interfaz hace las cosas muy claras, así que eso es lo que vamos a construir, usando Bootstrap Tour.

tour-introtour-introtour-intro

Preguntas, preguntas

Bootstrap Tour es un plugin basado en jQuery para Twitter Bootstrap que te permite construir fácilmente recorridos interactivos utilizando una cantidad mínima de configuración declarativa de JavaScript junto con tu estructura DOM existente.

Si eso no tiene sentido para ti, sigue leyendo: vamos a desglosarlo para que puedas crear instrucciones valiosas y atractivas para tus usuarios.

¿Por qué querría crear instrucciones?

Si tu sitio web requiere cierto nivel de familiaridad, mostrar a tus usuarios lo que deben hacer puede ser muy útil. Una vez completado, el usuario puede, en cierto modo, ver la "sombra" de la instrucción que tú proporcionaste en el recorrido. Esto evita que el usuario tenga que interpretar las instrucciones si se utiliza un medio menos claro como el vídeo, o peor aún, guías textuales.

Otro caso de uso para una visita interactiva es la descripción de una foto. Imagina que estás construyendo un sitio web dedicado a mostrar magníficas panorámicas de ciudades de todo el mundo. Cuando un usuario hace clic en una ciudad, un recorrido interactivo te permite señalar elementos de la foto que de otro modo podrían pasar desapercibidos.

Hay muchos casos de uso en los que querrías utilizar un recorrido.

¿Cuándo debería evitar el uso de un tour?

Si tu interfaz sigue unas convenciones muy claras y no has oído ninguna queja de confusión, añadir un recorrido puede impedir a tus usuarios hacer lo que más quieren: usar tu aplicación.

Ya que estamos hablando de lo que hay que evitar, sería conveniente que el recorrido fuera lo más corto posible. Los usuarios quieren reunir toda la información necesaria para utilizar tu aplicación o ver tu historia, pero también quieren que eso ocurra lo más rápido posible. La única excepción a esta regla sería un sitio que depende casi exclusivamente de un recorrido como característica principal (el sitio fotográfico descrito sería un posible ejemplo), pero incluso en estos casos, debería ser fácil para un usuario salir del recorrido. Por suerte, esto está soportado en Bootstrap Tour por defecto; un botón de "Finalizar Tour" está presente en cada paso.


Empezar, rápido

Bootstrap Tour requiere, por supuesto, elementos de Twitter Bootstrap, así como su propio archivo CSS y JavaScript, además de jQuery. Según la documentación, estos son los activos necesarios.

1
<!DOCTYPE html>
2
<html>
3
<head>
4
    ...
5
    <link href="bootstrap-tour.css" rel="stylesheet">
6
    <!--[if lt IE 9]><script src="html5shiv.js"><![endif]-->
7
</head>
8
<body>
9
    ...
10
    <script src="jquery.js"></script>
11
    <script src="bootstrap.tooltip.js"></script>
12
    <script src="bootstrap.popover.js"></script>
13
    <script src="bootstrap-tour.js"></script>
14
</body>
15
</html>

Observa que también tendrás que incluir el archivo css base de Bootstrap para poder mostrar el popover de Bootstrap.

Inicio de la gira

A continuación, para comenzar con un recorrido, realiza lo siguiente dentro de tu archivo JavaScript (que veremos en breve):

1
// Create a new tour
2
var tour = new Tour();
3
4
// Add your steps
5
tour.addSteps([
6
  {
7
    element: ".message.message-1", // element selector to show the popover next to;
8
    title: "Welcome to my tour!",
9
    content: "We're going to make this quick and useful."
10
  },
11
  {
12
    element: ".message.message-2",
13
    title: "Let's finish this thing off with a bang.",
14
    content: "Boom, bang, bam!"
15
  }
16
]);
17
18
// Initialize method on the Tour class. Get's everything loaded up and ready to go.
19
tour.init();
20
21
// This starts the tour itself
22
tour.start();

Este ejemplo fue tomado casi directamente de la documentación, y es la manera más fácil de comenzar con el Tour de Bootstrap.


Profundicemos, ¿quieres?

Bootstrap Tour ofrece toneladas de opciones para personalizar cada paso del tour que quieras crear. Por defecto, soporta localStorage (para preservar tu lugar en el tour si cierras la pestaña y vuelves más tarde), las funciones siguiente y anterior, además de todo tipo de callbacks que puedes configurar para responder a las acciones de los usuarios. También ofrece bonitas funciones de pulido, como el resaltador de elementos, el "modo reflejo" (que explicaremos más adelante), los pasos de avance automático e incluso los recorridos de varias páginas.

Tema inicial

Para esta demostración, vamos a empezar con una plantilla gratuita de StartBootstrap.com. StartBootstrap de Iron Summit Media Strategies es una colección de temas bootstrap gratuitos y premium.

Una vez que hayas descargado los proyectos, la estructura de tus archivos debería ser la siguiente.

. ├── css │ ├── bootstrap-tour.min.css │ ├── bootstrap.css │ └── landing-page.css ├── font-awesome ... ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff ├── img │ ├── banner-bg.jpg │ ├── doge.png │ ├── intro-bg.jpg │ ├── ipad.png │ └── phones.png ├── index.html └── js ├── bootstrap-tour.min.js ├── bootstrap.js └── jquery-1.10.2.js

Nota: hemos omitido la estructura interna de FontAwesome, ya que no será importante para este tutorial.

Incluir activos

A continuación, vas a querer incluir el CSS y el JavaScript de Bootstrap Tour en el archivo index.html. El <head> de tu documento debería tener este aspecto:

1
  <head>
2
    <meta charset="utf-8">
3
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
4
    <meta name="description" content="">
5
    <meta name="author" content="">
6
7
    <title>Landing Page Template for Bootstrap</title>
8
9
    <!-- Bootstrap core CSS -->
10
    <link href="css/bootstrap.css" rel="stylesheet">
11
12
    <!-- Custom Google Web Font -->
13
    <link href="font-awesome/css/font-awesome.min.css" rel="stylesheet">
14
    <link href='http://fonts.googleapis.com/css?family=Lato:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
15
16
    <!-- Add custom CSS here -->
17
    <link href="css/bootstrap-tour.min.css" rel="stylesheet">
18
    <link href="css/landing-page.css" rel="stylesheet">
19
20
  </head>

Y al final del documento, verás el JavaScript justo antes de la etiqueta de cierre </body>. Una vez que la configuración funcione, ¡es hora de empezar! Por supuesto, tendrás que añadir tu propio JavaScript personalizado, así que añadiremos un "script.js" después del archivo Bootstrap Tour.

1
    <!-- JavaScript -->
2
    <script src="js/jquery-1.10.2.js"></script>
3
    <script src="js/bootstrap.js"></script>
4
    <script src="js/bootstrap-tour.min.js"></script>
5
    <script src="js/script.js"></script>
6
7
  </body>
8
</html>

Querrás concatenar y minificar estos archivos en tu proceso de construcción. No cubriremos los procesos de construcción en este tutorial, pero puedes aprender más sobre esto leyendo Best Practices for Increasing Website Performance o Meet Grunt: The Build Tool for JavaScript.

Estableciendo algunos pasos

Vamos a establecer unos sencillos pasos con el siguiente código dentro de nuestro "script.js" archivo.

1
(function(){
2
3
    var tour = new Tour({
4
        storage : false
5
    });
6
7
    tour.addSteps([
8
      {
9
        element: ".tour-step.tour-step-one",
10
        placement: "bottom",
11
        title: "Welcome to our landing page!",
12
        content: "This tour will guide you through some of the features we'd like to point out."
13
      },
14
      {
15
        element: ".tour-step.tour-step-two",
16
        placement: "bottom",
17
        title: "Main navigation",
18
        content: "Here are the sections of this page, easily laid out."
19
      },
20
      {
21
        element: ".tour-step.tour-step-three",
22
        placement: "top",
23
        backdrop: true,
24
        title: "Main section",
25
        content: "This is a section that you can read. It has valuable information."
26
      },
27
28
    ]);
29
30
    // Initialize the tour
31
    tour.init();
32
33
    // Start the tour
34
    tour.start();
35
36
}());

Este código es muy similar al del ejemplo easy-start anterior. Iniciamos nuestra instancia Tour, y por el bien de nuestro tutorial estamos deshabilitando el almacenamiento para que el tour comience al principio cuando la página se cargue cada vez. (Si eliminas esta opción una vez que hayas terminado de crear tu recorrido, el almacenamiento funcionará perfectamente).

A continuación, definimos algunas clases de pasos y argumentos asociados. Fíjate en el argumento "backdrop" del tercer paso; esto resalta el elemento que hemos seleccionado para adjuntar el popover de arriba.

Realización de cambios en el marcado

A continuación, añadiremos las clases de paso a los elementos correspondientes. La parte superior de nuestro archivo de índice debería tener ahora el siguiente aspecto.

1
<!DOCTYPE html>
2
<html lang="en">
3
  <head>
4
    <meta charset="utf-8">
5
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
    <meta name="description" content="">
7
    <meta name="author" content="">
8
9
    <title>Landing Page Template for Bootstrap</title>
10
11
    <!-- Bootstrap core CSS -->
12
    <link href="css/bootstrap.css" rel="stylesheet">
13
14
    <!-- Custom Google Web Font -->
15
    <link href="font-awesome/css/font-awesome.min.css" rel="stylesheet">
16
    <link href='http://fonts.googleapis.com/css?family=Lato:100,300,400,700,900,100italic,300italic,400italic,700italic,900italic' rel='stylesheet' type='text/css'>
17
18
    <!-- Add custom CSS here -->
19
    <link href="css/bootstrap-tour.min.css" rel="stylesheet">
20
    <link href="css/landing-page.css" rel="stylesheet">
21
22
  </head>
23
24
  <body>
25
26
    <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
27
      <div class="container">
28
        <div class="navbar-header">
29
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
30
            <span class="sr-only">Toggle navigation</span>
31
            <span class="icon-bar"></span>
32
            <span class="icon-bar"></span>
33
            <span class="icon-bar"></span>
34
          </button>
35
          <a class="navbar-brand" href="http://startbootstrap.com">Start Bootstrap</a>
36
        </div>
37
38
        <!-- Collect the nav links, forms, and other content for toggling -->
39
        <div class="tour-step tour-step-two collapse navbar-collapse navbar-right navbar-ex1-collapse">
40
          <ul class="nav navbar-nav">
41
            <li><a href="#about">About</a></li>
42
            <li><a href="#services">Services</a></li>
43
            <li><a href="#contact">Contact</a></li>
44
          </ul>
45
        </div><!-- /.navbar-collapse -->
46
      </div><!-- /.container -->
47
    </nav>
48
49
    <div class="intro-header">
50
51
      <div class="container">
52
  
53
        <div class="row">
54
          <div class="col-lg-12">
55
            <div class="intro-message">
56
              <h1>Landing Page</h1>
57
              <h3>A Template by Start Bootstrap</h3>
58
              <hr class="intro-divider">
59
              <ul class="list-inline intro-social-buttons">
60
                <li><a href="https://twitter.com/SBootstrap" class="btn btn-default btn-lg"><i class="fa fa-twitter fa-fw"></i> <span class="network-name">Twitter</span></a></li>
61
                <li class="tour-step tour-step-one"><a href="https://github.com/IronSummitMedia/startbootstrap" class="btn btn-default btn-lg"><i class="fa fa-github fa-fw"></i> <span class="network-name">Github</span></a></li>
62
                <li><a href="#" class="btn btn-default btn-lg"><i class="fa fa-linkedin fa-fw"></i> <span class="network-name">Linkedin</span></a></li>
63
              </ul>
64
            </div>  
65
          </div>
66
        </div>
67
  
68
      </div><!-- /.container -->
69
70
    </div><!-- /.intro-header -->
71
72
    <div class="content-section-a tour-step tour-step-three">
73
74
      <div class="container">
75
  
76
        <div class="row">
77
          <div class="col-lg-5 col-sm-6">
78
            <hr class="section-heading-spacer">
79
            <div class="clearfix"></div>
80
            <h2 class="section-heading">Death to the Stock Photo: <br>Special Thanks</h2>
81
            <p class="lead">A special thanks to Death to the Stock Photo for providing the photographs that you see in this template. <a target="_blank" href="http://join.deathtothestockphoto.com/">Visit their website</a> to become a member.</p>
82
          </div>
83
          <div class="col-lg-5 col-lg-offset-2 col-sm-6">
84
            <img class="img-responsive" src="img/ipad.png" alt="">
85
          </div>
86
        </div>
87
  
88
      </div><!-- /.container -->
89
90
    </div><!-- /.content-section-a -->
91
    <!-- ... omitted ... -->
92
    </body>
93
</html>

Y nuestra página debería tener un aspecto similar al de la carga:

tour-welcometour-welcometour-welcome

En el tercer paso podemos ver la función backdrop en acción:

tour-main-sectiontour-main-sectiontour-main-section

¡Genial! Hemos hecho un recorrido funcional en unas treinta líneas de JavaScript.


Utilizar el contenido dinámico

Los recorridos son mucho mejores cuando son personalizados, así que preguntemos a nuestro usuario cuál es su nombre al principio del recorrido, y utilicémoslo durante el resto de los pasos del recorrido. Aquí está el JavaScript que utilizamos para lograr esto.

1
(function(){
2
    var name = "Friend";
3
    var tour = new Tour({
4
        storage : false
5
    });
6
7
    tour.addSteps([
8
      {
9
        element: ".tour-step.tour-step-one",
10
        placement: "bottom",
11
        title: "Welcome to our landing page!",
12
        content: "What's your name? <br><input class='form-control' type='text' name='your_name'>",
13
        onNext : function(tour){
14
            var nameProvided = $("input[name=your_name]").val();
15
            if ($.trim(nameProvided) !== ""){
16
                name = nameProvided;
17
            }
18
        }
19
      },
20
      {
21
        element: ".tour-step.tour-step-two",
22
        placement: "bottom",
23
        title: function(){ return "Welcome, " + name; },
24
        content: "Here are the sections of this page, easily laid out."
25
      },
26
      {
27
        element: ".tour-step.tour-step-three",
28
        placement: "top",
29
        backdrop: true,
30
        title: "Main section",
31
        content: "This is a section that you can read. It has valuable information."
32
      },
33
      {
34
        element: ".tour-step.tour-step-four",
35
        placement: "top",
36
        orphan: true,
37
        title: "Thank you.",
38
        content: function(){ return "We can't wait to see what you think, "+name+"!" }
39
      },
40
41
    ]);
42
43
    // Initialize the tour
44
    tour.init();
45
46
    // Start the tour
47
    tour.start();
48
49
}());

Nota que los argumentos content y title pueden ser una cadena o una función, lo que permite que sean evaluados en el momento en que se muestra el popover. La llamada de retorno para el primer paso obtiene el nombre del usuario (utilizando las clases incorporadas de Bootstrap para el estilo), y luego mostramos ese nombre en el segundo y último (nuevo) paso. Si el usuario no introduce un nombre, o solo introduce espacios en blanco, establecemos el nombre por defecto como "Amigo".

El último paso también introduce una nueva propiedad, orphan. Esto permite separar el paso de cualquier elemento en particular. Solo hemos dejado las clases de elementos para dar continuidad, y en caso de que eventualmente queramos adjuntar ese paso a un elemento. Este es el aspecto del último paso:

tour-thankstour-thankstour-thanks

¡Sé creativo!

Si quieres que tu recorrido sea útil, necesitas una buena estrategia de contenidos. No te limites a poner unas cuantas frases en tu configuración de JavaScript y darlo por hecho; piensa en lo que intentas inspirar al usuario, ya sea para que utilice tu aplicación o simplemente para que esté encantado.

Escribe una narración

Antes de redactar el recorrido, escribe la historia del usuario que va a experimentar el recorrido. Averigua quién es el usuario y qué pensará y hará a lo largo del proceso. Una gira está intrínsecamente fijada en una especie de línea de tiempo; aprovecha esto. Desarrollar una línea argumental, con una introducción dinámica, un ascenso y una conclusión, y aplicar el concepto a la gira.

Informar y deleitar

Horacio dijo una vez:

El objetivo del poeta es informar o deleitar, o combinar juntos, en lo que dice, tanto el placer como la aplicabilidad a la vida.

El famoso diseñador Milton Glaser lo amplió diciendo:

El objetivo del arte es informar y deleitar.

Este también puede ser el objetivo de una buena visita a la web. Piensa en cómo puedes no solo crear contenido informativo, sino también entretener al usuario durante el proceso. Por ejemplo, dar al usuario alguna sensación de logro cuando complete el recorrido:

1
var tour = new Tour({
2
    onEnd : function(tour){
3
        giveAward();
4
    }
5
});
6
7
function giveAward(){
8
    $(".award").addClass("show");
9
    setTimeout(function(){
10
        $(".award").removeClass("show");
11
    })
12
}

Este fragmento podría mostrar al usuario algo al final del recorrido como una especie de "agradecimiento" del guía turístico (que eres tú) por haber completado el viaje.

Utiliza el medio

HTML es flexible. No te limites a hacer las cosas paso a paso; sumérgete en el uso de callbacks y en la observación del comportamiento del usuario para hacer más interactivas experiencias como las visitas guiadas. Por ejemplo, podrías usar esta biblioteca para hacer una narrativa del estilo "elige tu propia aventura" que salta entre pasos, usando el método goTo(). Utiliza callbacks para activar comportamientos ricos, como animaciones o inyecciones de iFrame. Sé creativo y recuerda el poder del medio.

1
<script>
2
// initialize/start tour, etc

3
// listen for a click on any element with the class "go-to",

4
// And take the tour to a step matching the data-go-to-step attribute

5
$(document).on("click", ".go-to", function(e){
6
    // just be sure we have an integer instead of a string,

7
    // to match the documentation

8
    var step = parseInt($(this).data("go-to-step"));
9
    tour.goTo(step);
10
});
11
</script>
12
<!-- inside a popover: -->
13
<button data-go-to-step="42">Get to the meaning!</button>

Conclusión

Bootstrap Tour es un potente plugin que puede ayudarte a empezar rápidamente. Si aplicas las mejores prácticas de UX y diseño de contenidos, un tour puede ser justo lo que necesitas para conectar con tu audiencia de una manera poderosa. Bootstrap Tour ofrece aún más flexibilidad de la que hemos cubierto aquí, así que si quieres un segundo artículo que vaya aún más lejos con Bootstrap Tour, ¡asegúrate de hacérnoslo saber en los comentarios! ¿Qué otros usos se te ocurren? ¡Hazlo saber a todo el mundo a continuación!