本文实例讲述了原生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制作的拼图游戏实现方法详解相关推荐

  1. javascript写css样式,原生javascript实现读写CSS样式的方法详解

    原生javascript实现读写CSS样式的方法详解 发布于 2017-05-24 15:05:31 | 120 次阅读 | 评论: 0 | 来源: 网友投递 JavaScript客户端脚本语言Jav ...

  2. 3种Javascript图片预加载的方法详解

    3种Javascript图片预加载的方法详解 预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度. 这对图片画廊及图片占据很大比例 ...

  3. java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解

    [Java教程]JavaScript函数的4种调用方法详解 0 2016-08-09 00:00:12 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C# ...

  4. 【Unity3D游戏开发】NGUI制作字体的三种方法 (二一)

    NGUI制作字体的三种方法 主要参考两篇博文: (1).NGUI制作字体的三种方法 (2).使用位图字体工具BMFont从图片生成自定义字体 1.BMFont下载地址 http://www.angel ...

  5. 钉钉接入access_无需开发,IT事件接入钉钉的方法详解

    1.市场在拥抱钉钉 最近一篇名为<为什么有很多企业沉迷钉钉无法自拔>的文章很火,文章不短,其中有一部分阐述了:钉钉抓住以人为核心的"智能协同"差异化路线,帮助企业打破过 ...

  6. 钉钉开发者接口文档_无需开发,IT事件接入钉钉的方法详解

    1.市场在拥抱钉钉 最近一篇名为<为什么又很多企业沉迷钉钉无法自拔>的文章很火,文章不短,其中有一部分阐述了:钉钉抓住以人为核心的"智能协同"差异化路线,帮助企业打破过 ...

  7. JavaScript之DOM常用属性及方法详解

    一.什么是DOM? DOM:文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口. W3C 已经定义了 ...

  8. javascript中match方法和exec()方法详解与深度区别(非原创)

    match和exec的比较 1.match match方法属于String正则表达方法.  语法: str.match(regexp或者string) str:要进行匹配的字符串. regexp:一个 ...

  9. Android开发之保存图片到相册的三种方法详解

    有三种方法如下:三个方法都需要动态申请读写权限否则保存图片到相册也会失败 方法一: /**      * 保存bitmap到本地      *      * @param bitmap Bitmap ...

最新文章

  1. python相同key合并value_python之入门
  2. ES6入门之Symbol
  3. [LeetCode] 35. Search Insert Position
  4. linux的常用操作——共享库
  5. openssl windows安装
  6. mysql被除数为0不报错_MySQL:关系除法
  7. 浓郁东方民俗剪纸风新年春节海报,psd分层模板
  8. Windows编程中各种操作文件的方法
  9. sql server 2005学习笔记之触发器简介(一)
  10. Linux上安装Oracle 10g 装后感
  11. 美国出台最严技术出口管制!14项前沿科技面临封锁
  12. 从维密天使到编程大拿,她的彪悍人生不需要解释!
  13. Spring Cloud Alibaba#01.开篇立题
  14. 奇迹服务器如何修改爆率,奇迹萌新教程系列-奇迹装备是否掉落配置调整
  15. 乐学Python作业题
  16. [2018.11.05 T1] 喝牛奶
  17. oracle获取字符串最后一个逗号后面的字符
  18. Font-AweSome在Vue中的使用
  19. [资源]--100张极简约的电脑桌面壁纸总有一张你喜欢
  20. 中国打桩设备行业运行态势与投资前景预测报告(新版)2022-2027

热门文章

  1. 基于asp.net土特产交易系统
  2. dns被劫持怎么办?dns被劫持如何解决?DNS被劫持有那些症状
  3. 【牛客挑战赛46】F.柠檬树
  4. 激活facetime和imessage国际短信00447537410217不扣费?
  5. 【python 新浪微博爬虫】python 爬取新浪微博24小时热门话题top500
  6. 【数据结构】Java实现常用数据结构
  7. 鸿蒙注册安装保姆级教程,HarmonyOS 安装
  8. 中国佛学66句震撼世界的禅语
  9. 日语开发常用词汇积累
  10. python 自动点赞_python实现自动点赞