Cuộn mượt (smooth scroll) đang dần trở thành một tiêu chuẩn trong thiết kế website hiện đại, đặc biệt với các website WordPress chú trọng trải nghiệm người dùng và hiệu ứng chuyển động. Khi người truy cập cuộn trang, mọi chuyển động đều liền mạch, tự nhiên và dễ theo dõi hơn, từ đó giúp giữ chân người dùng lâu hơn và tăng khả năng tương tác.
Trong số các thư viện hỗ trợ hiệu ứng cuộn, GSAP (GreenSock Animation Platform) được đánh giá rất cao nhờ hiệu năng tốt, khả năng kiểm soát chi tiết và hoạt động ổn định trên nhiều trình duyệt. Khi kết hợp GSAP với WordPress, bạn có thể xây dựng hiệu ứng cuộn mượt chuyên nghiệp mà không làm ảnh hưởng đến tốc độ tải trang hay cấu trúc theme có sẵn. Đặc biệt, GSAP ScrollTrigger cho phép đồng bộ chuyển động với hành vi cuộn một cách chính xác và linh hoạt.
Trong bài viết này, bạn sẽ được hướng dẫn cách code tính năng cuộn mượt cho WordPress bằng GSAP một cách rõ ràng, dễ áp dụng. Từ việc nạp thư viện, cấu hình script cho đến tích hợp vào theme hoặc plugin, tất cả đều phù hợp cho cả người mới lẫn developer đã có kinh nghiệm, giúp bạn nâng cao trải nghiệm người dùng một cách hiệu quả.

