答题抢红包(答题功能JS部分)
Posted 去糖不加冰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了答题抢红包(答题功能JS部分)相关的知识,希望对你有一定的参考价值。
答题页面
一、题目信息渲染
var data="";//后台传过来的json数据
var index=0;//表示当前渲染题目的下标
function romance(){
$('#time-sec').text(20);//页面定时开始数
$('#time-plan').css('width','0%');//定时进度
/*
根据index取出data里面的题目信息并进行拼串
然后渲染页面
*/
writer = '';
var writer = (index + 1) + '/' + data.length + '(';
writer += data[index].type == 1 ? '选择题' : data[index].type == 2 ? '判断题' : data[index].type == 3 ? '多选题' : '类型未知';
writer += ') : '+data[index].title;
$('#answer-title').html(writer);
/*
渲染题目里面的选项内容
*/
writer = '';
var arr = data[index].options;
for(var i = 0; i < arr.length; i++){
writer += '<div class="'
+ (data[index].type == 1 || data[index].type == 2 ? 'radio' : 'checkbox')
+ '">';
writer += '<label "><input type="'
+ (data[index].type == 1 || data[index].type == 2 ? 'radio' : 'checkbox')
+'" value="'+arr[i].sub_number+'" name="types" ><span>';
if(data[index].type != 2){
var fontOption = escapes(arr[i].sub_number);
writer += ' ' + fontOption + ' ';
}
writer += arr[i].question_option;
writer += '</span></label>';
}
$('#answer-body').html(writer);
//定时500秒后开始调用setTime周期循环定时器
setTimeout(function(){
setTime();
},500)
}
主要就是根据当前的index,取出data中的数据然后渲染页面。
二、定义点击下一题按钮
window.onload = function(){
/*
按钮绑定点击事件
判断当前状态做下一步操作
changeFlag是作为一个开关,当用户答错题changeFlag为false;此时是在页面底部显示正确的内容等等
*/
$('#btn-next').click(function(){
if(changeFlag){
btnNext();
}else{
$('#nav-error').css('display','none');//错误弹窗隐藏
changeFlag = true;
if(index == data.length - 1 ){//判断当前是否是到最后一页
$('#btn-next').html('完成');
}else if(index >= data.length){
endAnswer();//调用输出用户答对了多少题是否可以抽奖
return false;
}
romance();//调用渲染页面方法
}
if(index == data.length){//判断是否答完题
sendAnswer();//ajax将信息发送到后台的方法,此方法根据接口写
}
})
//判断是否数据题
if(data.length < 1){
$('#content-answer').css('display',"none");
$('#title-val').text('此活动没有题');
$('.btn-lg').css('display',"none");
}else{
romance();
}
}
此块代码是定义按钮不同情况要执行的内容。
三、对题目信息进行判断(核心部分)
function btnNext(){
var flag = true;
var optionNum = new Array();//将用户选择的题添加到数组中
/*
jQuery获取input并进行过滤checked然后遍历并将value值push到数组中
*/
$('input[name*="types"]:checked').each(function(){
flag = false;
optionNum.push(this.value);
})
if(flag){//如果用户没有选择对用户进行提示
$('#change-alert').text('请选此题的答案!!!')
$('#myModal').modal('show');
return false;
}
clearInterval(time);//清除周期定时器
var result = data[index].result.split(',');//取出数据中的正确答案
var judge = function(){//对用户选择的答案进行判定
if(result.length !== optionNum.length){//判断数组长度是否相等
return false;
}
//for比对数据如果有不一致的数据返回false
for(var i = 0; i < result.length; i++){
flag = false;
for(var j = 0; j < optionNum.length; j++){
if(result[i] == optionNum[i]){
flag = true;
break;
}
}
if(!flag){
break;
return false;
}
}
if(i == result.length && flag){//最后进行判断一致返回true
return true;
}else{
return false;
}
}
index += index >= data.length ? 0 : 1;//index加一
/*
判断答题情况如果错误执行错误的内容
*/
if(!judge()){
$('#change-alert').text('回答错误!!!');//弹窗提示
$('#myModal').modal('show');//显示弹窗
var errorStr = '';
$('input[name*="types"]').attr('disabled','disabled');//禁止选择输入框
//for遍历取出用户选择的内容与正确的内容给用户查看
for(var i = 0; i < optionNum.length; i++){
errorStr += '<p> <span>';
errorStr += (data[i].type != 2 ? escapes(optionNum[i]) : '' + ' ') + data[index - 1].options[optionNum[i] - 1].question_option;
errorStr += '</span></p>';
}
$('#you-option').html(errorStr);
var errorStr = '';
for(var i = 0; i < result.length; i++){
errorStr += '<p> <span>';
errorStr += (data[i].type != 2 ? escapes(result[i]) : '' + ' ') + data[index - 1].options[result[i] - 1].question_option;
errorStr += '</span></p>';
}
$('#my-option').html(errorStr);
$('#nav-error').css('display','block');//显示底部答案信息块
changeFlag = false;
return false;
}
/*
如果答案正确执行下面的代码
*/
number++;//对正确的数量计算
if(index == data.length - 1){//判断是否是最后一题
$('#btn-next').html('完成');
}
if(index >= data.length){
endAnswer();
return false;
}
romance();//调用页面渲染方法
}
四、页面定时
有兴趣自己研究下,个人感觉还有优化空间不作介绍了
function setTime(){
var timeNum = 20;
time = setInterval(function(){
timeNum--;
$('#time-sec').text(timeNum);
var plan = 100 / 20 * (20 - timeNum);
$('#time-plan').css('width',plan+'%');
if(timeNum < 0){
timeNum = 20;
index++;
console.log(index);
if(index == data.length){
sendAnswer();
endAnswer();
}else{
romance();
}
clearInterval(time);
}
},1000)
}
以上是关于答题抢红包(答题功能JS部分)的主要内容,如果未能解决你的问题,请参考以下文章