JS Libraries

Init Read – Thư viện JavaScript nhẹ giúp bạn thêm Tiến Độ Đọc Bài Viết trong 30 giây

Init Read là một widget JavaScript độc lập giúp hiển thị tiến độ đọc bài viết dưới dạng vòng tròn progress, kèm theo mục lục (Table of Contents) có thể click để nhảy đến từng phần nội dung. Widget được phát triển bởi Init HTML với mục tiêu cung cấp giải pháp nhẹ, đẹp và dễ tích hợp cho mọi website.

Init Read – Thư viện JavaScript nhẹ giúp bạn thêm Tiến Độ Đọc Bài Viết trong 30 giây

Khác với các giải pháp khác trên thị trường, Init Read không phụ thuộc vào bất kỳ framework UI nào như Bootstrap, UIkit hay Tailwind. Bạn chỉ cần nhúng một file JavaScript duy nhất, widget sẽ tự động inject CSS và hoạt động ngay lập tức.

Tại sao nên chọn Init Read?

Trước khi đi vào hướng dẫn cài đặt, hãy cùng xem qua những lý do khiến Init Read trở thành lựa chọn hàng đầu cho việc thêm thanh tiến độ đọc vào website của bạn.

Không cần dependency

Init Read được viết hoàn toàn bằng vanilla JavaScript. Không cần jQuery, không cần React, không cần Vue. File JavaScript chỉ khoảng 25KB và CSS được tự động inject vào trang khi widget khởi động. Điều này có nghĩa là bạn có thể sử dụng Init Read trên bất kỳ website nào, từ blog WordPress cá nhân đến các trang tin tức lớn, mà không lo xung đột với các thư viện hiện có.

Thiết kế dark theme hiện đại

Giao diện của Init Read được thiết kế theo phong cách dark theme với hiệu ứng glassmorphism, bo góc mềm mại và animation mượt mà. Nút trigger hình tròn nổi bật trên mọi nền trang, dropdown mục lục có độ trong suốt với backdrop-filter blur, tạo cảm giác cao cấp và chuyên nghiệp. Widget tự động điều chỉnh vị trí và kích thước trên thiết bị di động, đảm bảo trải nghiệm người dùng tốt nhất.

Tự động nhận diện ngôn ngữ

Một trong những tính năng nổi bật của Init Read là khả năng tự động phát hiện ngôn ngữ từ thuộc tính lang của thẻ html. Nếu trang web của bạn có <html lang="vi">, widget sẽ hiển thị tiếng Việt. Nếu là <html lang="en">, widget sẽ chuyển sang tiếng Anh. Bạn cũng có thể ghi đè ngôn ngữ bằng cách truyền object i18n trong cấu hình, cho phép hỗ trợ thêm bất kỳ ngôn ngữ nào bạn muốn.

Mục lục tự động và chính xác

Init Read tự động quét các thẻ heading H2, H3 trong vùng nội dung bài viết và tạo mục lục phân cấp. Nếu heading chưa có ID, widget sẽ tự động tạo ID duy nhất dựa trên nội dung text. Khi bạn click vào một mục trong dropdown, trang sẽ scroll mượt mà đến vị trí heading tương ứng. Widget còn theo dõi vị trí scroll hiện tại để highlight mục đang đọc trong mục lục.

Tự động cập nhật khi nội dung thay đổi

Nếu website của bạn sử dụng lazy loading, infinite scroll hoặc AJAX để tải thêm nội dung, Init Read vẫn hoạt động chính xác nhờ MutationObserver. Widget theo dõi sự thay đổi trong DOM và tự động cập nhật danh sách heading cùng tiến độ đọc.

Các tính năng chính của Init Read

Dưới đây là tổng hợp đầy đủ các tính năng mà Init Read cung cấp:

  • Vòng tròn tiến độ SVG với màu sắc và kích thước tùy chỉnh
  • Mục lục tự động từ heading H2, H3 với phân cấp indent
  • Smooth scroll đến heading khi click mục lục
  • Highlight mục đang đọc theo vị trí scroll
  • Tự động nhận diện ngôn ngữ từ html lang (tiếng Anh và tiếng Việt)
  • Hỗ trợ override ngôn ngữ tùy chỉnh qua config
  • Dark theme với glassmorphism, không tooltip rườm rà
  • Responsive trên mọi thiết bị, tự động điều chỉnh vị trí
  • MutationObserver tự cập nhật khi DOM thay đổi
  • Hỗ trợ bàn phím (Escape để đóng dropdown)
  • Đầy đủ ARIA labels cho accessibility
  • Zero dependency, file ~25KB
  • CSS tự động inject, không cần thêm file stylesheet

Hướng dẫn cài đặt Init Read

Có hai cách để cài đặt Init Read trên website của bạn. Cách đơn giản nhất là auto-inject, widget sẽ tự động tạo nút ở góc màn hình. Cách thứ hai là chèn vào container tùy chỉnh nếu bạn muốn kiểm soát vị trí hiển thị.

Cách 1: Auto-inject (đơn giản nhất)

Chỉ cần thêm một dòng script vào cuối thẻ body hoặc trong thẻ head:

<script src="init-read/init-read.min.js"></script>

Widget sẽ tự động tạo nút ở góc dưới bên phải màn hình với cấu hình mặc định.

Cách 2: Custom container

Nếu bạn muốn đặt widget vào một vị trí cụ thể trong layout, hãy tạo container với ID initread-control:

<div id="initread-control"></div>
<script src="init-read/init-read.min.js"></script>

Cách 3: Với cấu hình tùy chỉnh

