Scramble Text
Hiệu ứng giải mã kiểu hacker cho tiêu đề, link và nút — từng ký tự nhảy loạn rồi khớp vào chỗ
.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
Dòng chữ tự giải mã. Từng ký tự nhảy qua những ký hiệu ngẫu nhiên rồi lần lượt khớp vào chỗ, như một cái terminal đang bẻ khoá mật mã — trên tiêu đề lúc cuộn tới, trên link khi con trỏ ghé qua, hay trên một dòng trạng thái bất cứ khi nào code của bạn ra lệnh. Miễn phí, và sinh ra để là dòng chữ vui nhất trên trang của bạn.
- Đủ kiểu kích hoạt: khi hiện ra, khi rê chuột / focus, theo lệnh (
await scramble(el, { text })), và cụm từ xoay vòng biến hình từ câu này sang câu khác - Tự chọn kiểu "nhiễu": glyphs, binary, hex, katakana, blocks hay ký tự của riêng bạn — cùng thứ tự, tốc độ, độ so le và màu sắc
- Bố cục không xê dịch một pixel: mỗi ký tự giữ nguyên chỗ của nó, ký hiệu chỉ được vẽ đè lên
- Chạy theo seed nên ảnh chụp, video và test lần nào cũng ra y hệt
- Trình đọc màn hình nhận đúng chữ thật; người bật giảm chuyển động thấy chữ hiện ngay
- Không cần cài gì: một file CSS và một script nhỏ, hoặc một file React
Tính năng · 10
- Giải mã khi hiện ra (một lần, lúc cuộn tới), khi rê chuột và focus, hoặc theo lệnh từ code của bạn
- Cụm từ xoay vòng, biến hình từ câu này sang câu khác — chỉ những chữ thay đổi mới nhảy
- Năm bộ ký tự có sẵn — glyphs, binary, hex, katakana, blocks — hoặc bất kỳ ký tự nào bạn muốn
- Bốn thứ tự hiện chữ: trái sang phải, phải sang trái, ngẫu nhiên, từ giữa ra
- Chỉnh được thời lượng, tốc độ đổi ký tự, độ so le, độ trễ, màu ký tự chưa giải và chớp sáng khi khớp
- Không xô lệch bố cục: chữ giữ đúng bề rộng cuối cùng ngay từ khung hình đầu, kể cả khi xuống dòng
- Chạy theo seed: cùng seed thì cùng một màn giải mã, khớp từng khung hình
- Khoảng trắng (và dấu câu, nếu muốn) đứng yên; chữ tiếng Việt và emoji tính là một ký tự
- Bản HTML/CSS/JS thuần và bản React (dùng được với Next.js), kèm hook useScramble
- Không phụ thuộc thư viện, khoảng 5 KB sau gzip (cả script lẫn CSS)
Cách dùng
Gắn stylesheet và script một lần, rồi đánh dấu phần tử nào chứa chữ thuần:
<link rel="stylesheet" href="scramble-text.css" />
<script src="scramble-text.js" defer></script>
<h1 data-scramble>Dòng chữ tự giải mã</h1>
<a href="/docs" data-scramble="hover" data-scramble-charset="binary">Tài liệu</a>
<span data-scramble-rotate data-scramble-phrases="Làm nhanh hơn | Gọn gàng hơn | Không tốn đồng nào">Làm nhanh hơn</span>data-scramble chọn cách kích hoạt: để trống hoặc reveal thì giải mã lần đầu phần tử được cuộn
tới (trước đó nó chờ dưới dạng ký hiệu đứng yên), hover thì xáo lại mỗi lần rê chuột hay focus —
vào link hoặc nút bao quanh nó, nếu có — còn manual thì chờ bạn gọi. data-scramble-rotate biến
hình từ cụm này sang cụm khác (ngăn cách bằng |) sau mỗi data-scramble-interval ms (mặc định
2200), giữ bề rộng của cụm dài nhất; nó tạm dừng khi được rê chuột hoặc focus.
Tuỳ chọn qua data attribute, dùng được cho cả hai:
| Attribute | Mặc định | Làm gì |
|---|---|---|
data-scramble-charset |
glyphs |
glyphs, binary, hex, katakana, blocks — hoặc chính các ký tự, ví dụ ✦✧★ |
data-scramble-order |
ltr |
ltr, rtl, random hoặc center (từ giữa ra) |
data-scramble-duration |
1000 |
Số ms từ lúc ký tự đầu tiên khớp đến ký tự cuối cùng |
data-scramble-speed |
45 |
Số ms giữa hai lần đổi ký hiệu (càng nhỏ nhảy càng nhanh) |
data-scramble-stagger |
0.85 |
0–1: 1 khớp lần lượt từng chữ, 0 khớp cùng lúc ở cuối |
data-scramble-delay |
0 |
Số ms chỉ toàn nhiễu trước khi ký tự đầu tiên khớp |
data-scramble-seed |
— | Số hoặc từ bất kỳ: cùng seed thì cùng một màn giải mã, khớp từng khung hình |
data-scramble-preserve |
space |
space, punctuation (kèm khoảng trắng) hoặc none: thứ gì đứng yên |
data-scramble-mono |
— | Mọi ký tự rộng bằng nhau, dùng font --scramble-mono-font |
data-scramble-label |
— | Nội dung trình đọc màn hình đọc thay (xoay vòng: mặc định đọc mọi cụm) |
Từ code của bạn:
await ScrambleText.scramble(element, { text: "Đã cấp quyền", charset: "hex", order: "center" });
ScrambleText.rotator(element).pause(); // hoặc .play(), .next()scramble giải mã bất kỳ phần tử nào sang chữ mới (hoặc xáo lại chữ đang có), mọi tuỳ chọn ở trên
chỉ áp cho lần gọi đó; changedOnly: true chỉ xáo những ký tự khác nhau. Hàm trả về khi ký tự cuối
cùng khớp, và phần tử phát sự kiện scrambleend (có nổi bọt). Phần tử thêm vào sau khi trang đã tải:
ScrambleText.init(container) — hàm này trả về một hàm để gỡ ra. ScrambleText.create(element, options) và ScrambleText.createRotate(element, { phrases }) trả về controller trực tiếp.
Chép ScrambleText.tsx, scramble-text.css và thư mục core vào dự án:
import { ScrambleRotate, ScrambleText, useScramble } from "./ScrambleText";
<ScrambleText as="h1" text="Dòng chữ tự giải mã" />
<ScrambleText as="a" href="/docs" text="Tài liệu" trigger="hover" charset="binary" />
<ScrambleText text={status} trigger="manual" order="center" /> {/* giải mã mỗi khi status đổi */}
<ScrambleRotate phrases={["Làm nhanh hơn", "Gọn gàng hơn"]} interval={2400} paused={paused} mono />
function DeployButton() {
const { ref, scramble } = useScramble({ trigger: "manual", charset: "hex" });
return <button ref={ref} onClick={() => scramble({ text: "Đã deploy" })}>Deploy</button>;
}Mọi tuỳ chọn ở trên đều là prop (charset, order, duration, speed, stagger, delay, seed,
preserve, label, mono); as chọn thẻ (mặc định span) và mọi prop khác được chuyển cho thẻ
đó. Chữ được render cả ở server, nên trang đọc được ngay trước khi script chạy. Với useScramble,
hãy giữ chữ của phần tử cố định và đổi nó qua scramble({ text }). React 18 hoặc 19.
File bắt đầu bằng "use client", nên dùng được trong mọi page hay server component. Với App Router
không cần làm gì thêm. Với Pages Router, chuyển dòng import CSS vào pages/_app.
Chữ giữ nguyên font, cỡ và màu của bạn (chữ gradient cũng được). Đặt các biến sau trên chính dòng
chữ, hoặc trên bất kỳ phần tử nào bao quanh — một nút, một thẻ, :root:
| Biến | Đổi gì |
|---|---|
--scramble-glyph, --scramble-glyph-glow, --scramble-glyph-opacity |
Các ký hiệu đang nhảy: màu, quầng sáng, độ đậm |
--scramble-flash, --scramble-flash-duration |
Chớp sáng khi một ký tự khớp |
--scramble-mono-font |
Font của data-scramble-mono / mono |
--scramble-align |
Vị trí cụm từ xoay vòng trong khoảng của cụm dài nhất (start, center, end) |
Màu dùng light-dark(): tự theo color-scheme của trang. Khi bật prefers-reduced-motion, mọi lần
giải mã diễn ra ngay lập tức — chữ chỉ đơn giản hiện ra — và cụm từ xoay vòng đổi mà không xáo.
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 a decode text effect: reveal, hover and on-demand scrambles, rotating phrases, five charset presets, four reveal orders, seeded runs, no layout shift, screen-reader and reduced-motion support.
- 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.