Có thể bạn đã biết rồi… GSAP hiện đã miễn phí tất cả các Plugins!
Có thể bạn đã biết rồi, GSAP hiện đã miễn phí tất cả các Plugins, và đây là một tin cực kỳ đáng chú ý đối với cộng đồng lập trình web, đặc biệt là những ai làm Frontend Animation. Trước đây, nhiều plugin mạnh mẽ của GSAP như ScrollTrigger, ScrollSmoother, SplitText hay MotionPathPlugin yêu cầu giấy phép trả phí, gây không ít trở ngại cho cá nhân và các nhóm nhỏ. Việc GSAP mở miễn phí toàn bộ plugin đã tạo điều kiện thuận lợi hơn rất nhiều cho việc phát triển website hiện đại.
GSAP (GreenSock Animation Platform) vốn nổi tiếng với hiệu năng cao, khả năng tối ưu tốt và kiểm soát animation chính xác đến từng chi tiết. Khi tất cả plugin được sử dụng miễn phí, lập trình viên có thể dễ dàng xây dựng các hiệu ứng chuyển động phức tạp, animation theo cuộn trang, parallax mượt mà mà không cần lo lắng về chi phí bản quyền. Điều này đặc biệt có lợi cho các dự án cá nhân, startup và freelancer.
Ngoài ra, việc GSAP miễn phí plugin còn giúp quá trình học tập trở nên đơn giản hơn. Người mới có thể tiếp cận đầy đủ tính năng mà không bị giới hạn, từ đó nâng cao kỹ năng và hiểu sâu hơn về animation trong JavaScript. Nếu bạn đang tìm kiếm công cụ tạo animation chuyên nghiệp, mạnh mẽ và nay lại hoàn toàn miễn phí, GSAP chắc chắn là lựa chọn rất đáng cân nhắc cho mọi dự án web hiện đại.
Khi nào nên và không nên sử dụng tính năng cuộn mượt cho trang WordPress?
Cuộn mượt (smooth scroll) là hiệu ứng giúp trang WordPress di chuyển chậm và liền mạch khi người dùng cuộn chuột. Dùng đúng cách sẽ cải thiện trải nghiệm, nhưng dùng sai có thể gây khó chịu.
Khi nào nên dùng cuộn mượt?
Cuộn mượt phù hợp với website ít nội dung, thiên về thiết kế thị giác như landing page, portfolio, website giới thiệu thương hiệu, sự kiện, hình ảnh hoặc video. Với dạng web này, người dùng thường cuộn để xem tổng thể bố cục, hiệu ứng cuộn mượt giúp chuyển cảnh nhẹ nhàng, tạo cảm giác cao cấp và chuyên nghiệp. Ngoài ra, cuộn mượt cũng phù hợp cho trang one-page, nơi các mục nội dung liên kết bằng anchor, giúp điều hướng mạch lạc hơn.
Khi nào không nên lạm dụng tính năng cuộn mượt?
Đối với website nhiều nội dung như blog, trang tin tức, website chia sẻ kiến thức hoặc thương mại điện tử, cuộn mượt thường không được khuyến khích. Người dùng cần cuộn nhanh để tìm thông tin, đọc bài dài hoặc so sánh sản phẩm. Hiệu ứng cuộn mượt có thể gây chậm cảm giác phản hồi, làm giảm khả năng kiểm soát và ảnh hưởng đến trải nghiệm đọc. Ngoài ra, lạm dụng cuộn mượt còn có thể ảnh hưởng hiệu suất và điểm Core Web Vitals nếu cài plugin không tối ưu.
Hãy ưu tiên trải nghiệm người dùng: web nhiều nội dung nên để cuộn tự nhiên, web thiên về thị giác có thể cân nhắc cuộn mượt để tăng giá trị thiết kế.
Tại sao nên dùng cuộn mượt của GSAP thay cho Locomotive?
Dùng cuộn mượt của GSAP (ScrollSmoother) thay cho Locomotive Scroll đang là lựa chọn được nhiều developer ưu tiên, đặc biệt sau khi GSAP mở miễn phí toàn bộ plugin.
Thứ nhất, hiệu suất. GSAP ScrollSmoother hoạt động trực tiếp trên requestAnimationFrame, tối ưu cho trình duyệt hiện đại. Chuyển động mượt, ổn định ngay cả trên thiết bị yếu hoặc trang dài. Locomotive dùng cơ chế transform và tính toán lại vị trí liên tục, dễ gây drop frame trên mobile hoặc khi DOM phức tạp.
Thứ hai, độ mượt và độ chính xác. ScrollSmoother của GSAP giữ nguyên logic scroll native, mượt nhưng vẫn chính xác từng pixel. Điều này giúp animation đồng bộ hoàn hảo với ScrollTrigger, tránh lỗi lệch vị trí, giật hoặc sai thời điểm kích hoạt – vấn đề thường gặp khi dùng Locomotive kết hợp thư viện khác.
Thứ ba, khả năng tương thích. GSAP tương thích tốt với Webflow, React, Vue, Next.js mà không cần nhiều workaround. Locomotive thường gặp xung đột với SSR, iOS address bar, sticky element và accessibility.
Cuối cùng, dễ bảo trì và hệ sinh thái. Khi dùng GSAP, toàn bộ animation, scroll, pin, parallax đều chung một hệ thống, API nhất quán, tài liệu rõ ràng. Điều này giúp code gọn hơn, dễ debug và mở rộng lâu dài.
Tóm lại, nếu cần cuộn mượt mượt, nhẹ, ổn định và chuyên nghiệp, GSAP ScrollSmoother là lựa chọn vượt trội so với Locomotive Scroll trong thời điểm hiện tại.
Bước 1: Cài đặt GSAP cho WordPress
Để sử dụng GSAP trong WordPress, có nhiều cách khác nhau như tải file về host, dùng plugin hỗ trợ script, hoặc chèn qua CDN. Trong đó, chèn GSAP qua CDN là phương pháp đơn giản, nhẹ và dễ quản lý nhất, phù hợp cho cả người mới lẫn người làm web lâu năm.
Hướng dẫn chèn GSAP CDN vào WordPress
Trước tiên, truy cập trang tài liệu chính thức của GSAP tại:
https://gsap.com/docs/v3/Installation
Tại mục Import and Include Plugins, chọn hai module phổ biến là ScrollTrigger và ScrollSmoother. GSAP sẽ cung cấp các đoạn mã CDN cần thiết để sử dụng trực tiếp trên website.
Sao chép các đoạn mã sau:
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.1/dist/gsap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.1/dist/ScrollTrigger.min.js"></script>
<!-- ScrollSmoother requires ScrollTrigger -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.1/dist/ScrollSmoother.min.js"></script>Tiếp theo, thêm đoạn JavaScript để đăng ký plugin:
<script>
// use a script tag or an external JS file
document.addEventListener("DOMContentLoaded", (event) => {
gsap.registerPlugin(ScrollTrigger,ScrollSmoother)
// gsap code here!
});
</script>Chèn mã GSAP vào WordPress
Bạn có thể dùng plugin WPCodeBox để chèn HTML/JS vào website WordPress một cách an toàn. Chỉ cần tạo snippet mới, chọn loại HTML, dán toàn bộ mã trên và kích hoạt là xong. Từ đây, bạn đã sẵn sàng sử dụng GSAP cho các hiệu ứng cuộn mượt và animation chuyên sâu.

