php拼图游戏开发,原生javascript制作的拼图游戏实现方法详解
本文实例讲述了原生javascript制作的拼图游戏实现方法。分享给大家供大家参考,具体如下:
实现方法
//1、让所有的li(在ul里)可以拖拽
//2、交换li的位置 计算背景图位置
//1、让所有的li(在ul里)可以拖拽
//根据鼠标的位置,计算目标li的序号
//根据行号和列号计算下标
//行号*3+列号
//2、归位
此处没有背景图 请自行添加 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;
}
这个是这连个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部分
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[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(sourceIndexlis.length-1 || targetIndexlis.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";
}
PS:这里给大家推荐一款相似的在线工具供大家参考:
希望本文所述对大家JavaScript程序设计有所帮助。
php拼图游戏开发,原生javascript制作的拼图游戏实现方法详解相关推荐
- javascript写css样式,原生javascript实现读写CSS样式的方法详解
原生javascript实现读写CSS样式的方法详解 发布于 2017-05-24 15:05:31 | 120 次阅读 | 评论: 0 | 来源: 网友投递 JavaScript客户端脚本语言Jav ...
- 3种Javascript图片预加载的方法详解
3种Javascript图片预加载的方法详解 预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度. 这对图片画廊及图片占据很大比例 ...
- java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解
[Java教程]JavaScript函数的4种调用方法详解 0 2016-08-09 00:00:12 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C# ...
- 【Unity3D游戏开发】NGUI制作字体的三种方法 (二一)
NGUI制作字体的三种方法 主要参考两篇博文: (1).NGUI制作字体的三种方法 (2).使用位图字体工具BMFont从图片生成自定义字体 1.BMFont下载地址 http://www.angel ...
- 钉钉接入access_无需开发,IT事件接入钉钉的方法详解
1.市场在拥抱钉钉 最近一篇名为<为什么有很多企业沉迷钉钉无法自拔>的文章很火,文章不短,其中有一部分阐述了:钉钉抓住以人为核心的"智能协同"差异化路线,帮助企业打破过 ...
- 钉钉开发者接口文档_无需开发,IT事件接入钉钉的方法详解
1.市场在拥抱钉钉 最近一篇名为<为什么又很多企业沉迷钉钉无法自拔>的文章很火,文章不短,其中有一部分阐述了:钉钉抓住以人为核心的"智能协同"差异化路线,帮助企业打破过 ...
- JavaScript之DOM常用属性及方法详解
一.什么是DOM? DOM:文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口. W3C 已经定义了 ...
- javascript中match方法和exec()方法详解与深度区别(非原创)
match和exec的比较 1.match match方法属于String正则表达方法. 语法: str.match(regexp或者string) str:要进行匹配的字符串. regexp:一个 ...
- Android开发之保存图片到相册的三种方法详解
有三种方法如下:三个方法都需要动态申请读写权限否则保存图片到相册也会失败 方法一: /** * 保存bitmap到本地 * * @param bitmap Bitmap ...
最新文章
- python相同key合并value_python之入门
- ES6入门之Symbol
- [LeetCode] 35. Search Insert Position
- linux的常用操作——共享库
- openssl windows安装
- mysql被除数为0不报错_MySQL:关系除法
- 浓郁东方民俗剪纸风新年春节海报,psd分层模板
- Windows编程中各种操作文件的方法
- sql server 2005学习笔记之触发器简介(一)
- Linux上安装Oracle 10g 装后感
- 美国出台最严技术出口管制!14项前沿科技面临封锁
- 从维密天使到编程大拿,她的彪悍人生不需要解释!
- Spring Cloud Alibaba#01.开篇立题
- 奇迹服务器如何修改爆率,奇迹萌新教程系列-奇迹装备是否掉落配置调整
- 乐学Python作业题
- [2018.11.05 T1] 喝牛奶
- oracle获取字符串最后一个逗号后面的字符
- Font-AweSome在Vue中的使用
- [资源]--100张极简约的电脑桌面壁纸总有一张你喜欢
- 中国打桩设备行业运行态势与投资前景预测报告(新版)2022-2027