Javascript测验在网站和博客上正成为一种流行趋势。它们为您提供了一种吸引访问者与您的网站互动的方式,并展示您对HTML、CSS和Javascript的了解。
在本教程中,我将指导您使用问答jQuery插件创建一个响应迅速、动态、设计精美、多语言的问答。答案保存在cookie中,问答可以通过url中的哈希完全导航。
1.在文档中加载所需的jQuery库和Bootstrap 4框架。
<link rel="stylesheet" href="/path/to/cdn/bootstrap.min.css" /> <script src="/path/to/cdn/jquery.min.js"></script> <script src="/path/to/cdn/bootstrap.bundle.min.js"></script>
2.下载并加载jQuery quiz.js插件的文件。
<link rel="stylesheet" href="./dist/jquery.quiz.css" /> <script src="./dist/jquery.quiz.js"></script>
3.创建一个空的DIV容器来容纳测验。
<div id="example"></div>
4.用JSON定义您自己的问答问题和答案,如下所示。
// quiz.json [{ "questions": [{ "question": "What's my favorite color?", "description": "Optional Description", "answers": [{ "answer": "Red", "alert": "<strong>The answer is incorrect.</strong> See <a href=\"#\"> for details!</a>", "true": 0 }, { "answer": "Black", "alert": "<strong>Exactly!</strong> See <a href=\"#\"> for details!</a>", "true": 1 }, { "answer": "Blue", "alert": "<strong>The answer is incorrect.</strong> See <a href=\"#\"> for details!</a>", "true": 0 }] }, { "question": "What is my favorite programming language?", "description": null, "answers": [{ "answer": "PHP", "alert": "<strong>The answer is incorrect.</strong> See <a href=\"#\"> for details!</a>", "true": 0 }, { "answer": "C++", "alert": "<strong>The answer is incorrect.</strong> See <a href=\"#\"> for details!</a>", "true": 0 }, { "answer": "JavaScript", "alert": "<strong>Exactly!</strong> See <a href=\"#\"> for details!</a>", "true": 1 }] }, { "question": "What is my favorite country?", "description": null, "answers": [{ "answer": "UK", "alert": "<strong>Exactly!</strong> See <a href=\"#\"> for details!</a>", "true": 1 }, { "answer": "US", "alert": "<strong>The answer is incorrect.</strong> See <a href=\"#\"> for details!</a>", "true": 0 }, { "answer": "France", "alert": "<strong>The answer is incorrect.</strong> See <a href=\"#\"> for details!</a>", "true": 0 }] }, { "question": "Who is my favorite celebrity?", "description": null, "answers": [{ "answer": "Johnny Depp", "alert": "<strong>The answer is incorrect.</strong> See <a href=\"#\"> for details!</a>", "true": 0 }, { "answer": "Emma Watson", "alert": "<strong>The answer is incorrect.</strong> See <a href=\"#\"> for details!</a>", "true": 0 }, { "answer": "Arnold Schwarzenegger", "alert": "<strong>Exactly!</strong> See <a href=\"#\"> for details!</a>", "true": 1 }] }], "params": { "intro": 1, "intromessage": "A jQuery plugin that lets you create responsive and beautiful quizzes on the page. " } }]
5.初始化插件并在页面上生成一个测试。
$(document).ready(function(){ $('#example').quiz({ // path to JSON quizJson: "quiz.json", // handle results onResults: function(good, total){ var perc = good / total; var alert = $('<div class="alert"></div>') .prependTo(this); if(perc == 0){ alert.addClass('alert-danger') .html('All wrong! You didn't get an answer right.'); } else if(perc > 0 && perc <= 0.25){ alert.addClass('alert-danger') .html('Poor result! You just got it right ' + good + ' answers on ' + total + '. Try again.'); } else if(perc > 0.25 && perc <= 0.5){ alert.addClass('alert-danger') .html('Just sufficient! You got it right ' + good + ' answers on ' + total + '. You can do better.'); } else if(perc > 0.5 && perc <= 0.75){ alert.addClass('alert-success') .html('Discreet result! You got it right ' + good + ' answers on ' + total + '. Try again.'); } else if(perc > 0.75 && perc < 1){ alert.addClass('alert-success') .html('Good result! You got it right ' + good + ' answers on ' + total + '. We are almost there.'); } else if(perc == 1){ alert.addClass('alert-success') .html('Congratulations, you have answered all the questions!'); } } }); });
6.指定答案选择cookie将被设置为过期的天数。默认值:3600(以秒为单位)。
$('#example').quiz({ cookieExpire: 7200, });
7.确定是否隐藏下一个/上一个按钮。默认值:false。
$('#example').quiz({ hidePrevBtn: true, hideRestartBtn: true, });
8.启用/禁用渐变过渡。默认值:true。
$('#example').quiz({ fade: true, });
9.设置问题的数量。默认值:false(无限制)。
$('#example').quiz({ numQuestions: 5, });
10.自定义问题模板。
$('#example').quiz({ // Templates introTpl: '<div class="quiz_intro">' // Quiz title + '<h2><%this.title%></h2>' // Quiz description + '<%if(this.description){%>' + '<p><%this.description%></p>' + '<%}%>' // end if + '</div>', questionTpl: '<div class="' + FLEX_CLASS + '">' + '<div class="' + NUM_CLASS + '">' // Quiz num question + '<%this.question.num%>' + '.</div>' + '<div class="' + FLEXFILL_CLASS + '">' + '<h2>' // Quiz question + '<%this.question.question%>' + '</h2>' // Quiz question description + '<%if(this.question.description){%>' + '<p>' + '<%this.question.description%>' + '</p>' + '<%}%>' // end if // Cycle answers + '<%for(var index in this.answers){%>' + '<div class="quiz_radiogroup">' // Quiz radio + '<input type="radio" id="answer-<%this.answers[index].num%>" ' + 'name="question<%this.question.id%>" ' + 'value="<%this.answers[index].num%>" ' // This data (quiz-name and quiz-value) are mandatory + 'data-quiz-name="question<%this.question.id%>" ' + 'data-quiz-value="<%this.answers[index].num%>"' // § mandatory + '<%this.answers[index].checked%>>' + '<label for="answer-<%this.answers[index].num%>"><span></span> ' // Answer label + '<%this.answers[index].answer%>' + '</label>' + '</div>' + '<%}%>' // end for + '</div>' + '</div>', resultsTpl: '<div class="' + FLEX_CLASS + '">' + '<div class="' + NUM_CLASS + '">' // Quiz num question + '<%this.question.num%>' + '.</div>' + '<div class="' + FLEXFILL_CLASS + '">' + '<h2>' // Quiz question + '<%this.question.question%>' + '</h2>' // Quiz question description + '<%if(this.question.description){%>' + '<p>' + '<%this.question.description%>' + '</p>' + '<%}%>' // end if // Answer + '<%if(this.answer){%>' + '<div class="' + RESPONSE_CLASS + '">' + '<strong>' // Answer num + '<%this.answer.num + 1%>' + '.</strong> ' // Answer + '<%this.answer.answer%>' + '</div>' // Correct response + '<%if(this.answer.true == 1){%>' + '<div class="' + ALERT_CLASS + ' quiz_success">' + THUMBSUP_ICO // Answer alert + '<%this.answer.alert%>' + '</div>' // Else wrong response + '<%} else{%>' + '<div class="' + ALERT_CLASS + ' quiz_fail">' + THUMBSDOWN_ICO // Answer alert + '<%this.answer.alert%>' + '</div>' + '<%}%>' // end if + '<%}%>' // end if + '</div>' + '</div>', startBtnTpl: '<button class="' + BTN_CLASS + '">' // Button start + '<%this.messages.start%>' + PLAY_ICO + '</button>', prevBtnTpl: '<button class="' + BTN_CLASS + '">' + BACKWARD_ICO // Button previous + '<%this.messages.prev%>' + '</button>', nextBtnTpl: '<button class="' + BTN_CLASS + '">' // Button next + '<%this.messages.next%>' + FORWARD_ICO + '</button>', resultBtnTpl: '<button class="' + BTN_CLASS + '">' // Button go to results + '<%this.messages.results%>' + FORWARD_ICO + '</button>', restartBtnTpl: '<button class="' + BTN_CLASS + '">' + REPEAT_ICO // Button restart + '<%this.messages.restart%>' + '</button>', modalBtnTpl: '<button class="' + BTN_CLASS + '" data-dismiss="modal">' + REPEAT_ICO // Button restart (modal) + '<%this.messages.restart%>' + '</button>', progressTpl: false });
11.将测验信息本地化。
$.quiz('localization', { start: 'Start', prev: 'Back', next: 'Forward', results: 'Go to results', restart: 'Back to the top', error: 'Error', errmsg: [ 'Please choose an answer', 'Some questions have not been answered. Please, back to the top to answer all questions' ] });
12.或者在页面上包含您选择的语言JS。
<script src="./dist/i18n/messages_de.js"></script> <script src="./dist/i18n/messages_es.js"></script> <script src="./dist/i18n/messages_fr.js"></script> <script src="./dist/i18n/messages_it.js"></script> <script src="./dist/i18n/messages_nl.js"></script> <script src="./dist/i18n/messages_pt.js"></script>
2022-05-22
2022-02-26