javascript原生小练习(三)--拼图小游戏
2016-09-07 15:50
344 查看
function setClass(obj,classname) { //alert(obj.className) var reg =new RegExp("(\\s|^)" + classname + "(\\s|$)");//前面有空格或者以classname为开头,后面有空格或者以classname为结尾 return { hasClass : obj.className.match(reg), addClass : function(){ if(!this.hasClass) { obj.className += " "+classname; } }, removeClass : function(){ if(this.hasClass) { obj.className = obj.className.replace(reg,""); } } } } function pintuGame(id) { var arr = [ {num:1,x:0,y:0}, {num:2,x:0,y:0}, {num:3,x:0,y:0}, {num:4,x:0,y:0}, {num:5,x:0,y:0}, {num:6,x:0,y:0}, {num:7,x:0,y:0}, {num:8,x:0,y:0}, {num:9,x:0,y:0} ], bg = "http://ww1.sinaimg.cn/thumb150/005YV5glgw1f1n1ric7uij30c80c8aan.jpg", firstClick = null, ifComplete = false, step = 0, obj = document.getElementById("js-pintu").getElementsByTagName("ul")[0]; arr = arr.sort(randomArr);//随机排列拼图 resetHtml(arr);//重置开始 function randomArr(a,b) { return Math.random() - 0.5; } function resetHtml(array) { var t =""; for(var i = 0;i < array.length;i++) { array[i].x = - ((array[i].num - 1) % Math.sqrt(array.length))*50; array[i].y = - parseInt((array[i].num - 1) / Math.sqrt(array.length))*50 t += "<li class=\"item\""+"style=\"background-image:url("+bg+");background-position:"+array[i].x+"px "+array[i].y+"px\""+">"+array[i].num+"<\/li>" } obj.innerHTML = t; for(var i = 0;i < arr.length;i++) { if(arr[i].num != i+1) { ifComplete = false; } } if(ifComplete) { alert("恭喜您,一共用了"+step+"步"); } else { for(var i = 0;i < arr.length;i++) { (function(i){ obj.getElementsByTagName("li")[i].onclick = function(){ if(firstClick === null) { firstClick = i; setClass(this,"current").addClass(); } changePic(i); } })(i); } } } function changePic(index) { var cha = Math.abs(index - firstClick); if(cha == 1 || cha == Math.sqrt(arr.length)) { var ar = arr[firstClick]; arr[firstClick] = arr[index]; arr[index] = ar; firstClick = null; step++; ifComplete = true; resetHtml(arr); } } } window.onload = function(){ pintuGame("#js-pintu"); }
<div id="js-pintu">
<ul class="piclist">
</ul>
</div>
*{margin:0;padding:0;list-style:none;} .piclist {width:150px;border:1px solid #ddd;overflow:hidden;*zoom:1;margin:50px;} .piclist li{float:left;width:50px;height:50px;border-left:1px solid #ddd;border-top:1px solid #ddd;margin-left:-1px;margin-top:-1px;text-align:center;cursor:pointer;position:relative;} .piclist .current:after{content:""; background:#000;opacity:.5;filter:alpha(opacity=50);width:100%;height:100%;position:absolute;top:0;left:0;}
相关文章推荐
- javascript原生小练习(二)--轮播图滚动效果
- Javascript 原生 全选 反选 不选 实战练习
- javascript原生小练习(一)--tab切换、getClassName、addClass、removeClass
- javascript 时间对象的练习
- JavaScript String原生类型的扩展
- javascript 语法学习练习
- Ajax Javascript 原生类型的疑问
- JavaScript Date原生类型的扩展
- 无殇 javascript正则练习器
- 练习javascript oop编程,写的一个遮罩层
- javascript数组练习
- javascript原生Dictionary类
- Javascript练习实例01:乘法口诀表与筛选素数
- javascript的dom练习代码参考
- Javascript验证练习。请求师兄修改bug 。出错时候为什么不能显示 “确定”按钮??
- javascript练习(一)
- Asp.Net Ajax 学习笔记9 JavaScript的原生类型以及Microsoft AJAX Library的相关扩展(上)
- JavaScript Object原生类型的扩展
- JavaScript的原生类型以及Microsoft AJAX Library的相关扩展
- javascript小练习