2014-01-15 3 views
3

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

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

Есть ли способ пропустить шаг в целом, если элемент отсутствует?

Пример:

intro.setOptions({ 
    steps[ 
     {"element":".ow_status","intro":"status"}, 
     {"element":".ow_mailbox","intro":"mailbox"}, 
     {"element":".ow_test","intro":"test"} 
    ] 
}); 

В приведенном выше примере, если элемент с классом ow_mailbox нет, тур останавливается в середине, и это показывает, 3 шага, хотя только 2 с действительным элементом.

ответ

13

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

intro.setOptions({ 
    steps: [ 
     {"element":".ow_status","intro":"status"}, 
     {"element":".ow_mailbox","intro":"mailbox"}, 
     {"element":".ow_test","intro":"test"} 
    ].filter(function (obj) { 
     return $(obj.element).length; 
    }) 
}); 
+0

Wow. Вы заставили проблему выглядеть глупо :) Спасибо большое. – Purus

3

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

intro.setOptions({ 
    steps: [ 
    {"element":".ow_status","intro":"status"}, 
    {"element":".ow_mailbox","intro":"mailbox"}, 
    {"element":".ow_test","intro":"test"} 
    ].filter(function (obj) { 
    $(obj.element).is(':visible'); 
    }) 
}); 
+0

В новой версии intro.js есть исправления, связанные с моей проблемой. Поэтому вы можете попробовать это. – Purus

+0

Я пробовал 7.0, и он все еще включал шаги в верхнем левом углу для скрытых элементов. Это был единственный вариант, который работал для меня. – helloJello

0

Чтобы улучшить только немного ответ @Neil и позволяют плавучие шаги тоже, просто добавьте это:

intro.setOptions({ 
    steps: [ 
     {"element":".ow_status","intro":"status"}, 
     {"element":".ow_mailbox","intro":"mailbox"}, 
     {"element":".ow_test","intro":"test"} 
    ].filter(function (obj) { 
     return $(obj.element).length || obj.element == ".introjsFloatingElement";; 
    }) 
}); 
Смежные вопросы