0

我有一个用Drupal 8和构建的网站Bootstrap 3。当用户访问该站点时,会Tour自动启动。完成Tour后,将在访问者的浏览器中放置一个 cookie,以便Tour在用户重新加载页面时不会启动。

网站: https ://www.s1biose.com

我的问题 :

我在左侧菜单上创建了一个按钮Commencer la visite,以便用户Tour手动访问。

每次我Tour手动重启时,都会时不时出现一个bug。必须在不同的页面上重新启动几次才能看到错误。

如何纠正这个?

这是我在bs-tour.js文件末尾添加的代码:

        // Restart the tour
        var startTour = $('#bs-tour-restart');
        startTour.click(function (event) {
          event.preventDefault();
          var tourObject = drupalSettings.bs_tour.currentTour;
          if (tourObject && tourObject._options.steps.length) {
            tourObject.start(true);
          }
        });

        // Close collapse navigation
        $('#bs-tour-restart').click(function () {
        $('#navbar-collapse-first, #navbar-collapse-second').collapse('hide');
        });

这是我的 bs-tour.js 文件:

(function ($, _, Drupal, drupalSettings) {
  'use strict';

  Drupal.behaviors.bsTour = {
    attach: function (context, settings) {
      $(window).on('load', function (event) {
        try
        {
          var tourOptions = $(drupalSettings.bs_tour.tour)[0];
          var tips = tourOptions.steps;
          var keyboard = tourOptions.keyboard;
          var debug = tourOptions.debug;
          var steps = [];

          for (var i = 0; i < tips.length; i++) {
            if ($(tips[i].element).length > 0) {
              tips[i].backdropPadding.top = parseInt(tips[i].backdropPadding.top);
              tips[i].backdropPadding.right = parseInt(tips[i].backdropPadding.right);
              tips[i].backdropPadding.bottom = parseInt(tips[i].backdropPadding.bottom);
              tips[i].backdropPadding.left = parseInt(tips[i].backdropPadding.left);

              switch (tips[i].backdrop) {
                case "0":
                  tips[i].backdrop = false;
                  break;

                case "1":
                  tips[i].backdrop = true;
                  break;
              }

              steps.push(tips[i]);
            }
          }

          if (steps.length) {
            var tour = new Tour({
              debug: debug,
              keyboard: keyboard,
              template: "<div class='popover tour'>\
              <div class='arrow'></div>\
              <h3 class='popover-title'></h3>\
              <div class='popover-content'></div>\
              <div class='popover-navigation'>\
              <button class='btn btn-default' data-role='prev'>« " + Drupal.t('Prev') + "</button>\
              <span data-role='separator'>|</span>\
              <button class='btn btn-default' data-role='next'>" + Drupal.t('Next') + " »</button>\
              <button class='btn btn-default' data-role='end'>" + Drupal.t('Skip tour') + "</button>\
              </div>\
              </div>",
            });

            // Add steps to the tour
            tour.addSteps(steps);

            // Initialize the tour
            tour.init();

            // Start the tour
            tour.start();

            // Restart the tour
            var startTour = $('#bs-tour-restart');
            startTour.click(function (event) {
              event.preventDefault();
              var tourObject = drupalSettings.bs_tour.currentTour;
              if (tourObject && tourObject._options.steps.length) {
                tourObject.start(true);
              }
            });

            // Close collapse navigation
            $('#bs-tour-restart').click(function () {
            $('#navbar-collapse-first, #navbar-collapse-second').collapse('hide');
            });

            // Add tour object to drupalSettings to allow manipulating tour from other modules.
            // Example: drupalSettings.bs_tour.currentTour.end();
            drupalSettings.bs_tour.currentTour = tour;
          }

        } catch (e) {
          // catch any fitvids errors
          window.console && console.warn('Bootstrap tour stopped with the following exception');
          window.console && console.error(e);
        }
      });
    }
  };

})(window.jQuery, window._, window.Drupal, window.drupalSettings);

当我启动时Tour,背景是黑色的:

在此处输入图像描述

4

1 回答 1

1

我不确定,但是当我启动访问时,我认为它在“菜单正确”中完成。

我查看了您的 js,发现还有其他步骤,正好是 8 个。一件事是您应该实现滚动以针对打开的步骤运行。

所以我滚动到底部,然后当我看到下一个按钮为灰色时,我完成了游览,游览结束,我无法重现您的问题。

我认为您应该使用“onShown”选项(http://bootstraptour.com/api/)使窗口滚动到目标元素。

最后(我认为)是您的问题只是因为旅行没有完成而引起的吗?


也许你可以用这样的代码进行测试,它没有经过测试,但它是类似的。

        var tour = new Tour({
          debug: debug,
          onShown: function(tour){
              var target = tour._options.steps[tour.getCurrentStep()].element;

                  $('html, body').animate({
                     scrollTop: $(target).offset().top
                   }, 2000);
          },
          keyboard: keyboard,
          template: "<div class='popover tour'>\
          <div class='arrow'></div>\
          <h3 class='popover-title'></h3>\
          <div class='popover-content'></div>\
          <div class='popover-navigation'>\
          <button class='btn btn-default' data-role='prev'>« " + Drupal.t('Prev') + "</button>\
          <span data-role='separator'>|</span>\
          <button class='btn btn-default' data-role='next'>" + Drupal.t('Next') + " »</button>\
          <button class='btn btn-default' data-role='end'>" + Drupal.t('Skip tour') + "</button>\
          </div>\
          </div>",
        });
于 2018-01-24T12:38:49.257 回答