Skip to content

Commit 99045f5

Browse files
view transition the stickies
1 parent 3aeb43f commit 99045f5

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

css-masonry/kanban.html

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
max-width: 1500px;
2222
border-radius: 1rem;
2323
}
24-
24+
2525
.sticky {
26+
view-transition-name: match-element;
2627
background: #fffa87;
2728
border: 1px solid #e0e0e0;
2829
border-radius: .5rem;
@@ -232,32 +233,36 @@ <h2>Ship v0</h2>
232233
</div>
233234

234235
<script>
236+
const COLUMNS = ["backlog", "doing", "review", "done"];
237+
235238
addEventListener("click", e => {
236239
const backButton = e.target.closest("button.move-back");
237240
const forwardButton = e.target.closest("button.move-forward");
238241
const sticky = e.target.closest(".sticky");
239242

240-
if (backButton) {
241-
const column = sticky.dataset.column;
242-
if (column === "doing") {
243-
sticky.dataset.column = "backlog";
244-
} else if (column === "review") {
245-
sticky.dataset.column = "doing";
246-
} else if (column === "done") {
247-
sticky.dataset.column = "review";
248-
}
243+
if (!backButton && !forwardButton) {
244+
return;
245+
}
246+
247+
const currentColumn = sticky.dataset.column;
248+
const currentIndex = COLUMNS.indexOf(currentColumn);
249+
const nextColumn = backButton ? COLUMNS[currentIndex - 1] : COLUMNS[currentIndex + 1];
250+
251+
if (!nextColumn) {
252+
return;
249253
}
250254

251-
if (forwardButton) {
252-
const column = sticky.dataset.column;
253-
if (column === "backlog") {
254-
sticky.dataset.column = "doing";
255-
} else if (column === "doing") {
256-
sticky.dataset.column = "review";
257-
} else if (column === "review") {
258-
sticky.dataset.column = "done";
259-
}
255+
if (!document.startViewTransition) {
256+
sticky.dataset.column = nextColumn;
257+
return;
260258
}
259+
260+
document.startViewTransition(() => {
261+
sticky.dataset.column = nextColumn;
262+
// Move the sticky to be the first child of the column.
263+
const columnElements = document.querySelectorAll(`[data-column="${nextColumn}"]`);
264+
columnElements[0].parentNode.insertBefore(sticky, columnElements[1]);
265+
});
261266
});
262267
</script>
263268
</body>

0 commit comments

Comments
 (0)