Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

четверг, 11 июля 2013 г.

JavaScript гид по сайту

Люблю джаваскрипт за то, что c ним порой чувствуешь себя магом и волшебником. Не так давно в голове возникла идея - а что, если на сайт, который изначально не гибок в этом плане (без аджакса и джаваскриптовой цветомузыки) навешать немного джаваскрипта. Скажу сразу, речь идет об LMS Moodle (для тех, кто не в курсе - это CMS для тренингов). Так вот была у нас одна проблемка с ним - много че может делать, только вот ничего не понятно как это сделать - часто пользователи нас спрашивают "а как то?", "а как это?", причем, порой, даже сам забываешь где там кликнуть надо... Люблю я его за это - квестообразующий :) - не соскучишься с ним. Но это мне так интересно, а другим пользователям? Нужно максимально упрощать!

Идея пришла во время серфинга на другом сайте. Там был простенький гид, кликни там, кликни сям, а тут вот это, а тут ты можешь сделать это. И я подумал - хочу! Стал искать решения. Их есть с десяток. Но я хотел решения, которое будет чисто джаваскриптовым - без правки HTML. И оно нашлось! Сразу показываю результат, каким он получился у меня.


Есть такая библиотека с использованием JQuery, называется Guiders-JS. Настраивается достаточно не сложно. Вот код, который я вставил в боковую панельку чтобы линк Training Guide ожил.

<ul>
    <li>...</li>
    <li>...</li>
    <li>...</li>
    <li>...</li>
    <li><span id="training-guide"><a href="#">Training guide</a></span></li>
</ul>

<p id="training-guide-script">
    <script src="https://host.com/js/guiders-1.3.0/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="https://host.com/js/guiders-1.3.0/guiders-1.3.0.js" type="text/javascript"></script>
    <link rel="stylesheet" href="https://host.com/js/guiders-1.3.0/guiders-1.3.0.css" type="text/css" />
    <script src="https://host.com/js/guiders-1.3.0/training-guiders.js" type="text/javascript"></script>
</p>
Все просто. Создается линк никуда не ссылающийся (на него потом навешается обработчик с помощью jQuery). Подключается библиотека jQuery и Guiders-JS, подключается стиль и мой скрипт, в котором описаны окошки гида. Там же и навешивается обработчик на клик и делаются еще кой че.
$(document).ready(function () {
    if ($("#module-1224").size() == 0) {       // проверяем, если мы не на главной страничике (содержащей див
                                               // с айди module-1224), то запускать гид бессмысленно
        $('#training-guide').parent().hide();  // потому мы скрываем возможность вызвать гида
        return;
    }

    $('#training-guide').click(function () {  // при клике на линк  
        guiders.show("start");                       // открываем гид (первый диалог)
    });

    guiders.createGuider({      // создается первый диалог
        buttons: [              // с кнопкой next
            {name: "Next"}
        ],

        title: "**** ******* Guide", // это его заголовок
        description: "Hi! This is **** ****** training course guide. Hope it will help.", // с сообщением

        id: "start",           // это его айдиха
        next: "guide2",         // это айдиха того, куда переходим

        overlay: true,          // задний фон за диалогом будет затеняться
        xButton: true,          // у диалога будет кнопка X в правом верхнем углу
        closeOnEscape: false,   // по нажатию на Esc будет закрыто окно
        width: 350              // ширина диалога
    }).show();

    guiders.createGuider({      // создаем следующий шаг
        attachTo: "#inst16",    // он прикрепляется к диву с этой айдишкой
        position: 10,           // прицепляется в позиции 10. С каждой стороны к диву можно прицепиться: 
                                // с одного краю, с другого и по центру - всего 12 позиций. По часовой 
                                // стрелке от 1 до 12.
                                // 
                                // вот кусочек исходного кода библиотеки:
                                //    guiders._offsetNameMapping = {
                                //        "topLeft": 11,
                                //        "top": 12,
                                //        "topRight": 1,
                                //        "rightTop": 2,
                                //        "right": 3,
                                //        "rightBottom": 4,
                                //        "bottomRight": 5,
                                //        "bottom": 6,
                                //        "bottomLeft": 7,
                                //        "leftBottom": 8,
                                //        "left": 9,
                                //        "leftTop": 10
                                //     "};

        overlay: true,          // опять же фон будет размыт и в тени
        highlight: "#inst16",   // но сам див будет подсвечен

        buttons: [ {name: 'Next', onclick: guiders.next} ], //" на кнопку next навешивается обработчик - следующий диалог                      

        title: "",
        description: "You you can find useful links here.", // другое сообщение

        id: "guide2",          // айдиха текущего диалога
        next: "guide3",        // куда идем на следующий диалог

        autoFocus: true,       // если вдруг див ушел за пределы экрана, подсветить его проскролив страничку
        xButton: true,
        closeOnEscape: false,
        width: 350
    });

    function topic_toggle_new(number, isOpen) {  // это самописная функция которая разворачивает/сворачивает 
                                                 // модуля тренинга на Moodle, вызывая его js код
        var open = $("#toggle-" + number + " .toggle_closed");
        open = (open.size() > 0) ? open[0] : null;

        var close = $("#toggle-" + number + " .toggle_open");
        close = (close.size() > 0) ? close[0] : null;

        if (isOpen) {
            element = (open == null) ? null : open;
        } else {
            element = (close == null) ? null : close;
        }

        if (element != null) {
            toggle_topic(element, number);
        }
    }

    guiders.createGuider({         // создаем третий шаг
        attachTo: "#inst370",
        position: 10,

        highlight: "#inst370",
        overlay: true,

        buttons: [
            {name: "Next", onclick: function () {  // вот тут на next навешиваем больше чем одну 
                                                   // функцию - создли анонимную функцию и в ней 
                                                   // прописали весь сценарий  
                topic_toggle_new(1, false);
                topic_toggle_new(2, false);
                topic_toggle_new(3, false);
                topic_toggle_new(4, false);
                topic_toggle_new(5, false);
                topic_toggle_new(6, false);
                topic_toggle_new(7, false);
                topic_toggle_new(8, false);
                topic_toggle_new(9, false);
                topic_toggle_new(10, false);
                guiders.next();
            }}
        ],

        title: "",
        description: "For each code review you'll get 3 XP. More code " +
            "review you do - more XP you get. Collect XP and " +
            "distinguish yourself!",

        id: "guide3",
        next: "guide4",

        autoFocus: true,
        xButton: true,
        closeOnEscape: false,

        width: 350
    });

    // ну и так далее. На последнем шаге добавляется кнопка Close вот так
    // buttons: [{name: "Close", onclick: guiders.hideAll }]
    // ... 
});
Что замечательно, так это то, что я могу по линку https://host.com/training-page.html#guider=start открыть страничку с гидом.
Enjoy! И спасибо разработчикам Guiders-JS!!

Комментариев нет:

Отправить комментарий