本文实例讲述了原生javascript制作的拼图游戏实现方法。分享给大家供大家参考,具体如下:
实现方法
//1、让所有的li(在ul里)可以拖拽
//2、交换li的位置 计算背景图位置
//1、让所有的li(在ul里)可以拖拽
//根据鼠标的位置,计算目标li的序号//根据行号和列号计算下标
//行号*3+列号
//2、归位
此处没有背景图 请自行添加 css样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> html,body{ margin:0; padding:0; } #box{ list-style:none; position:relative; width:600px; height:600px; box-sizing:border-box; margin:10px auto; } li{ position:absolute; width:200px; height:200px; border:1px solid white; background-image:url(img/b1.jpg); background-size:600px 600px; } #box li:nth-child(1){ left:0px; top:0px; background-position:0px 0px; } #box li:nth-child(2){ left:200px; top:0px; background-position:-200px 0px; } #box li:nth-child(3){ left:400px; top:0px; background-position:-400px 0px; } #box li:nth-child(4){ left:0px; top:200px; background-position:0px -200px; } #box li:nth-child(5){ left:200px; top:200px; background-position:-200px -200px; } #box li:nth-child(6){ left:400px; top:200px; background-position:-400px -200px; } #box li:nth-child(7){ left:0px; top:400px; background-position:0px -400px; } #box li:nth-child(8){ left:200px; top:400px; background-position:-200px -400px; } #box li:nth-child(9){ left:400px; top:400px; background-position:-400px -400px; } </style> </head> <body> <ul id="box"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> </body> </html>
<script type="text/javascript" src="js/cssTools.js"></script> <script type="text/javascript" src="js/eventTools.js"></script>
这个是这连个js连接的代码
//csstools //功能:获取某个DOM元素的样式属性的兼容性写法 //参数:dom元素,样式属性名 //返回值:样式属性的值 function getStyle(domObj,attr){ if(domObj.currentStyle){//domObj.currentStyle如果能够正确获取到,那就真 return domObj.currentStyle[attr];//当对象的属性名是变量时,用方括号而不是点。 }else{ return window.getComputedStyle(domObj)[attr]; } }
//eventTools //功能:阻止浏览器默认行为的封装 //参数:事件对象 //返回值:无 function preventDefault1809(evt) { if(evt.returnValue){ evt.returnValue = false; }else{ evt.preventDefault(); } } //功能:绑定事件 //参数: //事件源 //事件类型名,不带on //事件处理函数, //是否冒泡 //返回值:无 function addEvent1809(domObj,eventType,func,isBubble){ if(domObj.addEventListener){ domObj.addEventListener(eventType,func,isBubble); }else if(domObj.attachEvent){ domObj.attachEvent('on'+eventType,func); }else{ domObj['on'+eventType] = func; } } //当对象的属性是变量时,不能用点,只能用方括号 /* var obj = { id:'007' } obj.id; var temp = "id"; obj[temp] */
js部分
<script type="text/javascript"> function $(id){ return document.getElementById(id); } window.onload = function(){ drag(); } //1、让所有的li(在ul里)可以拖拽 function drag(){ var lis = $("box").children; var currIndex = -1;//记录被按下的那个li var targetIndex = -1; for(var i=0;i<lis.length;i++){ lis[i].setAttribute("index",i); lis[i].onmousedown = function(event){ currIndex = this.getAttribute("index"); var evt = event || window.event; var offsetX = evt.offsetX; var offsetY = evt.offsetY; this.style.zIndex = 1; var liDom = this; $("box").onmousemove = function(event){ var evt = event || window.event; //1、数据距离大盒子左上角的距离 var mouseX = evt.pageX-$("box").offsetLeft; var mouseY = evt.pageY-$("box").offsetTop; //鼠标距离页面左边的距离- 大盒子距离页面左边的距离-鼠标距离事件源的左边距离 var left1 = mouseX-offsetX; var top1 = mouseY-offsetY; //li不能拖拽到界外(大盒子外面) if(left1<0 || left1>600-200 || top1<0 || top1>600-200 ){ return; } liDom.style.left = left1+"px"; liDom.style.top = top1+"px"; targetIndex = getTargetIndex(mouseX,mouseY); console.log(targetIndex); } } document.body.onmouseup = function(){ $("box").onmousemove = null; if(currIndex>-1){ lis[currIndex].style.zIndex = 0; exchangeLi(currIndex,targetIndex); } } } } //根据鼠标的位置,计算目标li的序号 function getTargetIndex(x,y){ //计算行号 var rowIndex = parseInt(y/200);// //计算列号 var colIndex = parseInt(x/200);// //根据行号和列号计算下标 //行号*3+列号 return rowIndex*3+colIndex; } function exchangeLi(sourceIndex,targetIndex){ // var lis = $("box").children; // if(sourceIndex<-1 || sourceIndex>lis.length-1 || targetIndex<-1 || targetIndex>lis.length-1){ // return; // } if(sourceIndex!=targetIndex){ var lis = $("box").children; //1、交换backgroundPosition var temp =getStyle(lis[sourceIndex],"backgroundPosition"); lis[sourceIndex].style.backgroundPosition = getStyle(lis[targetIndex],"backgroundPosition"); lis[targetIndex].style.backgroundPosition = temp; } //2、归位 rowIndex = parseInt(sourceIndex/3); colIndex = sourceIndex%3; lis[sourceIndex].style.left = colIndex*200+"px"; lis[sourceIndex].style.top = rowIndex*200+"px"; } </script>
PS:这里给大家推荐一款相似的在线工具供大家参考:
在线美女拼图游戏:
http://tools.jb51.net/games/pintu
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
本文向大家介绍javascript实现拼图游戏,包括了javascript实现拼图游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了javascript实现拼图游戏的具体代码,供大家参考,具体内容如下 CSS: JS: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Android实现美女拼图游戏详解,包括了Android实现美女拼图游戏详解的使用技巧和注意事项,需要的朋友参考一下 先来看看效果: 图片切分很多份,点击交换拼成一张完整的;这样关卡也很容易设计,3 3;4 4;5 5;6 6;一直下去 加了个切换动画,效果还是不错的,其实游戏就是自定义了一个控件,下面我们开始自定义之旅。 游戏的设计 首先我们分析下如何设计这款游戏: 1、我们需要一
本文向大家介绍JavaFx实现拼图游戏,包括了JavaFx实现拼图游戏的使用技巧和注意事项,需要的朋友参考一下 最近学习JavaFx,发现网上大概只有官方文档可以查阅,学习资料较少,写个拼图游戏供记录。。 大概说一下思路: 1.面板的构建:面板采用GridPane,方便3*3的图片布局。 2.每个小格子中的图片当然不是一张张手工切好的,利用imageview.setViewPort(Rectang
本文向大家介绍python实现拼图小游戏,包括了python实现拼图小游戏的使用技巧和注意事项,需要的朋友参考一下 Python小白一只,正在成长,程序自己设计,很多不足,算法很多地方能优化。欢迎大佬来指教。 游戏效果 创建设置类,储存游戏基础数据 可以不使用这个类,在程序中直接使用相应的数据。但是使用这个类更便于程序阅读和修改基础数据。 创建图片类,储存游戏需要的图片 这样可以在游戏的开始把游戏
本文向大家介绍Opencv实现拼图板游戏,包括了Opencv实现拼图板游戏的使用技巧和注意事项,需要的朋友参考一下 80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也可以算得上是最早的“手游”了吧…… 简单的就是经典的,现在的Windows 7小工具
本文向大家介绍原生javascript实现连连看游戏,包括了原生javascript实现连连看游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现连连看游戏的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。