Skip to content

Instantly share code, notes, and snippets.

@fixedis
Last active February 8, 2020 08:24
Show Gist options
  • Save fixedis/6abe98767d925c2de991d58191467a94 to your computer and use it in GitHub Desktop.
Save fixedis/6abe98767d925c2de991d58191467a94 to your computer and use it in GitHub Desktop.
Функция позволяет создавать пошаговый опросник (проще не куда) | Описание возможностей в комментариях
function Step (step, step_line, step_wrap, step_but, step_function_check, step_function_done, step_function_end) {
var Sl = {
stepCheck: null,
stepline: null,
stepLength: null,
stepNow: null,
stepBut: null,
stepFunctionCheck: null,
Set: function(step, step_line, step_wrap, step_but, step_function_check, step_function_done, step_function_end) {
Sl.stepCheck = $(step+' span');
Sl.stepline = $(step_line+' div');
Sl.stepWrap = $(step_wrap);
Sl.stepLength = $(step_wrap).children('li').length;
Sl.stepNow = 1;
Sl.stepBut = $(step_but);
Sl.stepFunctionCheck = step_function_check;
Sl.stepFunctionEnd = step_function_end;
console.log(Sl.stepNow, Sl.stepLength);
return Sl;
},
StepAnim: function() {
Sl.stepline.eq(0).css({
'width': 'calc(100% / '+Sl.stepLength+' * '+Sl.stepNow,
'transition': '1.0s'});
Sl.stepWrap.children().fadeOut(0);
$(Sl.stepWrap.children()[Sl.stepNow - 1]).fadeIn(0);
},
StepNext: function() {
Sl.stepNow++;
Sl.stepCheck.eq(0).html(Sl.stepNow);
Sl.StepAnim();
return Sl;
},
StepCancel: function() {
alert('Отменено');
return Sl;
},
Click: function() {
Sl.stepCheck.eq(0).html(Sl.stepNow);
Sl.stepCheck.eq(1).html(Sl.stepLength);
Sl.StepAnim();
Sl.stepBut.click(function(event) {
event.preventDefault();
event.stopPropagation();
(Sl.stepFunctionCheck(Sl.stepNow)) ?
(Sl.stepLength == Sl.stepNow) ?
Sl.stepFunctionEnd()
: Sl.StepNext()
: Sl.StepCancel();
});
return 'Выполнено без ошибок!';
}
};
console.log(Sl.Set(step, step_line, step_wrap, step_but, step_function_check, step_function_done, step_function_end).Click());
}
@fixedis
Copy link
Author

fixedis commented Apr 29, 2019

Функция позволяет создавать пошаговый опросник.

Это минимум необходимый для просмотра результата.

CSS

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
    .step_line_test {
        width: 100%;
        height: 7px;
        display: inline-flex; 
    }
    
    .step_line_in_test {
        height: 7px;
        background: #E8C48A;
    }
*/    
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Интересный момент заключается в том что блоки (step_test, step_line_test, step_wrap_test, step_but_test) могут быть размещены где угодно, в любом месте вашего HTML/PHP документа. Включая разнобой.

HTML

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
    <div poll='one_test'>
        <!-- подсчет шагов -->
        <p class='step_test'><span></span> из <span></span></p>

        <!-- линия прогресса -->
        <div class='step_line_test'><div class='step_line_in_test'></div></div>  

        <!-- блоки -->
        <ul class='step_wrap_test'>            
            <li>
                <p>box.1</p>
            </li>
            <li>
                <p>box.2</p>
            </li>            
            <li>
                <p>box.3</p>
            </li>
            <li>
                <p>box.4</p>
            </li>
        </ul>
        
        <!-- кнопка далее -->
        <div class='step_but_test'>далее</div>        
    </div>
*/    
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Суть заключается в том что при каждом шаге выполняется код в switch где номер шага равен текущему case где вы можете осуществлять все необходимые проверки в случае успеха возвращаем true и идет переключение на следующий шаг в противном случае возращаем false и выполняется функция error. В случае когда все шаги пройдены выполняется функция last_step.

JS

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
Step('.step_test', // подсчет шагов
     '.step_line_test', // линия прогресса
     '.step_wrap_test', // блоки
     '.step_but_test',  // кнопка далее
function (stepNow) {

    switch (stepNow) {

        case 1:
            console.log(1);
            return true;
            break;

        case 2:
            console.log(2);
            return true;
            break;

        case 3:
            console.log(3);
            return true;
            break;

        case 4:
            console.log(4);
            return true;
            break;
    }  

}, function (last_step) {

    alert('Выполнен последний шаг!');

}, function (error) {

    alert('Не выполнены условия на текущем шаге!');
});
*/    
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment