remove use of class list in actuator, fix animations for firefox
This commit is contained in:
+20
-7
@@ -44,24 +44,37 @@ HTMLActuator.prototype.addTile = function (tile) {
|
|||||||
var position = tile.previousPosition || { x: tile.x, y: tile.y };
|
var position = tile.previousPosition || { x: tile.x, y: tile.y };
|
||||||
positionClass = this.positionClass(position);
|
positionClass = this.positionClass(position);
|
||||||
|
|
||||||
element.classList.add("tile", "tile-" + tile.value, positionClass);
|
// We can't use classlist because it somehow glitches when replacing classes
|
||||||
|
var classes = ["tile", "tile-" + tile.value, positionClass];
|
||||||
|
this.applyClasses(element, classes);
|
||||||
|
|
||||||
element.textContent = tile.value;
|
element.textContent = tile.value;
|
||||||
|
|
||||||
this.tileContainer.appendChild(element);
|
|
||||||
|
|
||||||
if (tile.previousPosition) {
|
if (tile.previousPosition) {
|
||||||
|
// Make sure that the tile gets rendered in the previous position first
|
||||||
window.requestAnimationFrame(function () {
|
window.requestAnimationFrame(function () {
|
||||||
element.classList.remove(element.classList[2]);
|
classes[2] = self.positionClass({ x: tile.x, y: tile.y });
|
||||||
element.classList.add(self.positionClass({ x: tile.x, y: tile.y }));
|
self.applyClasses(element, classes); // Update the position
|
||||||
});
|
});
|
||||||
} else if (tile.mergedFrom) {
|
} else if (tile.mergedFrom) {
|
||||||
element.classList.add("tile-merged");
|
classes.push("tile-merged");
|
||||||
|
this.applyClasses(element, classes);
|
||||||
|
|
||||||
|
// Render the tiles that merged
|
||||||
tile.mergedFrom.forEach(function (merged) {
|
tile.mergedFrom.forEach(function (merged) {
|
||||||
self.addTile(merged);
|
self.addTile(merged);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
element.classList.add("tile-new");
|
classes.push("tile-new");
|
||||||
|
this.applyClasses(element, classes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Put the tile on the board
|
||||||
|
this.tileContainer.appendChild(element);
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.applyClasses = function (element, classes) {
|
||||||
|
element.setAttribute("class", classes.join(" "));
|
||||||
};
|
};
|
||||||
|
|
||||||
HTMLActuator.prototype.normalizePosition = function (position) {
|
HTMLActuator.prototype.normalizePosition = function (position) {
|
||||||
|
|||||||
+32
-15
@@ -143,6 +143,8 @@ hr {
|
|||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
width: 500px;
|
width: 500px;
|
||||||
height: 500px;
|
height: 500px;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
box-sizing: border-box; }
|
box-sizing: border-box; }
|
||||||
.game-container .game-message {
|
.game-container .game-message {
|
||||||
display: none;
|
display: none;
|
||||||
@@ -336,29 +338,35 @@ hr {
|
|||||||
@-webkit-keyframes appear {
|
@-webkit-keyframes appear {
|
||||||
0% {
|
0% {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
-webkit-transform: scale(0); }
|
-webkit-transform: scale(0);
|
||||||
|
-moz-transform: scale(0); }
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
-webkit-transform: scale(1); } }
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1); } }
|
||||||
|
|
||||||
@-moz-keyframes appear {
|
@-moz-keyframes appear {
|
||||||
0% {
|
0% {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
-webkit-transform: scale(0); }
|
-webkit-transform: scale(0);
|
||||||
|
-moz-transform: scale(0); }
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
-webkit-transform: scale(1); } }
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1); } }
|
||||||
|
|
||||||
@keyframes appear {
|
@keyframes appear {
|
||||||
0% {
|
0% {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
-webkit-transform: scale(0); }
|
-webkit-transform: scale(0);
|
||||||
|
-moz-transform: scale(0); }
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
-webkit-transform: scale(1); } }
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1); } }
|
||||||
|
|
||||||
.tile-new {
|
.tile-new {
|
||||||
-webkit-animation: appear 200ms ease 100ms;
|
-webkit-animation: appear 200ms ease 100ms;
|
||||||
@@ -368,33 +376,42 @@ hr {
|
|||||||
|
|
||||||
@-webkit-keyframes pop {
|
@-webkit-keyframes pop {
|
||||||
0% {
|
0% {
|
||||||
-webkit-transform: scale(0); }
|
-webkit-transform: scale(0);
|
||||||
|
-moz-transform: scale(0); }
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
-webkit-transform: scale(1.2); }
|
-webkit-transform: scale(1.2);
|
||||||
|
-moz-transform: scale(1.2); }
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
-webkit-transform: scale(1); } }
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1); } }
|
||||||
|
|
||||||
@-moz-keyframes pop {
|
@-moz-keyframes pop {
|
||||||
0% {
|
0% {
|
||||||
-webkit-transform: scale(0); }
|
-webkit-transform: scale(0);
|
||||||
|
-moz-transform: scale(0); }
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
-webkit-transform: scale(1.2); }
|
-webkit-transform: scale(1.2);
|
||||||
|
-moz-transform: scale(1.2); }
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
-webkit-transform: scale(1); } }
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1); } }
|
||||||
|
|
||||||
@keyframes pop {
|
@keyframes pop {
|
||||||
0% {
|
0% {
|
||||||
-webkit-transform: scale(0); }
|
-webkit-transform: scale(0);
|
||||||
|
-moz-transform: scale(0); }
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
-webkit-transform: scale(1.2); }
|
-webkit-transform: scale(1.2);
|
||||||
|
-moz-transform: scale(1.2); }
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
-webkit-transform: scale(1); } }
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1); } }
|
||||||
|
|
||||||
.tile-merged {
|
.tile-merged {
|
||||||
z-index: 20;
|
z-index: 20;
|
||||||
|
|||||||
+7
-4
@@ -155,6 +155,8 @@ hr {
|
|||||||
border-radius: $tile-border-radius * 2;
|
border-radius: $tile-border-radius * 2;
|
||||||
width: $field-width;
|
width: $field-width;
|
||||||
height: $field-width;
|
height: $field-width;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.game-message {
|
.game-message {
|
||||||
@@ -342,15 +344,15 @@ hr {
|
|||||||
|
|
||||||
@include keyframes(appear) {
|
@include keyframes(appear) {
|
||||||
0% {
|
0% {
|
||||||
// -webkit-transform: scale(1.5);
|
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
-webkit-transform: scale(0);
|
-webkit-transform: scale(0);
|
||||||
|
-moz-transform: scale(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
// -webkit-transform: scale(1);
|
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
-webkit-transform: scale(1);
|
-webkit-transform: scale(1);
|
||||||
|
-moz-transform: scale(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -362,16 +364,17 @@ hr {
|
|||||||
@include keyframes(pop) {
|
@include keyframes(pop) {
|
||||||
0% {
|
0% {
|
||||||
-webkit-transform: scale(0);
|
-webkit-transform: scale(0);
|
||||||
// opacity: 0;
|
-moz-transform: scale(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
-webkit-transform: scale(1.2);
|
-webkit-transform: scale(1.2);
|
||||||
|
-moz-transform: scale(1.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
-webkit-transform: scale(1);
|
-webkit-transform: scale(1);
|
||||||
// opacity: 1;
|
-moz-transform: scale(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user