首页 > 语言 > JavaScript > 正文

jquery实现的美女拼图游戏实例

2024-05-06 16:19:18
字体:
来源:转载
供稿:网友

这篇文章主要介绍了jquery实现的美女拼图游戏,实例分析了jQuery操作图片的相关技巧,需要的朋友可以参考下

本文实例讲述了jquery实现的美女拼图游戏。分享给大家供大家参考。具体如下:

这里可以自由打乱拼图次序,3*3,4*4等多种组合来进行格数拼图

 

 
  1. <!DOCTYPE html> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  5. <title>Jquery-puzzle by 4074</title> 
  6. <style> 
  7. html{ 
  8. height:100%; 
  9. body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,button,textarea,p,blockquote,th,td{ 
  10. padding:0; 
  11. margin:0; 
  12. body{ 
  13. font-family: "Helvetica Neue""Hiragino Sans GB""Segoe UI""Microsoft Yahei""微软雅黑", Tahoma, Arial, STHeiti, sans-serif; 
  14. font-size:12px; 
  15. background:#fff; 
  16. color:#333; 
  17. a{ 
  18. outline:none; 
  19. -moz-outline:none; 
  20. text-decoration:none; 
  21. .clearfix{ 
  22. zoom:1; 
  23. _height:1px; 
  24. .clearfix:after{ 
  25. content:"."
  26. display:block; 
  27. height:0; 
  28. clear:both; 
  29. visibility:hidden; 
  30. .head{ 
  31. height:50px; 
  32. line-height:50px; 
  33. padding-left:20px; 
  34. border-bottom:1px solid #eee; 
  35. box-shadow: 1px 1px 5px #ccc; 
  36. .head h1{ 
  37. float:left; 
  38. width:320px; 
  39. font-weight:normal; 
  40. font-size:22px; 
  41. .head span{ 
  42. display:block; 
  43. float:right; 
  44. font-size:12px; 
  45. color:#999; 
  46. line-height:14px; 
  47. margin:30px 10px 0 0; 
  48. .wrap{ 
  49. width:1000px; 
  50. margin:80px auto; 
  51. .play_wrap{ 
  52. width:300px; 
  53. float:left; 
  54. padding:20px; 
  55. margin-left:200px; 
  56. #play_area{ 
  57. position:relative; 
  58. width:300px; 
  59. height:300px; 
  60. margin:auto; 
  61. background:#fefefe; 
  62. border-radius:2px; 
  63. color: black; 
  64. box-shadow: 0px 0px 8px #09F; 
  65. border:1px solid #fff; 
  66. *border:1px solid #e5e5e5; 
  67. cursor:default
  68. #play_area .play_cell{ 
  69. width:48px; 
  70. height:48px; 
  71. border:1px solid #fff; 
  72. border-radius:4px; 
  73. position:absolute; 
  74. background-position: 5px 5px; 
  75. cursor: default
  76. z-index:80; 
  77. box-shadow:0px 0px 8px #fff; 
  78. transition-property:background-position; 
  79. transition-duration:300ms; 
  80. transition-timing-function:ease-in-out; 
  81. #play_area .play_cell.hover{ 
  82. filter: alpha(opacity=80); 
  83. opacity:.8; 
  84. box-shadow: 0px 0px 8px #000; 
  85. z-index:90; 
  86. *border:1px solid #09F; 
  87. .play_menu{ 
  88. float:left; 
  89. margin-left:60px; 
  90. font-size:14px; 
  91. padding-top:20px; 
  92. .play_menu p{ 
  93. line-height:200%; 
  94. clear:both; 
  95. .play_menu a.play_btn{ 
  96. display:block; 
  97. margin-bottom:20px; 
  98. width:80px; 
  99. height:28px; 
  100. line-height:28px; 
  101. text-align:center; 
  102. text-decoration:none; 
  103. color:#333; 
  104. background:#fefefe; 
  105. border:1px solid #eee; 
  106. border-radius: 2px; 
  107. box-shadow: 1px 1px 2px #eee; 
  108. border-color: #ddd #d2d2d2 #d2d2d2 #ddd; 
  109. outline:none; 
  110. -moz-outline:none; 
  111. .play_menu a.play_btn:hover{ 
  112. background-color: #fcfcfc; 
  113. border-color: #ccc; 
  114. box-shadow: inset 0 -2px 6px #eee; 
  115. .play_menu a#play_btn_level{ 
  116. position:relative; 
  117. margin-bottom:30px; 
  118. .level_text{ 
  119. margin-left:-10px; 
  120. .level_icon{ 
  121. display:block; 
  122. position:absolute; 
  123. top:12px; 
  124. right:16px; 
  125. width:0; 
  126. height:0; 
  127. overflow:hidden; 
  128. border:5px solid #FFF; 
  129. border-color:#999 transparent transparent transparent; 
  130. .level_menu{ 
  131. position:absolute; 
  132. margin:-30px 0 0px 1px; 
  133. display:none; 
  134. .level_menu ul{ 
  135. list-style:none; 
  136. .level_menu li{ 
  137. float:left; 
  138. .level_menu li a{ 
  139. display:block; 
  140. padding:3px 10px; 
  141. border:1px solid #e8e8e8; 
  142. margin-left:-1px; 
  143. color:#09c; 
  144. .level_menu li a:hover{ 
  145. background:#09c; 
  146. color:#fefefe; 
  147. #info{ 
  148. font-size:16px; 
  149. margin:30px 0 0 0; 
  150. #info a{ 
  151. color:#09F; 
  152. </style> 
  153. <script type="text/javascript" src="js/jquery.min.js"></script> 
  154. <script type="text/javascript"
  155. var puzzleGame = function(options){ 
  156. this.img = options.img || ""
  157. this.e_playArea = $("#play_area"); 
  158. this.e_startBtn = $("#play_btn_start"); 
  159. this.e_playScore = $("#play_score"); 
  160. this.e_playCount = $("#play_count"); 
  161. this.e_levelBtn = $("#play_btn_level"); 
  162. this.e_levelMenu = $("#play_menu_level"); 
  163. this.areaWidth = parseInt(this.e_playArea.css("width")); 
  164. this.areaHeight = parseInt(this.e_playArea.css("height")); 
  165. this.offX = this.e_playArea.offset().left; 
  166. this.offY = this.e_playArea.offset().top; 
  167. this.levelArr = [[3,3],[4,4],[6,6]]; 
  168. this.level = 1; 
  169. this.scoreArr = [100,200,400]; 
  170. this.score = 0; 
  171. this.playCount = 0; 
  172. this.cellRow = this.levelArr[this.level][0]; 
  173. this.cellCol = this.levelArr[this.level][1]; 
  174. this.cellWidth = this.areaWidth/this.cellCol; 
  175. this.cellHeight = this.areaHeight/this.cellRow; 
  176. this.imgArr = []; 
  177. this.ranArr = []; 
  178. this.cellArr = []; 
  179. this.easing = 'swing'
  180. this.time = 400; 
  181. this.thisLeft = 0; 
  182. this.thisTop = 0; 
  183. this.nextIndex; 
  184. this.thisIndex; 
  185. this.cb_cellDown = $.Callbacks(); 
  186. this.isInit = false
  187. this.isBind = false
  188. this.start(); 
  189. }; 
  190. puzzleGame.prototype = { 
  191. start:function(){ 
  192. this.init(); 
  193. this.menu(); 
  194. }, 
  195. set: function(options){ 
  196. this.level = options.level === 0 ? 0 : (options.level || 1); 
  197. }, 
  198. menu:function(){ 
  199. var self = this
  200. this.e_startBtn.click(function(){ 
  201. self.e_levelMenu.hide(); 
  202. self.play(); 
  203. }); 
  204. this.e_levelBtn.click(function(){ 
  205. if(self.playing) return
  206. self.e_levelMenu.toggle(); 
  207. }); 
  208. this.e_levelMenu.find("a").click(function(){ 
  209. self.e_levelMenu.hide(); 
  210. self.e_levelBtn.find(".level_text").html($(this).html()) 
  211. if(parseInt($(this).attr("level")) !== self.level){ 
  212. self.set({ 
  213. "level": $(this).attr("level"
  214. }); 
  215. self.isInit = true
  216. self.isBind = false
  217. }) 
  218. }, 
  219. play:function(){ 
  220. if(this.isInit){ 
  221. this.isInit = false
  222. this.cellRow = this.levelArr[this.level][0]; 
  223. this.cellCol = this.levelArr[this.level][1]; 
  224. this.cellWidth = this.areaWidth/this.cellCol; 
  225. this.cellHeight = this.areaHeight/this.cellRow; 
  226. this.init(); 
  227. this.e_playCount.html(this.playCount = 0); 
  228. this.randomImg(); 
  229. if(!this.isBind)this.bindCell(); 
  230. }, 
  231. init:function(){ 
  232. var _cell; 
  233. this.cellArr = []; 
  234. this.imgArr = []; 
  235. this.e_playArea.html(""); 
  236. for(var i = 0; i<this.cellRow; i++){ 
  237. for(var j = 0; j<this.cellCol; j++){ 
  238. this.imgArr.push(i*this.cellCol + j); 
  239. _cell = document.createElement("div"); 
  240. _cell.className = "play_cell"
  241. $(_cell).css({ 
  242. "width"this.cellWidth-2, 
  243. "height"this.cellHeight-2, 
  244. "left": j * this.cellWidth, 
  245. "top": i * this.cellHeight, 
  246. "background""url(" + this.img + ")"
  247. "backgroundPosition": (-j) * this.cellWidth + "px " + (-i) * this.cellHeight + "px" 
  248. }); 
  249. this.cellArr.push($(_cell)); 
  250. this.e_playArea.append(_cell); 
  251. }, 
  252. randomImg:function(){ 
  253. var ran,arr; 
  254. arr = this.imgArr.slice(); 
  255. this.ranArr = []; 
  256. for(var i = 0, ilen = arr.length; i < ilen; i++){ 
  257. ran = Math.floor(Math.random() * arr.length); 
  258. this.ranArr.push(arr[ran]); 
  259. this.cellArr[i].css({ 
  260. "backgroundPosition": (-arr[ran]%this.cellCol) * this.cellWidth + "px " + (-Math.floor(arr[ran]/this.cellCol)) * this.cellHeight + "px" 
  261. }) 
  262. arr.splice(ran,1); 
  263. $("#p").html(this.ranArr.join()) 
  264. }, 
  265. bindCell:function(){ 
  266. var self = this
  267. this.isBind = true
  268. this.cb_cellDown.add(self.cellDown); 
  269. for(var i = 0, len = this.cellArr.length; i<len; i++){ 
  270. this.cellArr[i].on({ 
  271. "mouseover"function(){ 
  272. $(this).addClass("hover"); 
  273. }, 
  274. "mouseout"function(){ 
  275. $(this).removeClass("hover"); 
  276. }, 
  277. "mousedown"function(e){ 
  278. self.cb_cellDown.fire(e, $(this), self); 
  279. return false
  280. }); 
  281. }, 
  282. cellDown:function(e,_cell,self){ 
  283. var //self = this, 
  284. _x = e.pageX - _cell.offset().left, 
  285. _y = e.pageY - _cell.offset().top; 
  286. self.thisLeft = _cell.css("left"); 
  287. self.thisTop = _cell.css("top"); 
  288. self.thisIndex = Math.floor(parseInt(self.thisTop)/self.cellHeight)*self.cellCol; 
  289. self.thisIndex += Math.floor(parseInt(self.thisLeft)/self.cellWidth); 
  290. _cell.css("zIndex",99); 
  291. $(document).on({ 
  292. "mousemove"function(e){ 
  293. _cell.css({ 
  294. "left": e.pageX - self.offX - _x, 
  295. "top": e.pageY - self.offY - _y 
  296. }) 
  297. }, 
  298. "mouseup"function(e){ 
  299. $(document).off("mouseup"); 
  300. $(document).off("mousemove"); 
  301. self.cb_cellDown.empty(); 
  302. if( e.pageX - self.offX < 0 || e.pageX - self.offX > self.areaWidth || e.pageY - self.offY < 0 || e.pageY - self.offY > self.areaHeight ){ 
  303. self.returnCell(); 
  304. return
  305. var _tx, _ty, _ti, _tj; 
  306. _tx = e.pageX - self.offX; 
  307. _ty = e.pageY - self.offY; 
  308. _ti = Math.floor( _ty / self.cellHeight ); 
  309. _tj = Math.floor( _tx / self.cellWidth ); 
  310. self.nextIndex = _ti*self.cellCol + _tj; 
  311. if(self.nextIndex == self.thisIndex){ 
  312. self.returnCell(); 
  313. }else
  314. self.changeCell(); 
  315. }) 
  316. }, 
  317. changeCell:function(){ 
  318. var self = this
  319. _tc = this.cellArr[this.thisIndex], 
  320. _tl = this.thisLeft, 
  321. _tt = this.thisTop, 
  322. _nc = this.cellArr[this.nextIndex], 
  323. _nl = (this.nextIndex % this.cellCol) * this.cellWidth, 
  324. _nt = Math.floor(this.nextIndex / this.cellCol) * this.cellHeight; 
  325. _nc.css("zIndex",98); 
  326. this.cellArr[this.nextIndex] = _tc; 
  327. this.cellArr[this.thisIndex] = _nc; 
  328. this.ranArr[this.nextIndex] = this.ranArr[this.nextIndex] + this.ranArr[this.thisIndex]; 
  329. this.ranArr[this.thisIndex] = this.ranArr[this.nextIndex] - this.ranArr[this.thisIndex]; 
  330. this.ranArr[this.nextIndex] = this.ranArr[this.nextIndex] - this.ranArr[this.thisIndex]; 
  331. _tc.animate({ 
  332. "left": _nl, 
  333. "top": _nt 
  334. },self.time,self.easing,function(){ 
  335. _tc.removeClass("hover"); 
  336. _tc.css("zIndex",""); 
  337. }) 
  338. _nc.animate({ 
  339. "left": _tl, 
  340. "top": _tt 
  341. },self.time,self.easing,function(){ 
  342. _nc.removeClass("hover"); 
  343. _nc.css("zIndex",""); 
  344. self.check(); 
  345. if(!self.cb_cellDown.has(self.cellDown)) self.cb_cellDown.add(self.cellDown); 
  346. }) 
  347. }, 
  348. returnCell:function(){ 
  349. var self = this
  350. this.cellArr[this.thisIndex].animate({ 
  351. "left": self.thisLeft, 
  352. "top": self.thisTop 
  353. },self.time,self.easing,function(){ 
  354. $(this).removeClass("hover"); 
  355. $(this).css("zIndex",""); 
  356. if(!self.cb_cellDown.has(self.cellDown)) self.cb_cellDown.add(self.cellDown); 
  357. }); 
  358. }, 
  359. check:function(){ 
  360. this.e_playCount.html( ++ this.playCount); 
  361. if(this.ranArr.join() == this.imgArr.join()){ 
  362. this.success(); 
  363. }, 
  364. success:function(){ 
  365. alert("ok"); 
  366. this.score += this.scoreArr[this.level] 
  367. this.e_playScore.html(this.score); 
  368. $(document).ready(function(e) { 
  369. var pg = new puzzleGame({ 
  370. img: "images/120908-1347075337_M.jpg" 
  371. }); 
  372. }); 
  373. </script> 
  374. </head> 
  375. <body> 
  376. <div class="wrap"
  377. <div class="play_wrap"
  378. <div id="play_area"></div> 
  379. </div> 
  380. <div class="play_menu"
  381. <a id="play_btn_start" class="play_btn" href="javascript:void(0);" unselectable="on">开始</a> 
  382. <a id="play_btn_level" class="play_btn" href="javascript:void(0);" unselectable="on"
  383. <span class="level_text">4 x 4</span> 
  384. <span class="level_icon"></span> 
  385. </a> 
  386. <div class="level_menu" id="play_menu_level"
  387. <ul> 
  388. <li> 
  389. <a href="javascript:void(0);" level=0 >3 x 3</a> 
  390. </li> 
  391. <li> 
  392. <a href="javascript:void(0);" level=1 >4 x 4</a> 
  393. </li> 
  394. <li> 
  395. <a href="javascript:void(0);" level=2 >6 x 6</a> 
  396. </li> 
  397. </ul> 
  398. </div> 
  399. <p>完成:<span id="play_score">0</span></p> 
  400. <p>交换:<span id="play_count">0</span></p> 
  401. <p>说明:<br> 
  402. -点击开始,小图片将随机打乱;<br> 
  403. -拖动小图片可交换位置,顺序完全正确则为成功;<br> 
  404. -难度分“3x3”、“4x4”、“6x6”三级;<br> 
  405. -对应的分值为100、200、400; 
  406. </p> 
  407. </div> 
  408. </div> 
  409. </body> 
  410. </html> 

希望本文所述对大家的jQuery程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选