首页前端开发JavaScriptjavascript做拼图

javascript做拼图

时间2023-11-29 18:06:02发布访客分类JavaScript浏览924
导读:JavaScript是一种广泛用于前端开发的编程语言,它拥有强大的交互性和动态性,因此被广泛用于网站和移动应用程序的开发中。其中,JavaScript做拼图游戏的效果也是非常出色的。一个简单的拼图布局示例如下:div#puzzleBoard...

JavaScript是一种广泛用于前端开发的编程语言,它拥有强大的交互性和动态性,因此被广泛用于网站和移动应用程序的开发中。其中,JavaScript做拼图游戏的效果也是非常出色的。


一个简单的拼图布局示例如下:

div#puzzleBoard {
    width: 300px;
    height: 300px;
    border: 1px solid #ccc;
    margin: 0 auto;
}
div.puzzlePiece {
    width: 96px;
    height: 96px;
    border: 1px solid #ccc;
    float: left;
    margin: -1px 0 0 -1px;
    background: url(images/puzzle.jpg);
    background-size: auto 300px;
    cursor: pointer;
}
div.puzzlePiece:hover {
    opacity: 0.5;
}
    

在这里,我们首先声明了一个拼图布局的容器div#puzzleBoard,并设置其宽和高为300像素,以及边框1像素。接着,我们为每个拼图块定义了一个div.puzzlePiece元素,设置其宽高为96像素,边框1像素,向左浮动,以及设置了一个背景图像。而当鼠标悬停在拼图块上时,设置其不透明度为0.5。最终,就可以实现一个简单的拼图布局效果。


其次,我们需要使用JavaScript来处理这些拼图块。代码如下:

var pieces = [].slice.call(document.querySelectorAll('.puzzlePiece'));
    var columns = 3, rows = 3;
    var puzzleBoard = document.getElementById('puzzleBoard');
    var onBoard, empty;
    var boardPos = puzzleBoard.getBoundingClientRect();
    var pieceWidth = pieces[0].offsetWidth;
    var pieceHeight = pieces[0].offsetHeight;
Array.prototype.shuffle = function () {
    var i = this.length, j, temp;
    while (--i >
 0) {
    j = Math.floor(Math.random() * (i));
    temp = this[j];
    this[j] = this[i];
    this[i] = temp;
}
    return this;
}
    ;
function place() {
pieces.forEach(function (elm) {
if (elm.previousSibling) {
    elm.style.top = (elm.previousSibling.offsetTop + pieceHeight) + 'px';
    elm.style.left = elm.previousSibling.style.left;
    elm.dataset.pos = (elm.previousSibling.dataset.pos - 0 + columns);
}
 else {
    elm.style.top = '0';
    elm.style.left = '0';
    elm.dataset.pos = '0';
    onBoard = elm;
}
    elm.dataset.initpos = elm.dataset.pos;
if (!isNaN(elm.dataset.imgx)) {
    elm.style.backgroundPosition = (-elm.dataset.imgx * pieceWidth) + 'px ' + (-elm.dataset.imgy * pieceHeight) + 'px';
}
}
    );
}
function start() {
    onBoard = empty = null;
pieces.forEach(function (elm) {
if (parseInt(elm.dataset.pos) === (columns * rows - 1)) {
    empty = elm;
}
    elm.className = 'puzzlePiece';
}
    );
    pieces.shuffle();
    place();
}
function move(elm, dir) {
    var pos = parseInt(elm.dataset.pos), next;
switch (dir) {
    case 'Up':if (pos >
= columns) {
    next = pos - columns;
}
    break;
    case 'Right':if ((pos + 1) % columns >
 0) {
    next = pos + 1;
}
    break;
case 'Down':if (pos  (columns * rows) - columns) {
    next = pos + columns;
}
    break;
    case 'Left':if (pos % columns >
 0) {
    next = pos - 1;
}
    break;
}
if (next === undefined) {
    return false;
}
var nextElm = pieces.filter(function (p) {
    return parseInt(p.dataset.pos) === next;
}
    )[0];
    swap(elm, nextElm);
if (check()) {
setTimeout(function () {
    alert("COMPLETE!");
}
    , 100);
}
}
function swap(prev, next) {
    var temp = next.dataset.pos;
    next.dataset.pos = prev.dataset.pos;
    prev.dataset.pos = temp;
    temp = next.style.top;
    next.style.top = prev.style.top;
    prev.style.top = temp;
    temp = next.style.left;
    next.style.left = prev.style.left;
    prev.style.left = temp;
if (empty === prev) {
    empty = next;
}
 else if (empty === next) {
    empty = prev;
}
}
function check() {
    var result = true;
pieces.forEach(function (elm, i) {
if (parseInt(elm.dataset.pos) !== i) {
    result = false;
}
}
    );
    return result;
}
    

在这里,我们首先声明了一些变量和方法,如拼图块的数量和分布状况(columns和rows),容器元素(puzzleBoard),以及当前和空拼图块(onBoard和empty)。然后,我们定义了一个数组方法shuffle,用于随机交换拼图块的顺序。


接着,我们声明了三个函数place、move和check。place函数用于根据元素的上一个元素确定每个拼图块的位置和数据集。move函数用于交换两个拼图块的位置。check函数用于检查拼图游戏是否已经完成。


最后,我们开启了一个start方法来初始化游戏。该方法首先将所有拼图块重置,并找出空拼图块。然后,将所有拼图块随机排序,然后将其放置在容器中。


通过上面的代码,我们可以实现一个简单的拼图游戏。但是,笔者强烈建议大家了解更多有关JavaScript的知识,以便更好地利用其强大的功能。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: javascript做拼图
本文地址: https://pptw.com/jishu/560769.html
javascript为什么要原型对象 javascript什么验证host通

游客 回复需填写必要信息