-
Notifications
You must be signed in to change notification settings - Fork 1
/
jsquiz.js
167 lines (143 loc) · 6.15 KB
/
jsquiz.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
(function() {
var questions = [{
question: "Какая из этих фраз принадлежит настоящему Толстому?",
choices: ["Всё смешалось в доме Облонских", "Всё перемешалось в особняке Облонских"],
correctAnswer: 0
}, {
question: "Какая из этих фраз принадлежит настоящему Толстому?",
choices: ["Глазки Степана Аркадьича радостно засверкали, и он задумался усмехаясь", "Глаза Степана Аркадьича весело заблестели, и он задумался улыбаясь"],
correctAnswer: 1
}, {
question: "Какая из этих фраз принадлежит настоящему Толстому?",
choices: ["С ним случилось в эту секунду то, что случается с людьми, когда они внезапно уличены в чем-нибудь чересчур позорном", "С ним случилось в эту минуту то, что случается с людьми, когда они неожиданно уличены в чем-нибудь слишком постыдном"],
correctAnswer: 1
}, {
question: "Какая из этих фраз принадлежит настоящему Толстому?",
choices: ["Повода не было, кроме того общего повода, который получает любовь на все самые разнообразные и нерешаемые аспекты", "Ответа не было, кроме того общего ответа, который дает жизнь на все самые сложные и неразрешимые вопросы"],
correctAnswer: 1
}, {
question: "Какая из этих фраз принадлежит настоящему Толстому?",
choices: ["Разорвав телеграмму, он прочел ее, догадкой поправляя перевранные, как всегда, слова, и лицо его просияло", "Разорвав депешу, он прочел ее, мыслью оправляя перевранные, как всегда, выражения, и личико его просияло"],
correctAnswer: 0
}];
var questionCounter = 0; //Tracks question number
var selections = []; //Array containing user choices
var quiz = $('#quiz'); //Quiz div object
// Display initial question
displayNext();
// Click handler for the 'next' button
$('#next').on('click', function (e) {
e.preventDefault();
// Suspend click listener during fade animation
if(quiz.is(':animated')) {
return false;
}
choose();
// If no user selection, progress is stopped
if (isNaN(selections[questionCounter])) {
alert('Пожалуйста, выберите ответ');
} else {
questionCounter++;
displayNext();
}
});
// Click handler for the 'prev' button
$('#prev').on('click', function (e) {
e.preventDefault();
if(quiz.is(':animated')) {
return false;
}
choose();
questionCounter--;
displayNext();
});
// Click handler for the 'Start Over' button
$('#start').on('click', function (e) {
e.preventDefault();
if(quiz.is(':animated')) {
return false;
}
questionCounter = 0;
selections = [];
displayNext();
$('#start').hide();
});
// Animates buttons on hover
$('.button').on('mouseenter', function () {
$(this).addClass('active');
});
$('.button').on('mouseleave', function () {
$(this).removeClass('active');
});
// Creates and returns the div that contains the questions and
// the answer selections
function createQuestionElement(index) {
var qElement = $('<div>', {
id: 'question'
});
var header = $('<h2>Вопрос ' + (index + 1) + ':</h2>');
qElement.append(header);
var question = $('<p>').append(questions[index].question);
qElement.append(question);
var radioButtons = createRadios(index);
qElement.append(radioButtons);
return qElement;
}
// Creates a list of the answer choices as radio inputs
function createRadios(index) {
var radioList = $('<ul>');
var item;
var input = '';
for (var i = 0; i < questions[index].choices.length; i++) {
item = $('<li>');
input = '<input type="radio" name="answer" value=' + i + ' /> ';
input += questions[index].choices[i];
item.append(input);
radioList.append(item);
}
return radioList;
}
// Reads the user selection and pushes the value to an array
function choose() {
selections[questionCounter] = +$('input[name="answer"]:checked').val();
}
// Displays next requested element
function displayNext() {
quiz.fadeOut(function() {
$('#question').remove();
if(questionCounter < questions.length){
var nextQuestion = createQuestionElement(questionCounter);
quiz.append(nextQuestion).fadeIn();
if (!(isNaN(selections[questionCounter]))) {
$('input[value='+selections[questionCounter]+']').prop('checked', true);
}
// Controls display of 'prev' button
if(questionCounter === 1){
$('#prev').show();
} else if(questionCounter === 0){
$('#prev').hide();
$('#next').show();
}
}else {
var scoreElem = displayScore();
quiz.append(scoreElem).fadeIn();
$('#next').hide();
$('#prev').hide();
$('#start').show();
}
});
}
// Computes score and returns a paragraph element to be displayed
function displayScore() {
var score = $('<p>',{id: 'question'});
var numCorrect = 0;
for (var i = 0; i < selections.length; i++) {
if (selections[i] === questions[i].correctAnswer) {
numCorrect++;
}
}
score.append('Правильно угадано: ' + numCorrect + ' из ' +
questions.length + '');
return score;
}
})();