jquery实现的美女拼图游戏实例
本文实例讲述了jquery实现的美女拼图游戏。分享给大家供大家参考。具体如下:
这里可以自由打乱拼图次序,3*3,4*4等多种组合来进行格数拼图
<!DOCTYPEhtml> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <title>Jquery-puzzleby4074</title> <style> html{ height:100%; } body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,button,textarea,p,blockquote,th,td{ padding:0; margin:0; } body{ font-family:"HelveticaNeue","HiraginoSansGB","SegoeUI","MicrosoftYahei","微软雅黑",Tahoma,Arial,STHeiti,sans-serif; font-size:12px; background:#fff; color:#333; } a{ outline:none; -moz-outline:none; text-decoration:none; } .clearfix{ zoom:1; _height:1px; } .clearfix:after{ content:"."; display:block; height:0; clear:both; visibility:hidden; } .head{ height:50px; line-height:50px; padding-left:20px; border-bottom:1pxsolid#eee; box-shadow:1px1px5px#ccc; } .headh1{ float:left; width:320px; font-weight:normal; font-size:22px; } .headspan{ display:block; float:right; font-size:12px; color:#999; line-height:14px; margin:30px10px00; } .wrap{ width:1000px; margin:80pxauto; } .play_wrap{ width:300px; float:left; padding:20px; margin-left:200px; } #play_area{ position:relative; width:300px; height:300px; margin:auto; background:#fefefe; border-radius:2px; color:black; box-shadow:0px0px8px#09F; border:1pxsolid#fff; *border:1pxsolid#e5e5e5; cursor:default; } #play_area.play_cell{ width:48px; height:48px; border:1pxsolid#fff; border-radius:4px; position:absolute; background-position:5px5px; cursor:default; z-index:80; box-shadow:0px0px8px#fff; transition-property:background-position; transition-duration:300ms; transition-timing-function:ease-in-out; } #play_area.play_cell.hover{ filter:alpha(opacity=80); opacity:.8; box-shadow:0px0px8px#000; z-index:90; *border:1pxsolid#09F; } .play_menu{ float:left; margin-left:60px; font-size:14px; padding-top:20px; } .play_menup{ line-height:200%; clear:both; } .play_menua.play_btn{ display:block; margin-bottom:20px; width:80px; height:28px; line-height:28px; text-align:center; text-decoration:none; color:#333; background:#fefefe; border:1pxsolid#eee; border-radius:2px; box-shadow:1px1px2px#eee; border-color:#ddd#d2d2d2#d2d2d2#ddd; outline:none; -moz-outline:none; } .play_menua.play_btn:hover{ background-color:#fcfcfc; border-color:#ccc; box-shadow:inset0-2px6px#eee; } .play_menua#play_btn_level{ position:relative; margin-bottom:30px; } .level_text{ margin-left:-10px; } .level_icon{ display:block; position:absolute; top:12px; right:16px; width:0; height:0; overflow:hidden; border:5pxsolid#FFF; border-color:#999transparenttransparenttransparent; } .level_menu{ position:absolute; margin:-30px00px1px; display:none; } .level_menuul{ list-style:none; } .level_menuli{ float:left; } .level_menulia{ display:block; padding:3px10px; border:1pxsolid#e8e8e8; margin-left:-1px; color:#09c; } .level_menulia:hover{ background:#09c; color:#fefefe; } #info{ font-size:16px; margin:30px000; } #infoa{ color:#09F; } </style> <scripttype="text/javascript"src="js/jquery.min.js"></script> <scripttype="text/javascript"> varpuzzleGame=function(options){ this.img=options.img||""; this.e_playArea=$("#play_area"); this.e_startBtn=$("#play_btn_start"); this.e_playScore=$("#play_score"); this.e_playCount=$("#play_count"); this.e_levelBtn=$("#play_btn_level"); this.e_levelMenu=$("#play_menu_level"); this.areaWidth=parseInt(this.e_playArea.css("width")); this.areaHeight=parseInt(this.e_playArea.css("height")); this.offX=this.e_playArea.offset().left; this.offY=this.e_playArea.offset().top; this.levelArr=[[3,3],[4,4],[6,6]]; this.level=1; this.scoreArr=[100,200,400]; this.score=0; this.playCount=0; this.cellRow=this.levelArr[this.level][0]; this.cellCol=this.levelArr[this.level][1]; this.cellWidth=this.areaWidth/this.cellCol; this.cellHeight=this.areaHeight/this.cellRow; this.imgArr=[]; this.ranArr=[]; this.cellArr=[]; this.easing='swing'; this.time=400; this.thisLeft=0; this.thisTop=0; this.nextIndex; this.thisIndex; this.cb_cellDown=$.Callbacks(); this.isInit=false; this.isBind=false; this.start(); }; puzzleGame.prototype={ start:function(){ this.init(); this.menu(); }, set:function(options){ this.level=options.level===0?0:(options.level||1); }, menu:function(){ varself=this; this.e_startBtn.click(function(){ self.e_levelMenu.hide(); self.play(); }); this.e_levelBtn.click(function(){ if(self.playing)return; self.e_levelMenu.toggle(); }); this.e_levelMenu.find("a").click(function(){ self.e_levelMenu.hide(); self.e_levelBtn.find(".level_text").html($(this).html()) if(parseInt($(this).attr("level"))!==self.level){ self.set({ "level":$(this).attr("level") }); self.isInit=true; self.isBind=false; } }) }, play:function(){ if(this.isInit){ this.isInit=false; this.cellRow=this.levelArr[this.level][0]; this.cellCol=this.levelArr[this.level][1]; this.cellWidth=this.areaWidth/this.cellCol; this.cellHeight=this.areaHeight/this.cellRow; this.init(); } this.e_playCount.html(this.playCount=0); this.randomImg(); if(!this.isBind)this.bindCell(); }, init:function(){ var_cell; this.cellArr=[]; this.imgArr=[]; this.e_playArea.html(""); for(vari=0;i<this.cellRow;i++){ for(varj=0;j<this.cellCol;j++){ this.imgArr.push(i*this.cellCol+j); _cell=document.createElement("div"); _cell.className="play_cell"; $(_cell).css({ "width":this.cellWidth-2, "height":this.cellHeight-2, "left":j*this.cellWidth, "top":i*this.cellHeight, "background":"url("+this.img+")", "backgroundPosition":(-j)*this.cellWidth+"px"+(-i)*this.cellHeight+"px" }); this.cellArr.push($(_cell)); this.e_playArea.append(_cell); } } }, randomImg:function(){ varran,arr; arr=this.imgArr.slice(); this.ranArr=[]; for(vari=0,ilen=arr.length;i<ilen;i++){ ran=Math.floor(Math.random()*arr.length); this.ranArr.push(arr[ran]); this.cellArr[i].css({ "backgroundPosition":(-arr[ran]%this.cellCol)*this.cellWidth+"px"+(-Math.floor(arr[ran]/this.cellCol))*this.cellHeight+"px" }) arr.splice(ran,1); } $("#p").html(this.ranArr.join()) }, bindCell:function(){ varself=this; this.isBind=true; this.cb_cellDown.add(self.cellDown); for(vari=0,len=this.cellArr.length;i<len;i++){ this.cellArr[i].on({ "mouseover":function(){ $(this).addClass("hover"); }, "mouseout":function(){ $(this).removeClass("hover"); }, "mousedown":function(e){ self.cb_cellDown.fire(e,$(this),self); returnfalse; } }); } }, cellDown:function(e,_cell,self){ var//self=this, _x=e.pageX-_cell.offset().left, _y=e.pageY-_cell.offset().top; self.thisLeft=_cell.css("left"); self.thisTop=_cell.css("top"); self.thisIndex=Math.floor(parseInt(self.thisTop)/self.cellHeight)*self.cellCol; self.thisIndex+=Math.floor(parseInt(self.thisLeft)/self.cellWidth); _cell.css("zIndex",99); $(document).on({ "mousemove":function(e){ _cell.css({ "left":e.pageX-self.offX-_x, "top":e.pageY-self.offY-_y }) }, "mouseup":function(e){ $(document).off("mouseup"); $(document).off("mousemove"); self.cb_cellDown.empty(); if(e.pageX-self.offX<0||e.pageX-self.offX>self.areaWidth||e.pageY-self.offY<0||e.pageY-self.offY>self.areaHeight){ self.returnCell(); return; } var_tx,_ty,_ti,_tj; _tx=e.pageX-self.offX; _ty=e.pageY-self.offY; _ti=Math.floor(_ty/self.cellHeight); _tj=Math.floor(_tx/self.cellWidth); self.nextIndex=_ti*self.cellCol+_tj; if(self.nextIndex==self.thisIndex){ self.returnCell(); }else{ self.changeCell(); } } }) }, changeCell:function(){ varself=this, _tc=this.cellArr[this.thisIndex], _tl=this.thisLeft, _tt=this.thisTop, _nc=this.cellArr[this.nextIndex], _nl=(this.nextIndex%this.cellCol)*this.cellWidth, _nt=Math.floor(this.nextIndex/this.cellCol)*this.cellHeight; _nc.css("zIndex",98); this.cellArr[this.nextIndex]=_tc; this.cellArr[this.thisIndex]=_nc; this.ranArr[this.nextIndex]=this.ranArr[this.nextIndex]+this.ranArr[this.thisIndex]; this.ranArr[this.thisIndex]=this.ranArr[this.nextIndex]-this.ranArr[this.thisIndex]; this.ranArr[this.nextIndex]=this.ranArr[this.nextIndex]-this.ranArr[this.thisIndex]; _tc.animate({ "left":_nl, "top":_nt },self.time,self.easing,function(){ _tc.removeClass("hover"); _tc.css("zIndex",""); }) _nc.animate({ "left":_tl, "top":_tt },self.time,self.easing,function(){ _nc.removeClass("hover"); _nc.css("zIndex",""); self.check(); if(!self.cb_cellDown.has(self.cellDown))self.cb_cellDown.add(self.cellDown); }) }, returnCell:function(){ varself=this; this.cellArr[this.thisIndex].animate({ "left":self.thisLeft, "top":self.thisTop },self.time,self.easing,function(){ $(this).removeClass("hover"); $(this).css("zIndex",""); if(!self.cb_cellDown.has(self.cellDown))self.cb_cellDown.add(self.cellDown); }); }, check:function(){ this.e_playCount.html(++this.playCount); if(this.ranArr.join()==this.imgArr.join()){ this.success(); } }, success:function(){ alert("ok"); this.score+=this.scoreArr[this.level] this.e_playScore.html(this.score); } } $(document).ready(function(e){ varpg=newpuzzleGame({ img:"images/120908-1347075337_M.jpg" }); }); </script> </head> <body> <divclass="wrap"> <divclass="play_wrap"> <divid="play_area"></div> </div> <divclass="play_menu"> <aid="play_btn_start"class="play_btn"href="javascript:void(0);"unselectable="on">开始</a> <aid="play_btn_level"class="play_btn"href="javascript:void(0);"unselectable="on"> <spanclass="level_text">4x4</span> <spanclass="level_icon"></span> </a> <divclass="level_menu"id="play_menu_level"> <ul> <li> <ahref="javascript:void(0);"level=0>3x3</a> </li> <li> <ahref="javascript:void(0);"level=1>4x4</a> </li> <li> <ahref="javascript:void(0);"level=2>6x6</a> </li> </ul> </div> <p>完成:<spanid="play_score">0</span></p> <p>交换:<spanid="play_count">0</span></p> <p>说明:<br> -点击开始,小图片将随机打乱;<br> -拖动小图片可交换位置,顺序完全正确则为成功;<br> -难度分“3x3”、“4x4”、“6x6”三级;<br> -对应的分值为100、200、400; </p> </div> </div> </body> </html>
希望本文所述对大家的jQuery程序设计有所帮助。