Bubble Sort Animation
Bản tương tác của video ngắn: các cột bắt chéo khi đổi chỗ, đuôi đã sắp xếp dài dần và cú thoát sớm
.zip · HTML / CSS / JS · v1.0.0
Miễn phí — không cần tài khoản hay email. Luôn là bản mới nhất.
Đang chạy trực tiếp
Giới thiệu
Đây là bản tương tác của animation bubble sort trong video ngắn. Nó sắp xếp đúng dữ liệu của
video, 5 2 8 1 7 3 6 4, và kết thúc ở đúng 25 lần so sánh, 14 lần đổi chỗ — nhưng bạn có thể
dừng lại, đi từng bước, chạy chậm và đổi số tuỳ ý. Khung code chạy từng bước chính là đoạn
bubbleSort trên trang thuật toán Sắp xếp nổi bọt, khớp từng
dòng, nên bạn xem gì thì trang đó dạy đúng cái đó.
Mỗi lượt đều dễ theo dõi. Hai phần tử liền kề đang so sánh sáng lên cùng nhãn j và j + 1. Nếu
sai thứ tự, cột lớn hơn nhảy qua cột nhỏ hơn rồi hai cột đổi chỗ; cờ swapped bật lên. Giá trị lớn
nhất của lượt trôi về cuối, và đuôi đã sắp xếp lớn dần từ bên phải kèm vài bong bóng. Khi một
lượt mà swapped vẫn tắt, thuật toán dừng ngay: đó là thoát sớm, được ghi rõ trong chú thích.
- Bộ đếm so sánh, đổi chỗ và lượt, cùng một hàng cho mỗi lượt cho biết lượt đó so sánh bao nhiêu lần và đổi chỗ bao nhiêu lần
- Có sẵn dữ liệu của video, ngẫu nhiên, gần như đã sắp xếp (để dễ thấy thoát sớm) và đảo ngược; hoặc tự gõ dãy số của bạn
- Trình phát đầy đủ với thanh kéo và tốc độ 0.5×–4×, đẹp khi chiếu slide hay quay video
- Mọi màu sắc, bo góc, font chữ và thời gian đều là CSS custom property; sáng tối theo trang của bạn
- Không cần cài gì: một file CSS và một script, hoặc một component React
Tính năng · 9
- Diễn lại bubbleSort có thoát sớm bằng cờ swapped đúng như trang thuật toán miễn phí viết, khung code khớp từng dòng
- Cặp đang so sánh sáng lên; khi đổi chỗ, cột lớn hơn nhảy qua cột nhỏ hơn, còn đuôi đã sắp xếp lớn dần từ bên phải
- Cờ swapped là một công tắc ngay trên sân khấu: bật lên khi có lần đổi chỗ đầu tiên của lượt, và một lượt mà công tắc vẫn tắt thì dừng thuật toán, kèm chú thích nói rõ điều đó
- Bộ đếm so sánh, đổi chỗ và lượt, cùng một hàng cho mỗi lượt: dữ liệu mặc định 5 2 8 1 7 3 6 4 kết thúc đúng 25 lần so sánh và 14 lần đổi chỗ
- Có sẵn dữ liệu của video, ngẫu nhiên, gần như đã sắp xếp (thấy rõ cú thoát sớm) và đảo ngược; hoặc tự gõ dãy số của bạn (tối đa 24 số)
- Mỗi bước có chú thích bằng lời dễ hiểu, các dòng code đang chạy được tô sáng
- Trình phát: chạy, dừng, lùi, tiến từng bước, về đầu, kéo thanh thời gian, tốc độ 0.5×–4×, tuỳ chọn lặp lại
- Bản HTML/CSS/JS thuần và bản React (dùng được với Next.js), đủ sáng và tối
- Không phụ thuộc thư viện, khoảng 14 KB sau gzip (cả script lẫn CSS)
Cách dùng
Xem video xong và muốn dùng animation này? Chọn trường hợp của bạn bên dưới. Với HTML thuần chỉ mất khoảng hai phút, không cần build, không cần framework.
-
Giải nén
bubble-sort-animation-vanilla.zip. Chépbubble-sort-animation.cssvàbubble-sort-animation.jscạnh trang của bạn (hoặc vào thư mục assets của website). -
Trong
<head>của trang, nhúng stylesheet và script một lần:<link rel="stylesheet" href="bubble-sort-animation.css" /> <script src="bubble-sort-animation.js" defer></script> -
Chỗ nào cần animation, đặt một phần tử rỗng có
data-bubble-sort-animation:<!-- dữ liệu của video: 5 2 8 1 7 3 6 4 --> <div class="bubble-sort-animation" data-bubble-sort-animation></div> <!-- dãy số của bạn, ẩn hàng nhập và khung code: đủ gọn để đặt vào slide --> <div class="bubble-sort-animation" data-bubble-sort-animation data-bubble-sort-animation-values="9 4 7 1 8" data-bubble-sort-animation-inputs="false" data-bubble-sort-animation-code="false" ></div> -
Mở trang lên. Animation tự chạy; bấm vào nó một lần để nhận phím, sau đó Space để chạy / dừng, ← / → để đi từng bước, Home để chạy lại từ đầu.
Tuỳ chọn qua data attribute, đều bắt đầu bằng data-bubble-sort-animation-:
| Attribute | Mặc định | Tác dụng |
|---|---|---|
-values |
theo preset | Dãy số của bạn, cách nhau bằng dấu cách hoặc dấu phẩy: số nguyên từ -999 đến 999, tối đa 24 số |
-preset |
video |
video (5 2 8 1 7 3 6 4), random, nearly-sorted hoặc reversed; bị bỏ qua khi có -values |
-size |
8 |
Số cột của random, nearly-sorted và reversed (2–24) |
-seed |
7 |
Chọn mảng ngẫu nhiên nào: cùng seed luôn ra cùng một mảng |
-speed |
1 |
Từ 0.25 đến 4 |
-autoplay |
true |
Tự chạy khi tải xong (không bao giờ tự chạy khi bật giảm chuyển động) |
-loop |
false |
Dừng một chút ở kết quả rồi chạy lại từ đầu |
-code |
true |
false để ẩn khung code |
-inputs |
true |
false để ẩn hàng preset và ô nhập số của bạn |
Muốn xem một lượt dừng sớm, thử data-bubble-sort-animation-preset="nearly-sorted": một lượt đã
đưa các cặp về đúng chỗ, lượt kế tiếp không đổi chỗ lần nào.
Phần tử thêm vào sau khi trang đã tải (một tab, một modal, một route chuyển bằng JavaScript): gọi
BubbleSortAnimation.init(container), hàm này trả về một hàm để gỡ bỏ. Muốn điều khiển toàn bộ thì
dùng BubbleSortAnimation.createBubbleSortAnimation(element, options): nó trả về một handle có
setValues, setPreset, shuffle, player (play, pause, stepForward, stepBack, seek,
reset, setSpeed, setLoop) và destroy.
- Slide làm từ HTML (reveal.js, Slidev, bản xuất HTML của Marp): đặt
<link>và<script>vào head của bộ slide, còn<div>đặt trên slide. Dùng-inputs="false",-code="false"và-autoplay="false"cho slide gọn gàng, rồi bấm Space khi chiếu tới slide đó. - Blog hoặc website tĩnh (Hugo, Jekyll, Astro, Eleventy, khối Custom HTML của WordPress): tải
hai file lên, thêm
<link>và<script>vào template trang (hoặc một lần cho mỗi bài), rồi dán<div>vào bài viết. Một trang có nhiều animation cũng không sao. - LMS hoặc bất kỳ trang nào cho phép thêm HTML (Moodle, Canvas, ô nhúng kiểu Notion nhận
iframe): đưa hai file cùng một trang nhỏ chứa
<div>lên host, rồi nhúng trang đó bằng<iframe>. - PowerPoint hoặc Keynote: mở trang, chọn tốc độ rồi quay màn hình, hoặc chụp lại khung hình
bạn cần; dùng
-autoplay="false"và bấm → để đi từng bước.
Animation sắp xếp đúng dữ liệu của video, nên bạn có thể chiếu video trước rồi để học sinh tự đi từng bước. Khung code là đoạn JavaScript trên trang thuật toán, nên hai nơi luôn khớp nhau.
Chép BubbleSortAnimation.tsx, bubble-sort-animation.css và thư mục core vào dự án:
import { BubbleSortAnimation } from "./BubbleSortAnimation";
<BubbleSortAnimation />
<BubbleSortAnimation values={[9, 4, 7, 1, 8]} inputs={false} code={false} autoplay={false} />
<BubbleSortAnimation preset="nearly-sorted" size={10} seed={3} loop onFrame={(frame) => console.log(frame.caption)} />Props chính là các tuỳ chọn ở trên viết kiểu camelCase (values, preset, size, seed,
speed, autoplay, loop, code, inputs), thêm onFrame(frame, index) được gọi mỗi khi vẽ
một khung hình. Đổi một prop là thuật toán chạy lại từ đầu. Mọi prop khác được truyền xuống thẻ
<div> gốc (className, id, aria-*…). Dùng được với React 18 hoặc 19.
File bắt đầu bằng "use client", nên dùng được từ bất kỳ page hay server component nào. Với App
Router thì không cần làm gì thêm. Với Pages Router, chuyển dòng import CSS vào pages/_app.
Đặt các biến này trên .bubble-sort-animation (hoặc class của riêng bạn):
| Biến | Thay đổi gì |
|---|---|
--bubble-bar, --bubble-compare, --bubble-swap, --bubble-sorted |
Màu cột chưa sắp xếp (tím), cặp đang so sánh (xanh ngọc), lần đổi chỗ (hồng) và đuôi đã sắp xếp (xanh lá) |
--bubble-flag |
Công tắc swapped khi bật, và màu các con số trong code |
--bubble-bg, --bubble-surface, --bubble-surface-strong, --bubble-blur |
Nền và lớp kính mờ |
--bubble-edge, --bubble-shadow, --bubble-code-bg |
Viền, bóng đổ, nền khung code |
--bubble-text, --bubble-muted, --bubble-on-accent, --bubble-ring |
Chữ, chữ phụ, chữ trên nhãn và nút có màu, viền focus |
--bubble-font, --bubble-mono |
Font cho chữ và cho code, con số |
--bubble-radius, --bubble-bar-radius |
Bo góc của trình phát và của các cột |
--bubble-duration, --bubble-ease |
Các cột bắt chéo và trượt nhanh hay chậm, mượt đến đâu |
Màu dùng light-dark() nên tự theo color-scheme của trang. Khi bật prefers-reduced-motion,
không có gì tự chạy và khung hình đổi ngay lập tức; mọi nút điều khiển vẫn dùng được.
- Không thấy gì: phần tử cần có
data-bubble-sort-animation, và cả CSS lẫn script đều phải tải được (kiểm tra đường dẫn trong tab Network của trình duyệt). - Bấm Space hay phím mũi tên mà không có phản ứng: bấm vào animation một lần trước đã; phím tắt chỉ hoạt động khi nó đang được focus, và không bao giờ hoạt động khi bạn đang gõ trong ô số.
- Số của tôi bị đổi: giá trị được làm tròn thành số nguyên, giữ trong khoảng -999 đến 999 và cắt ở 24 số. Ô nhập luôn hiện đúng dãy đã được sắp xếp.
Hỏi về sản phẩm này
Chưa chắc có hợp dự án của bạn? Cứ hỏi — câu trả lời lấy từ chính trang này.
Lịch sử phiên bản
1.0.0First releaseMới nhất
Plain HTML/CSS/JS and React builds of the step-by-step bubble sort animation with the early exit: bars that cross when they swap, a sorted tail that grows, the swapped flag, comparison / swap / pass counters, live code, player controls, your own numbers and presets, light and dark.
- Bản sửa lỗi và tính năng mới đều có ngay ở nút tải này — file tải về luôn là bản mới nhất.
Có thể bạn sẽ thích
- AnimationSắp xếp
Sorting Race
Sáu thuật toán sắp xếp đua nhau trên cùng một bộ dữ liệu — mỗi nhịp một thao tác, về đích nhận huy chương
Miễn phí - AnimationSắp xếp
Quick Sort Animation
Sắp xếp nhanh từng bước: phần tử chốt, hai con trỏ của Hoare và ngăn xếp gọi hàm luôn nông
Miễn phí



