使用javascript、jquery制作简单拼图
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>拼图</title>
<script src="jquery-3.4.1.js"></script>
<link rel="stylesheet" href="pinTo.css" />
<script>
var level = 2;
speller = {
img: function (imgindex) {
return "url('" + imgindex + ".jpg') no-repeat";
},
init: function () {
var imgindex = Math.ceil(Math.random(1) * 4);
level = Number(level) + 1;
if(level < 3){
level = 3;
}
if (level > 11) {
alert("你输入的级别已经高于最高级,默认为1级");
level = 3;
}
else if (level <= 1) {
alert("你输入的级别已经低于最低级,默认为1级");
level = 3;
}
else if (typeof (level) != "number" || isNaN(level)) {
alert("你输入的级别不正确,默认为1级");
level = 3;
}
var content = $("#content");
console.log(speller.img());
$(".content").css({
"background": speller.img(imgindex),
"float": "left",
});
$("#content").empty();
var divCount = level * level;
var p = 0;
var left = 0;
var top = 0;
var pkW = 0;
var pkH = 0;
var blockH = parseInt(content.height() / level);
var blockW = parseInt(content.width() / level);
for (let i = 0; i < level; i++) {
for (let j = 0; j < level; j++) {
$("#content").append("<div class=" + p + " id='" + p
+ "'></div>");
$(" #content>div#"+p).css({
"background": speller.img(imgindex),
"top": top + "px",
"left": left + "px",
"background-position": "-" + pkW + "px -" + pkH + "px",
"width": blockW + "px",
"height": blockH + "px",
"float": "left",
});
p++;
left = left + blockW;
pkW = pkW + blockW;
}
left = 0;
top = top + blockH;
pkW = 0;
pkH = pkH + blockH;
}
this.boxs = $("#content>div");
this.blank = this.boxs.length - 1;
this.hardNum = divCount;
this.levelq = level;
onclickgo();
this.rndBox();
},
rndBox: function () {
var count = 0;
var html = [], sum = 0;
for (let i = 0; i < this.boxs.length; i++) {
html.push(parseInt(this.boxs[i].className));
}
while (count < html.length-2) {
var d = parseInt(Math.random() * html.length);
if (html.length < 2) {
break;
}
var h1 = html[d];
html.splice(d, 1);
var d = parseInt(Math.random() * html.length);
var h2 = html[d];
html.splice(d, 1);
this.swapTwo(this.getByClass(h1), this.getByClass(h2));
count++;
}
this.divList = $("#content>div:last").css("display", "none");
},
move: function (currBox) {
var content = $("#content");
var blockH = parseInt(content.height() / this.levelq);
var blockW = parseInt(content.width() / this.levelq);
var divList = this.divList[0];
var listTop = parseInt(divList.style.top);
var listLeft = parseInt(divList.style.left);
var thisTop = parseInt(currBox.style.top);
var thisLeft = parseInt(currBox.style.left);
if (Math.abs(listTop - thisTop) == blockH && listLeft == thisLeft ||
Math.abs(listLeft - thisLeft) == blockW && listTop == thisTop) {
this.swapTwo(currBox, divList);
}
if (this.check()) {
this.getByClass(this.blank).style.display = "block";
alert("哇,你真棒!");
}
},
getByClass: function (cls) {
for (var i = 0; i < this.boxs.length; i++) {
if (parseInt(this.boxs[i].className) == cls) return this.boxs[i];
}
return null;
},
check: function () {
for (var i = 0; i < this.boxs.length; i++) {
if (this.boxs[i].className != this.boxs[i].id) return false;
}
return true;
},
swapTwo: function (boxA, boxB) {
var left = boxA.style.left;
var top = boxA.style.top;
var cls = boxA.className;
boxA.style.top = boxB.style.top;
boxA.style.left = boxB.style.left;
boxA.className = boxB.className;
boxB.style.top = top;
boxB.style.left = left;
boxB.className = cls;
},
};
$(window).ready(function () {
level = Number(prompt("请选择级别(1~10),默认1级", ""));
speller.init();
afterDiv();
$(".alterLevel").click(function () {
level = $("#putLevel").val();
$("#putLevel").val("");
speller.init();
});
})
function onclickgo() {
$("#content>div").click(function () {
speller.move(this);
});
};
function afterDiv() {
$("#hard").append(
"<div>"
+ "<button class='flush' οnclick='javascript:speller.rndBox();'>重新加载</button>"
+ "</div>"
+ "<div>"
+ "<input id='putLevel' type='text' style='height:30px;line-height:100%' placeholder='输入拼图等级(1~10)' value='' />"
+ "<button class='alterLevel' >确定</button>"
+ "</div>")
};
</script>
</head>
<body>
<div id="pinTo">
<div id="move">
<div class="show">
<div class="content borderMargin"></div>
<div id="content" class="borderMargin"></div>
</div>
<div id="hard"></div>
</div>
</div>
</body>
</html>