js连连看
首先见证奇迹的时刻---效果图如下:
实现主要分为三个部分:
一、创建元素块
二、随机分布元素块
三、事件绑定
一、创建元素块
生成span的元素标签,并将标签添加到父容器中,设置其left、top和background属性。
/* * creSpan 创建元素标签 * n 指当前个数 * mpId 指父容器 * mleft 指其left属性值 * mtop 指其top属性值 * bgcolor 指其背景色属性值 */ function creSpan(n,mpId,mleft,mtop,bgcolor){ var mSpan = document.createElement("span"); var pId = mpId[0]; pId.appendChild(mSpan); with(mSpan.style){ left = mleft+"px"; top = mtop+"px"; background =bgcolor; } }
二、随机分布元素块
为了方便理解,将其过程以趣味题的形式描述出来。
==========================================================
有96个方块,每排放12块,一共放8排,现在有六个颜色的油漆桶,每个油漆桶的颜色不同,
现在让这六种颜色随机涂抹这96个方块,有一点要求是每种涂色方块的总数是偶数 。
==========================================================
思路:
96块和6种颜色
96 - 6 =90 让前90块颜色随机出现,并记录每种颜色出现的总和
后6块一块一块校正,根据当前颜色的总和,如果为奇数,让其继续加一,偶数时为方块涂抹给后面将要出现的颜色值
var arrColor = ["#FF00FF","#FFFF00","#00FFFF","#FF0000","#00FF00","#0000FF"]; //颜色值 var myleft = 3; // 初始的left值 var mytop = 3; // 初始的top值 var arr = new Array(); // 将每一个span对象存放在二维数组中 var test = $("#test"); // 父容器 var arrtmp =[0,0,0,0,0,0]; // 颜色计数器 var tmpcolor =arrColor[0]; // 当前颜色 for(var j=0;j<8;j++){ arr[j] = new Array(); if(j===7){ for(var i=0;i<12;i++){ if(i!==0){ myleft+=32; } if(i===6){ if(arrtmp[0]%2===0){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[1]); arrtmp[1]++; } else{ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[0]); arrtmp[0]++; } } else if(i===7){ if(arrtmp[1]%2===0){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[2]); arrtmp[2]++; } else{ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[1]); arrtmp[1]++; } } else if(i===8){ if(arrtmp[2]%2===0){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[3]); arrtmp[3]++; } else{ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[2]); arrtmp[2]++; } } else if(i===9){ if(arrtmp[3]%2==0){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[4]); arrtmp[4]++; } else{ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[3]); arrtmp[3]++; } } else if(i===10){ if(arrtmp[4]%2===0){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[5]); arrtmp[5]++; } else{ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[4]); arrtmp[4]++; } } else if(i===11){ if(arrtmp[5]%2===0){ } else{ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,arrColor[5]); arrtmp[5]++; } } else{ tmpcolor=arrColor[parseInt(Math.random()*arrColor.length)]; if(tmpcolor===arrColor[0]){ arrtmp[0]++; } else if(tmpcolor===arrColor[1]){ arrtmp[1]++; } else if(tmpcolor===arrColor[2]){ arrtmp[2]++; } else if(tmpcolor===arrColor[3]){ arrtmp[3]++; } else if(tmpcolor===arrColor[4]){ arrtmp[4]++; } else if(tmpcolor===arrColor[5]){ arrtmp[5]++; } arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,tmpcolor); } } } else{ for(var i=0;i<12;i++){ if(i!==0){ myleft+=32; } tmpcolor=arrColor[parseInt(Math.random()*arrColor.length)]; if(tmpcolor===arrColor[0]){ arrtmp[0]++; } else if(tmpcolor===arrColor[1]){ arrtmp[1]++; } else if(tmpcolor===arrColor[2]){ arrtmp[2]++; } else if(tmpcolor===arrColor[3]){ arrtmp[3]++; } else if(tmpcolor===arrColor[4]){ arrtmp[4]++; } else if(tmpcolor===arrColor[5]){ arrtmp[5]++; } arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop,tmpcolor); } } mytop+=32; myleft=3; }
三、事件绑定
相同颜色时,颜色块消失。
不同颜色块不消失。
两次点击同一个颜色块时,不消失。
var iclick = 0; // 记录状态组click点击的次数 var marr = new Array(); // 存储颜色值 var first = ""; // 记录每次状态组中的第一个span的当前数 var second =""; // 记录每次状态组中的第一个span的当前数 $.each($("#test span"),function(k,v){ $(this).click(function(){ if(iclick===0){ $(this).addClass("del"); marr[0]=$(this).css("backgroundColor"); first=k; } if(iclick===1){ $(this).addClass("del"); marr[1]=$(this).css("backgroundColor"); second=k; } iclick++; if(iclick>=2){ iclick=0; if(first!=second){ if( marr[0]===marr[1]){ $("#test").find(".del").detach(); } else{ $("#test span").removeClass("del"); } } else{ $("#test span").removeClass("del"); } } }); });
演示实例: