mysql拼图游戏代码,今天中午空闲之余写了个拖动拼图!感觉还不错!(拼图游戏)

开始游戏 重新游戏

// 被拖拽的元素

let tds = document.querySelectorAll('td');

// 被拖拽的元素所放的容器

let tr1 = document.querySelector('#tr1');

let tr2 = document.querySelector('#tr2');

let tr3 = document.querySelector('#tr3');

// 开始游戏和重新游戏按钮

let btnStart = document.querySelector('#btnStart');

let btnReset = document.querySelector('#btnReset');

// 拖拽元素放到容器时,让容器能接收

tr1.ondragover = tr2.ondragover = tr3.ondragover = function (ev) {

ev.preventDefault();

}

tr1.ondrop = tr2.ondrop = tr3.ondrop = function (ev) {

ev.preventDefault();

// 获取拖动元素的类名,目的通过类名得到拖动的元素。

let className = ev.dataTransfer.getData("class");

// 获取到拖动的元素

let dragImg = document.getElementsByClassName(className)[0];

// 获取到拖动元素下一个元素。 作一个参照物。

let dragImgNextElement = dragImg.nextElementSibling;

// 获取到拖动元素所在的父元素。 tr

let dragImgParent = dragImg.parentElement;

// 获取到目标元素的父元素 tr

let targetParent = ev.target.parentElement;

// dragImgParent.id === targetParent.id 判断是否是同一行元素之间进行拖动

// dragImgNextElement判断拖动的是否是最后一列的图片

// dragImgNextElement.className === ev.target.className判断拖动元素和目标元素是否是同一行紧临的两个元素。

if (dragImgParent.id === targetParent.id && dragImgNextElement && dragImgNextElement.className === ev.target.className) {

// 把目标元素插入到拖动元素之前。

this.insertBefore(ev.target, dragImg);

} else { // 拖动元素是第三列是没有下一个元素

// 把拖动元素插入到目标元素之前。

this.insertBefore(dragImg, ev.target);

}

// 把目标元素插入到拖动元素的下一个元素之前。

dragImgParent.insertBefore(ev.target, dragImgNextElement);

// 判断是否成功。

if (success()) {

alert("你完成了游戏");

}

}

// 定义一个数组,用来存储td所需要的类名。这些类名用来控制背景图。

let arrImg = ['img0', 'img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8'];

function randomImg() {

// 把arrImg打乱。

arrImg.sort(function () {

return Math.random() > 0.5 ? -1 : 1;

})

for (let i = 0; i < tds.length; i++) {

const td = tds[i];

// 先把td原来的类名去除

td.removeAttribute('class');

// td.className = "";

// td.classList.remove(`img${i}`)

// 再添加随机的类名,这样就可以把“图片”打乱。

td.setAttribute('class', arrImg[i]);

// 给td绑定拖动事件。

td.ondragstart = function (ev) {

// 把拖拽之前的类名先保存,目的后面使用。

ev.dataTransfer.setData('class', ev.target.className)

}

}

}

// 第一次渲染时,先执行一次,随机给td添加相应的类名,如:img0...img8

randomImg();

btnStart.addEventListener('click', function () {

randomImg();

})

btnReset.addEventListener('click', function () {

randomImg();

})

function success() {

let result = false;

// 原来的类名顺序

let oldArr = ['img0', 'img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8'];

// 取出所有的td的class属性值,组成一个新数组。

let tds = document.querySelectorAll('td');

let newArr = Array.from(tds).map(function (td) {

return td.className;

})

// 判断两个数组值是否相等。如果值相等表示拼图成功。

result = equal(newArr, oldArr);

return result;

}

function equal(arr1, arr2) {

for (let i = 0; i < arr1.length; i++) {

if (arr1[i] !== arr2[i]) {

return false;

}

}

return true;

}

//CSS样式!(不要把事情想的很复杂 其实很简单!) *{ margin: 0; padding: 0; box-sizing: border-box; }

.box{

width: 550px;

margin: 0 auto;

}

.box table{

width: 540px;

margin: 0 auto;

}

.box table td{

width: 168px;

height: 168px;

background-image: url(…/img/all.jpg);

background-repeat: no-repeat;

}

.box table td.img0{

background-position: 0 0;

}

.box table td.img1{

background-position: -168px 0;

}

.box table td.img2{

background-position: -336px 0;

}

.box table td.img3{

background-position: 0 -168px;

}

.box table td.img4{

background-position: -168px -168px;

}

.box table td.img5{

background-position: -336px -168px;

}

.box table td.img6{

background-position: 0 -336px;

}

.box table td.img7{

background-position: -168px -336px;

}

.box table td.img8{

background-position: -336px -336px;

}

原文链接:https://blog.csdn.net/weixin_55973231/article/details/114678592

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值