WPCodeBox là plugin WordPress quản lý code snippets rất mạnh, phù hợp cho developer và webmaster chuyên nghiệp. Công cụ này giúp thêm, chỉnh sửa và quản lý PHP, CSS, JS, SCSS trực tiếp trong WordPress mà không cần sửa file theme. WPCodeBox hỗ trợ lưu trữ snippet trên Cloud, dùng lại cho nhiều website, tiết kiệm thời gian làm việc. Trình soạn thảo thông minh có gợi ý hook, action, function giúp code chính xác hơn. Nhờ khả năng kiểm soát lỗi và tối ưu hiệu suất, WPCodeBox giúp website gọn nhẹ, dễ bảo trì và vận hành ổn định.
Bước 2: Tiến hành cài đặt smooth-wrapper cho toàn trang WordPress
Để áp dụng hiệu ứng cuộn mượt (smooth scroll) cho toàn bộ website WordPress, việc cài đặt smooth-wrapper và smooth-content là bước bắt buộc theo đúng tài liệu của GSAP ScrollSmoother. Nguyên lý hoạt động rất rõ ràng: toàn bộ nội dung HTML của trang phải nằm trong một phần tử duy nhất (thường là div#smooth-content), phần tử này được bọc bên ngoài bởi div#smooth-wrapper. Thanh cuộn thật vẫn nằm trên thẻ <body>, còn nội dung bên trong sẽ được di chuyển bằng CSS transform.
ScrollTrigger theo dõi vị trí cuộn gốc của trình duyệt, sau đó ScrollSmoother sẽ áp dụng hiệu ứng trễ bằng matrix3d() để tạo cảm giác cuộn mượt. Vì vậy, bắt buộc phải đăng ký cả hai plugin trước khi sử dụng:
gsap.registerPlugin(ScrollTrigger, ScrollSmoother);Với WordPress, cách triển khai hiệu quả nhất là chèn wrapper trực tiếp vào cấu trúc theme. Bạn có thể dùng wp_body_open để mở wrapper ngay sau thẻ <body> và đóng wrapper tại wp_footer. Cách này đảm bảo toàn bộ nội dung trang, bao gồm cả loop, template và block editor, đều nằm trong smooth-content.
<?php
// Mở wrapper sau thẻ <body>
function add_smooth_scroll_wrapper_start() {
echo '<div id="smooth-wrapper"><div id="smooth-content">';
}
add_action('wp_body_open', 'add_smooth_scroll_wrapper_start');
// Đóng wrapper trước thẻ </body>
function add_smooth_scroll_wrapper_end() {
echo '</div><!-- #smooth-content --></div><!-- #smooth-wrapper -->';
}
add_action('wp_footer', 'add_smooth_scroll_wrapper_end', 999);Nếu theme bạn đang lập trình không có wp_body_open, ta có thể dùng Output Buffer, ưu điểm của nó là hoạt động với mọi theme, kể cả theme cũ, không cần sửa file template. Tuy nhiên, tốn tài nguyên hơn chút xíu!
<?php
function wrap_content_for_smooth_scroll($content) {
// Chỉ áp dụng cho frontend
if (is_admin() || wp_doing_ajax()) {
return $content;
}
// Bắt đầu output buffering
ob_start(function($buffer) {
// Thêm wrapper sau <body>
$buffer = preg_replace(
'/(<body[^>]*>)/i',
'$1<div id="smooth-wrapper"><div id="smooth-content">',
$buffer,
1
);
// Thêm closing tags trước </body>
$buffer = str_replace(
'</body>',
'</div><!-- #smooth-content --></div><!-- #smooth-wrapper --></body>',
$buffer
);
return $buffer;
});
return $content;
}
add_action('template_redirect', 'wrap_content_for_smooth_scroll');
// Flush buffer khi footer render
function flush_smooth_scroll_buffer() {
if (ob_get_level() > 0) {
ob_end_flush();
}
}
add_action('shutdown', 'flush_smooth_scroll_buffer', 999);Một phương án khác gọn gàng hơn là chỉnh trực tiếp trong header.php và footer.php. Chỉ cần bọc nội dung giữa hai file này bằng #smooth-wrapper và #smooth-content, bạn đã sẵn sàng áp dụng ScrollSmoother cho toàn bộ website WordPress một cách ổn định và dễ bảo trì.

Bước 3: Thêm CSS vào style.css
Bước này khá đơn giản! Tùy theo trang web bạn lập trình, chúng ta có thể tùy biến cho phù hợp với các element bạn đã làm!
/* Smooth Scroll Base Styles */
body {
overflow-x: hidden;
}
#smooth-wrapper {
overflow: hidden;
position: relative;
}
#smooth-content {
overflow: visible;
width: 100%;
}
/* Tối ưu performance */
#smooth-content {
will-change: transform;
}
/* Fix cho Admin Bar */
body.admin-bar #smooth-wrapper {
padding-top: 32px;
}
@media screen and (max-width: 782px) {
body.admin-bar #smooth-wrapper {
padding-top: 46px;
}
}
/* Fix cho header fixed (nếu có) */
header.fixed-header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
}Đoạn CSS này được dùng để hỗ trợ GSAP ScrollSmoother hoạt động mượt và đúng layout. body được ẩn scroll ngang để tránh lỗi do transform. #smooth-wrapper là khung chứa, không scroll, giúp che nội dung bị translate. #smooth-content là phần nội dung chính được GSAP điều khiển bằng transform, kèm will-change: transform để tăng hiệu năng. CSS cũng xử lý xung đột với WordPress Admin Bar bằng padding-top phù hợp cho desktop và mobile. Ngoài ra, header dùng position: fixed để không bị ảnh hưởng bởi hiệu ứng scroll mượt, đảm bảo hiển thị ổn định.
Bước 4: Cấu hình JS cho tính năng cuộn mượt
Đoạn JavaScript này thiết lập tính năng cuộn mượt bằng GSAP ScrollSmoother giúp website chuyển động mượt mà, tự nhiên và thân thiện với người dùng. Mã nguồn kiểm tra và đăng ký các plugin GSAP cần thiết, sau đó khởi tạo ScrollSmoother với tốc độ cuộn tối ưu cho cả desktop và mobile.
(function() {
'use strict';
function initSmoothScroll() {
// Kiểm tra GSAP plugins
if (typeof gsap === "undefined" ||
typeof ScrollTrigger === "undefined" ||
typeof ScrollSmoother === "undefined") {
console.error('GSAP plugins not loaded');
return;
}
// Register plugins
gsap.registerPlugin(ScrollTrigger, ScrollSmoother);
// Tạo ScrollSmoother
const smoother = ScrollSmoother.create({
wrapper: "#smooth-wrapper",
content: "#smooth-content",
smooth: 1.5,
effects: true,
smoothTouch: 0.1,
normalizeScroll: true,
ignoreMobileResize: true,
});
// Xử lý tất cả anchor links (menu, back to top, table of contents)
document.addEventListener('click', function(e) {
const target = e.target.closest('a[href^="#"]');
if (!target) return;
const href = target.getAttribute('href');
// Bỏ qua các link không phải scroll
if (!href || href === '#' || href === '#0') {
e.preventDefault();
smoother.scrollTo(0, true, "top top");
return;
}
// Tìm element target
const targetElement = document.querySelector(href);
if (targetElement) {
e.preventDefault();
// Tính offset cho header cố định (nếu có)
const header = document.querySelector('header');
const offset = header ? header.offsetHeight : 0;
smoother.scrollTo(targetElement, true, `top ${offset}px`);
}
});
// Xử lý WordPress admin bar
if (document.getElementById('wpadminbar')) {
const adminBarHeight = document.getElementById('wpadminbar').offsetHeight;
smoother.offset(0, adminBarHeight);
}
// Refresh khi resize
let resizeTimer;
window.addEventListener('resize', function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
ScrollTrigger.refresh();
}, 250);
});
// Refresh sau khi images load
window.addEventListener('load', function() {
ScrollTrigger.refresh();
});
// Support cho Elementor (nếu dùng)
if (typeof elementorFrontend !== 'undefined') {
elementorFrontend.hooks.addAction('frontend/element_ready/global', function() {
ScrollTrigger.refresh();
});
}
// Support cho WooCommerce AJAX
jQuery(document.body).on('updated_cart_totals updated_checkout', function() {
setTimeout(function() {
ScrollTrigger.refresh();
}, 100);
});
}
// Khởi tạo khi DOM ready
if (document.readyState !== 'loading') {
initSmoothScroll();
} else {
document.addEventListener('DOMContentLoaded', initSmoothScroll);
}
})();Script tự động xử lý anchor link, menu, back to top, table of contents và tính offset cho header cố định. Ngoài ra, nó hỗ trợ WordPress admin bar, Elementor, WooCommerce AJAX và refresh ScrollTrigger khi resize hoặc tải ảnh. Giải pháp này cải thiện trải nghiệm cuộn, tăng thời gian ở lại trang và hỗ trợ SEO hiệu quả.
Lưu ý: tùy theo cách bạn lập trình giao diện, chúng ta có thể tùy biến linh hoạt. Bạn cũng có thể tham khảo thêm tại tư liệu tại đây!
Kết luận
Cuộn mượt bằng GSAP là giải pháp hiệu quả để nâng trải nghiệm người dùng trên website WordPress, đặc biệt với landing page, portfolio và site thiên về thiết kế thị giác. Khi triển khai đúng — chèn wrapper #smooth-wrapper/#smooth-content, thêm CSS tối ưu và cấu hình ScrollSmoother + ScrollTrigger — bạn sẽ có cuộn mượt, ổn định, đồng bộ animation và ít ảnh hưởng tới hiệu suất.
So với Locomotive, GSAP ưu thế ở hiệu năng, độ chính xác và hệ sinh thái plugin nhất quán — nay còn thuận lợi hơn khi GSAP mở miễn phí toàn bộ plugin. Tuy nhiên, cần cân nhắc trước khi bật cho site nhiều nội dung (blog, tin tức, e‑commerce) vì người dùng ở những site này thường cần cuộn nhanh; đồng thời kiểm tra Core Web Vitals, xử lý header cố định, admin bar và refresh khi AJAX/Elementor thay đổi DOM. Thực hiện theo các bước: nạp GSAP qua CDN hoặc file host, thêm wrapper qua wp_body_open hoặc output buffer, chèn CSS, rồi khởi tạo ScrollSmoother với xử lý anchor và refresh phù hợp — bạn sẽ có tính năng cuộn mượt chuyên nghiệp, dễ bảo trì và thân thiện SEO.