Để tùy chỉnh widget, bạn cần định nghĩa object window.InitReadConfig trước khi load script:

<script>
window.InitReadConfig = {
    articleSelector: 'article',
    contentSelector: '.entry-content',
    headingTags: ['h2', 'h3'],
    progressColor: '#6366f1',
    trackColor: 'rgba(128,128,128,0.18)',
    position: 'bottom-right',
    edgeOffset: 24,
    autoInject: true
};
</script>
<script src="init-read/init-read.min.js"></script>

Bảng cấu hình đầy đủ của Init Read

Dưới đây là danh sách đầy đủ các tùy chọn bạn có thể cấu hình cho Init Read:

Tùy chọnMặc địnhMô tả
articleSelectorarticle, .article, .post-content...Selector để tìm phần tử article chính
contentSelector.content, .article-content...Selector vùng nội dung bài viết
headingTags['h2', 'h3']Các thẻ heading để tạo mục lục
progressColor#6366f1Màu vòng tròn tiến độ
trackColorrgba(128,128,128,0.18)Màu nền vòng tròn
circleSize22Kích thước vòng tròn (px)
strokeWidth2.5Độ dày nét vẽ vòng tròn
offsetTop80Khoảng cách offset khi scroll đến heading
positionbottom-rightVị trí widget: bottom-right, bottom-left, top-right, top-left
edgeOffset24Khoảng cách từ cạnh màn hình (px)
autoInjecttrueTự động tạo nút nếu không tìm thấy container
i18nnullGhi đè ngôn ngữ tùy chỉnh

Hướng dẫn tùy chỉnh ngôn ngữ

Init Read tự động phát hiện ngôn ngữ từ thuộc tính lang của thẻ html. Nếu lang="vi" hoặc lang="vi-VN", widget hiển thị tiếng Việt. Các giá trị khác sẽ mặc định tiếng Anh.

Nếu bạn muốn ghi đè hoàn toàn hoặc thêm ngôn ngữ mới, hãy sử dụng tùy chọn i18n:

<script>
window.InitReadConfig = {
    i18n: {
        tocTitle: 'Mục lục',
        tocEmpty: 'Không có mục lục',
        readingProgress: 'Tiến độ đọc'
    }
};
</script>
<script src="init-read/init-read.min.js"></script>

Cách tích hợp Init Read vào WordPress

Để thêm Init Read vào website WordPress, bạn có thể sử dụng một trong các cách sau:

Phương pháp 1: Thêm vào theme file

Mở file footer.php của theme và thêm script trước thẻ đóng </body>:

<script src="init-read/init-read.min.js"></script>
</body>

Phương pháp 2: Sử dụng plugin Insert Headers and Footers

Cài đặt plugin Insert Headers and Footers, sau đó vào Settings > Insert Headers and Footers và dán script vào ô Scripts in Footer.

Phương pháp 3: Sử dụng functions.php

Thêm đoạn code sau vào file functions.php của theme:

function enqueue_initread() {
    wp_enqueue_script('initread', 'init-read/init-read.min.js', array(), null, true);
}
add_action('wp_enqueue_scripts', 'enqueue_initread');

Phương pháp 4: Sử dụng Code Snippets plugin

Nếu bạn không muốn chỉnh sửa file theme, hãy cài đặt plugin Code Snippets và tạo một snippet mới với code tương tự như phương pháp 3.

API JavaScript của Init Read

Sau khi widget được khởi tạo, bạn có thể truy cập instance thông qua biến toàn cục để điều khiển widget:

// Làm mới headings và tiến độ (hữu ích sau khi tải nội dung động)
window.__initread_instance__.refresh();

// Hủy widget và dọn dẹp DOM
window.__initread_instance__.destroy();

// Khởi tạo lại widget
window.initRead();

// Truy cập class để tạo instance thủ công
const widget = new window.InitRead();

Câu hỏi thường gặp

Init Read có miễn phí không?

Có, Init Read là thư viện mã nguồn mở được phát hành dưới giấy phép MIT. Bạn có thể sử dụng miễn phí cho cả dự án cá nhân và thương mại.

Init Read có làm chậm website không?

Không. File JavaScript chỉ khoảng 25KB, được nén và tối ưu. CSS được inject tự động nên không cần thêm request HTTP nào khác. Widget sử dụng requestAnimationFrame cho scroll handler để đảm bảo hiệu suất mượt mà.

Init Read có hoạt động trên Safari không?

Có, Init Read hỗ trợ tất cả các trình duyệt hiện đại bao gồm Chrome, Firefox, Safari và Edge. Widget sử dụng các API web chuẩn như SVG, MutationObserver và requestAnimationFrame.

Làm sao để thay đổi màu sắc widget?

Bạn có thể thay đổi màu vòng tròn tiến độ bằng tùy chọn progressColor trong config. Ví dụ: progressColor: '#ff6b6b' sẽ đổi thành màu đỏ san hô.

Widget có hỗ trợ heading H4 không?

Có, bạn chỉ cần thêm 'h4' vào mảng headingTags trong config: headingTags: ['h2', 'h3', 'h4'].

Kết luận

Init Read là giải pháp lý tưởng nếu bạn đang tìm kiếm một widget tiến độ đọc nhẹ, đẹp và dễ sử dụng. Với thiết kế không phụ thuộc framework, khả năng tự động nhận diện ngôn ngữ và giao diện dark theme hiện đại, Init Read sẽ nâng cao trải nghiệm đọc bài viết trên website của bạn mà không làm tăng độ phức tạp của dự án.

Bình luận


  • Không có bình luận.

Công cụ trực tuyến

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...