все.В настоящее время у меня есть проблема с загадкой из 15 слайдов, которую я пытаюсь сделать.Критерий состоит в том, что, когда я наводю курсор мыши на кусок в моей головоломке с слайдами, он должен установить границу на этом фрагменте как красный, а когда я убираю с нее мышь, граница должна снова стать черной.Проблема в том, что события mouseover и mouseout, похоже, работают только с последним элементом, прошедшим через цикл for, и у меня возникают проблемы при разработке решения.
Я пробовал много разных способов,включая написание EventListeners с другими комбинациями кода, но не получили успешного результата.Это на самом деле самое близкое, что я получил.
Вот конкретный код, о котором идет речь:
function movePiece(){
var elements = document.getElementById("puzzlearea").getElementsByTagName('div');
for(var i=0; i<elements.length; i++){
var item = elements.item(i);
elements[i].addEventListener('mouseover', function(e){
item.style.border = "5px solid red";
},false);
elements[i].addEventListener('mouseout', function(e){
console.log(item);
item.style.border = "5px solid black";
},false);
}
}
И HTML, который идет вместе с ним (я хотел бы отметить, что этоприсвоение класса, поэтому, к сожалению, изменение этого HTML не допускается):
<div id="puzzlearea">
<!-- the following are the actual fifteen puzzle pieces -->
<div>1</div> <div>2</div> <div>3</div> <div>4</div>
<div>5</div> <div>6</div> <div>7</div> <div>8</div>
<div>9</div> <div>10</div> <div>11</div> <div>12</div>
<div>13</div> <div>14</div> <div>15</div>
</div>
А вот код, который показывает, как я создаю головоломку, а затем перетасовываю ее после нажатия кнопки перемешивания:
window.onload = onPageLoad;
/*
* Loads the page with the initial puzzle, and operates all game logic.
*/
function onPageLoad() {
createPuzzle();
document.getElementById("shufflebutton").onclick = makeShuffle;
}
function playGame() {
movePiece();
}
/*
* Creates the initial puzzle. We go through each div in the puzzlearea
* and set the position of the tile, as well as the image. This puzzle is
* created in the correct, or completed, order.
*/
function createPuzzle() {
var puzzlePiece = document.getElementById("puzzlearea").getElementsByTagName('div');
for(let i = 0; i < puzzlePiece.length; i++) {
var item = puzzlePiece.item(i);
item.style.left = getLeftPosition(i);
item.style.top = getTopPosition(i);
item.style.backgroundPosition = getBackgroundPosition(i);
}
}
/*
* Shuffles the puzzle board. We go through each div in the puzzlearea
* and set the position of the tile, as well as the image, based on the
* shuffled order.
*/
function makeShuffle() {
var puzzlePiece = document.getElementById("puzzlearea").getElementsByTagName('div');
// Array of 0-14 in random order.
var order = shuffleBoard();
for(let i = 0; i < puzzlePiece.length; i++) {
var loc = order[i];
var item = puzzlePiece.item(i);
item.style.position = "absolute";
item.style.left = getLeftPosition(loc);
item.style.top = getTopPosition(loc);
item.style.backgroundPosition = getBackgroundPosition(i);
}
playGame();
}
И, при необходимости, немного соответствующего CSS:
#puzzlearea {
width: 400px;
height: 400px;
font-size: 40pt;
color: white;
margin-left: auto;
margin-right: auto;
position: relative;
}
#puzzlearea div {
background-image: url('background.jpg');
width: 90px;
height: 90px;
border: 5px solid black;
float: left;
cursor: default;
}
Я ценю любую помощь!