(function($) { $.fn.jquizzy = function(settings) { var defaults = { questions: null, startImg: 'images/start.gif', endText: '已结束!', shortURL: null, sendResultsURL: null, resultComments: { perfect: '你是爱因斯坦么?', excellent: '非常优秀!', good: '很好,发挥不错!', average: '一般般了。', bad: '太可怜了!', poor: '好可怕啊!', worst: '悲痛欲绝!' } }; var config = $.extend(defaults, settings); if (config.questions === null) { $(this).html('<div class="intro-container slide-container"><h2 class="qTitle">Failed to parse questions.</h2></div>'); return; } var superContainer = $(this), answers = [], introFob = '<div class="intro-container slide-container"><a class="nav-start" href="#">请认真完成测试题。准备好了吗?<br/><br/><span><img src="' config.startImg '"></span></a></div>', exitFob = '<div class="results-container slide-container"><div class="question-number">' config.endText '</div><div class="result-keeper"></div></div><div class="notice">请选择一个选项!</div><div class="progress-keeper" ><div class="progress"></div></div>', contentFob = '', questionsIteratorIndex, answersIteratorIndex; superContainer.addClass('main-quiz-holder'); for (questionsIteratorIndex = 0; questionsIteratorIndex < config.questions.length; questionsIteratorIndex ) { contentFob = '<div class="slide-container"><div class="question-number">' (questionsIteratorIndex 1) '/' config.questions.length '</div><div class="question">' config.questions[questionsIteratorIndex].question '</div><ul class="answers">'; for (answersIteratorIndex = 0; answersIteratorIndex < config.questions[questionsIteratorIndex].answers.length; answersIteratorIndex ) { contentFob = '<li>' config.questions[questionsIteratorIndex].answers[answersIteratorIndex] '</li>'; } contentFob = '</ul><div class="nav-container">'; if (questionsIteratorIndex !== 0) { contentFob = '<div class="prev"><a class="nav-previous" href="#">< 上一题</a></div>'; } if (questionsIteratorIndex < config.questions.length - 1) { contentFob = '<div class="next"><a class="nav-next" href="#">下一题 ></a></div>'; } else { contentFob = '<div class="next final"><a class="nav-show-result" href="#">完成</a></div>'; } contentFob = '</div></div>'; answers.push(config.questions[questionsIteratorIndex].correctAnswer); } superContainer.html(introFob contentFob exitFob); var progress = superContainer.find('.progress'), progressKeeper = superContainer.find('.progress-keeper'), notice = superContainer.find('.notice'), progressWidth = progressKeeper.width(), userAnswers = [], questionLength = config.questions.length, slidesList = superContainer.find('.slide-container'); function checkAnswers() { var resultArr = [], flag = false; for (i = 0; i < answers.length; i ) { if (answers[i] == userAnswers[i]) { flag = true; } else { flag = false; } resultArr.push(flag); } return resultArr; } function roundReloaded(num, dec) { var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec); return result; } function judgeSkills(score) { var returnString; if (score === 100) return config.resultComments.perfect; else if (score > 90) return config.resultComments.excellent; else if (score > 70) return config.resultComments.good; else if (score > 50) return config.resultComments.average; else if (score > 35) return config.resultComments.bad; else if (score > 20) return config.resultComments.poor; else return config.resultComments.worst; } progressKeeper.hide(); notice.hide(); slidesList.hide().first().fadeIn(500); superContainer.find('li').click(function() { var thisLi = $(this); if (thisLi.hasClass('selected')) { thisLi.removeClass('selected'); } else { thisLi.parents('.answers').children('li').removeClass('selected'); thisLi.addClass('selected'); } }); superContainer.find('.nav-start').click(function() { $(this).parents('.slide-container').fadeOut(500, function() { $(this).next().fadeIn(500); progressKeeper.fadeIn(500); }); return false; }); superContainer.find('.next').click(function() { if ($(this).parents('.slide-container').find('li.selected').length === 0) { notice.fadeIn(300); return false; } notice.hide(); $(this).parents('.slide-container').fadeOut(500, function() { $(this).next().fadeIn(500); }); progress.animate({ width: progress.width() Math.round(progressWidth / questionLength) }, 500); return false; }); superContainer.find('.prev').click(function() { notice.hide(); $(this).parents('.slide-container').fadeOut(500, function() { $(this).prev().fadeIn(500); }); progress.animate({ width: progress.width() - Math.round(progressWidth / questionLength) }, 500); return false; }); superContainer.find('.final').click(function() { if ($(this).parents('.slide-container').find('li.selected').length === 0) { notice.fadeIn(300); return false; } superContainer.find('li.selected').each(function(index) { userAnswers.push($(this).parents('.answers').children('li').index($(this).parents('.answers').find('li.selected')) 1); });progressKeeper.hide();var resultSet = ''; if (config.sendResultsURL !== null) { var collate = [];var myanswers = ''; for (r = 0; r < userAnswers.length; r ) { collate.push('{"questionNumber":"' parseInt(r 1, 10) '", "userAnswer":"' userAnswers[r] '"}');myanswers = myanswers userAnswers[r] '|'; }$.getJSON(config.sendResultsURL,{an:myanswers},function(json){if(json==null){alert('通讯失败!');}else{var corects = json['res'];$.each(corects,function(index,array){resultSet = '<div class="result-row">' (corects[index] === 1 ? "<div class='correct'>#" (index 1) "<span></span></div>": "<div class='wrong'>#" (index 1) "<span></span></div>") '</div>';});resultSet = '<h2 class="qTitle">' judgeSkills(json.score) '<br/> 您的分数: ' json.score '</h2><div class="jquizzy-clear"></div>' resultSet '<div class="jquizzy-clear"></div>';superContainer.find('.result-keeper').html(resultSet).show(500);}}); } //superContainer.find('.resultsview-qhover').hide(); $(this).parents('.slide-container').fadeOut(500, function() { $(this).next().fadeIn(500); }); return false; }); };})(jQuery);
评论