这篇文章主要介绍了jquery实现的美女拼图游戏,实例分析了jQuery操作图片的相关技巧,需要的朋友可以参考下
本文实例讲述了jquery实现的美女拼图游戏。分享给大家供大家参考。具体如下:
这里可以自由打乱拼图次序,3*3,4*4等多种组合来进行格数拼图
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Jquery-puzzle by 4074</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: "Helvetica Neue", "Hiragino Sans GB", "Segoe UI", "Microsoft Yahei", "微软雅黑", 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:1px solid #eee;
- box-shadow: 1px 1px 5px #ccc;
- }
- .head h1{
- float:left;
- width:320px;
- font-weight:normal;
- font-size:22px;
- }
- .head span{
- display:block;
- float:right;
- font-size:12px;
- color:#999;
- line-height:14px;
- margin:30px 10px 0 0;
- }
- .wrap{
- width:1000px;
- margin:80px auto;
- }
- .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: 0px 0px 8px #09F;
- border:1px solid #fff;
- *border:1px solid #e5e5e5;
- cursor:default;
- }
- #play_area .play_cell{
- width:48px;
- height:48px;
- border:1px solid #fff;
- border-radius:4px;
- position:absolute;
- background-position: 5px 5px;
- cursor: default;
- z-index:80;
- box-shadow:0px 0px 8px #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: 0px 0px 8px #000;
- z-index:90;
- *border:1px solid #09F;
- }
- .play_menu{
- float:left;
- margin-left:60px;
- font-size:14px;
- padding-top:20px;
- }
- .play_menu p{
- line-height:200%;
- clear:both;
- }
- .play_menu a.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:1px solid #eee;
- border-radius: 2px;
- box-shadow: 1px 1px 2px #eee;
- border-color: #ddd #d2d2d2 #d2d2d2 #ddd;
- outline:none;
- -moz-outline:none;
- }
- .play_menu a.play_btn:hover{
- background-color: #fcfcfc;
- border-color: #ccc;
- box-shadow: inset 0 -2px 6px #eee;
- }
- .play_menu a#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:5px solid #FFF;
- border-color:#999 transparent transparent transparent;
- }
- .level_menu{
- position:absolute;
- margin:-30px 0 0px 1px;
- display:none;
- }
- .level_menu ul{
- list-style:none;
- }
- .level_menu li{
- float:left;
- }
- .level_menu li a{
- display:block;
- padding:3px 10px;
- border:1px solid #e8e8e8;
- margin-left:-1px;
- color:#09c;
- }
- .level_menu li a:hover{
- background:#09c;
- color:#fefefe;
- }
- #info{
- font-size:16px;
- margin:30px 0 0 0;
- }
- #info a{
- color:#09F;
- }
- </style>
- <script type="text/javascript" src="js/jquery.min.js"></script>
- <script type="text/javascript">
- var puzzleGame = 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(){
- var self = 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(var i = 0; i<this.cellRow; i++){
- for(var j = 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(){
- var ran,arr;
- arr = this.imgArr.slice();
- this.ranArr = [];
- for(var i = 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(){
- var self = this;
- this.isBind = true;
- this.cb_cellDown.add(self.cellDown);
- for(var i = 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);
- return false;
- }
- });
- }
- },
- 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(){
- var self = 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(){
- var self = 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) {
- var pg = new puzzleGame({
- img: "images/120908-1347075337_M.jpg"
- });
- });
- </script>
- </head>
- <body>
- <div class="wrap">
- <div class="play_wrap">
- <div id="play_area"></div>
- </div>
- <div class="play_menu">
- <a id="play_btn_start" class="play_btn" href="javascript:void(0);" unselectable="on">开始</a>
- <a id="play_btn_level" class="play_btn" href="javascript:void(0);" unselectable="on">
- <span class="level_text">4 x 4</span>
- <span class="level_icon"></span>
- </a>
- <div class="level_menu" id="play_menu_level">
- <ul>
- <li>
- <a href="javascript:void(0);" level=0 >3 x 3</a>
- </li>
- <li>
- <a href="javascript:void(0);" level=1 >4 x 4</a>
- </li>
- <li>
- <a href="javascript:void(0);" level=2 >6 x 6</a>
- </li>
- </ul>
- </div>
- <p>完成:<span id="play_score">0</span></p>
- <p>交换:<span id="play_count">0</span></p>
- <p>说明:<br>
- -点击开始,小图片将随机打乱;<br>
- -拖动小图片可交换位置,顺序完全正确则为成功;<br>
- -难度分“3x3”、“4x4”、“6x6”三级;<br>
- -对应的分值为100、200、400;
- </p>
- </div>
- </div>
- </body>
- </html>
希望本文所述对大家的jQuery程序设计有所帮助。
新闻热点
疑难解答
图片精选