Cách Thêm Hiệu Ứng Click Chuột Cho Website Astro Và Blogger Bằng CSS JavaScript

1730 từ
9 phút
Cách Thêm Hiệu Ứng Click Chuột Cho Website Astro Và Blogger Bằng CSS JavaScript

Cách Thêm Hiệu Ứng Click Chuột Cho Website Astro Và Blogger Bằng CSS JavaScript#

Giới thiệu#

Hiệu ứng click chuột là một cách đơn giản để cải thiện trải nghiệm người dùng và làm website trở nên sinh động hơn. Với Astro và Blogger, bạn có thể dễ dàng thêm các hiệu ứng tương tác bằng CSS và JavaScript mà không cần sử dụng thư viện phức tạp.

Bài viết này hướng dẫn cách tạo hiệu ứng click chuột, hiệu ứng con trỏ và tùy chỉnh animation cho blog cá nhân hoặc website công nghệ.

Tạo hiệu ứng click chuột là một trong những cách đơn giản nhưng hiệu quả để tăng cường tính tương tác cho website. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách tạo hiệu ứng click chuột cho website xây dựng trên Astro hoặc Blogger.

Chuẩn Bị Trước Khi Tạo Hiệu Ứng#

Trước khi bắt đầu, bạn cần đảm bảo rằng website của bạn đã được thiết lập đầy đủ. Đảm bảo rằng bạn đã sử dụng Astro hoặc Blogger và có thể chỉnh sửa mã HTML hoặc CSS của trang.

Xác Định Loại Hiệu Ứng Bạn Muốn#

Có rất nhiều loại hiệu ứng click chuột mà bạn có thể tạo, từ những hiệu ứng đơn giản như thay đổi màu sắc cho đến các hiệu ứng phức tạp hơn như tạo hiệu ứng bùng nổ. Bạn cần xác định rõ loại hiệu ứng mà bạn muốn áp dụng trước khi đi vào chi tiết.

Cách Tạo Hiệu Ứng Click Đơn Giản Cho Astro#

Để tạo hiệu ứng click chuột đơn giản cho website Astro, bạn có thể sử dụng một đoạn mã CSS hoặc JavaScript. Ví dụ dưới đây sẽ thay đổi màu nền của một phần tử khi người dùng click vào nó.

Trong Astro, khái niệm Layout rất quan trọng. Bất kể bạn thiết kế Layout như thế nào, nói chung đều sẽ sử dụng <slot /> để chèn nội dung, và thông thường toàn bộ giao diện cuối cùng sẽ được bao bọc trong <BaseLayout />.

Do đó, nếu bạn muốn thêm một số hiệu ứng toàn cục, bạn có thể chỉnh sửa tệp src/layouts/BaseLayout.astro.

Đối với hiệu ứng con trỏ, bạn có thể thêm vào:

...
<body class='flex justify-center bg-background'>
<style define:vars={{ highlightColor }}>
...
/* Kiểu hiệu ứng hạt khi nhấp chuột */
:global(.click-particle) {
position: fixed;
pointer-events: none;
width: 14px;
height: 14px;
border-radius: 50%;
z-index: 9999;
animation: particle-explosion 1.1s ease-out forwards;
box-shadow: 0 0 6px rgba(255, 255, 255, 0.8);
}
/* Hiệu ứng hạt trong chủ đề tối */
:global(.dark .click-particle) {
box-shadow: 0 0 8px rgba(255, 255, 255, 0.4);
}
@keyframes particle-explosion {
0% {
opacity: 1;
transform: scale(0.4) translate(0, 0);
}
15% {
opacity: 1;
transform: scale(1.3) translate(var(--dx), var(--dy));
}
60% {
opacity: 0.8;
transform: scale(1) translate(calc(var(--dx) * 2.5), calc(var(--dy) * 2.5));
}
100% {
opacity: 0;
transform: scale(0.3) translate(calc(var(--dx) * 3.5), calc(var(--dy) * 3.5));
}
}
/* Màu hạt cho chủ đề sáng */
:global(.click-particle.color-1) {
background: #ffc1cc;
background: radial-gradient(circle, #ffb3ba 0%, #ffc1cc 100%);
}
:global(.click-particle.color-2) {
background: #bde4ff;
background: radial-gradient(circle, #a8d8ff 0%, #bde4ff 100%);
}
:global(.click-particle.color-3) {
background: #fff2a8;
background: radial-gradient(circle, #ffe66d 0%, #fff2a8 100%);
}
:global(.click-particle.color-4) {
background: #e6ccff;
background: radial-gradient(circle, #d4a5ff 0%, #e6ccff 100%);
}
:global(.click-particle.color-5) {
background: #c1ffc1;
background: radial-gradient(circle, #a8e6a8 0%, #c1ffc1 100%);
}
:global(.click-particle.color-6) {
background: #ffd4a3;
background: radial-gradient(circle, #ffcc99 0%, #ffd4a3 100%);
}
:global(.click-particle.color-7) {
background: #c4e8ff;
background: radial-gradient(circle, #b3deff 0%, #c4e8ff 100%);
}
:global(.click-particle.color-8) {
background: #f8d7da;
background: radial-gradient(circle, #f5c2c7 0%, #f8d7da 100%);
}
:global(.click-particle.color-9) {
background: #d1f2d1;
background: radial-gradient(circle, #c3e6c3 0%, #d1f2d1 100%);
}
:global(.click-particle.color-10) {
background: #fff0d4;
background: radial-gradient(circle, #ffe8b3 0%, #fff0d4 100%);
}
/* Màu hạt cho chủ đề tối - đậm và rực rỡ hơn */
:global(.dark .click-particle.color-1) {
background: #ff6b8a;
background: radial-gradient(circle, #ff4757 0%, #ff6b8a 100%);
}
:global(.dark .click-particle.color-2) {
background: #4fc3f7;
background: radial-gradient(circle, #29b6f6 0%, #4fc3f7 100%);
}
:global(.dark .click-particle.color-3) {
background: #ffd54f;
background: radial-gradient(circle, #ffca28 0%, #ffd54f 100%);
}
:global(.dark .click-particle.color-4) {
background: #ba68c8;
background: radial-gradient(circle, #ab47bc 0%, #ba68c8 100%);
}
:global(.dark .click-particle.color-5) {
background: #81c784;
background: radial-gradient(circle, #66bb6a 0%, #81c784 100%);
}
:global(.dark .click-particle.color-6) {
background: #ffb74d;
background: radial-gradient(circle, #ffa726 0%, #ffb74d 100%);
}
:global(.dark .click-particle.color-7) {
background: #64b5f6;
background: radial-gradient(circle, #42a5f5 0%, #64b5f6 100%);
}
:global(.dark .click-particle.color-8) {
background: #f48fb1;
background: radial-gradient(circle, #f06292 0%, #f48fb1 100%);
}
:global(.dark .click-particle.color-9) {
background: #a5d6a7;
background: radial-gradient(circle, #81c784 0%, #a5d6a7 100%);
}
:global(.dark .click-particle.color-10) {
background: #ffe082;
background: radial-gradient(circle, #ffd54f 0%, #ffe082 100%);
}
</style>
...
<script>
document.addEventListener('DOMContentLoaded', () => {
function createParticle(
x: number,
y: number,
angle: number,
distance: number,
colorIndex: number
) {
const particle = document.createElement('div')
particle.className = `click-particle color-${colorIndex}`
const dx = Math.cos(angle) * distance
const dy = Math.sin(angle) * distance
particle.style.setProperty('--dx', dx + 'px')
particle.style.setProperty('--dy', dy + 'px')
particle.style.left = x + 'px'
particle.style.top = y + 'px'
const size = Math.random() * 6 + 8
particle.style.width = size + 'px'
particle.style.height = size + 'px'
document.body.appendChild(particle)
setTimeout(() => {
if (particle.parentNode) {
particle.parentNode.removeChild(particle)
}
}, 1100)
}
document.addEventListener('click', (e) => {
const particleCount = 10
const baseDistance = 18
for (let i = 0; i < particleCount; i++) {
const angle = ((Math.PI * 2) / particleCount) * i
const distance = baseDistance + Math.random() * 8
const colorIndex = (i % 10) + 1
setTimeout(() => {
createParticle(e.clientX, e.clientY, angle, distance, colorIndex)
}, i * 12)
}
for (let i = 0; i < 4; i++) {
const randomAngle = Math.random() * Math.PI * 2
const randomDistance = baseDistance + Math.random() * 10
const colorIndex = Math.floor(Math.random() * 10) + 1
setTimeout(
() => {
createParticle(e.clientX, e.clientY, randomAngle, randomDistance, colorIndex)
},
(particleCount + i) * 12
)
}
})
})
</script>
</body>
</html>

Tạo Hiệu Ứng Click Cho Blogger#

Blogger cũng hỗ trợ việc thêm mã JavaScript để tạo hiệu ứng tương tác. Đoạn mã dưới đây giúp thay đổi màu nền của một phần tử khi người dùng click vào đó.

  1. Vào giao diện Blogger Blogger > Bố cục > Thêm widget HTML/Javascript (hoặc chỉnh sửa widget có sẵn)
  2. Copy code thêm vào widget
<!-- -->
<style>
.click-particle {
position: fixed;
pointer-events: none;
width: 14px;
height: 14px;
border-radius: 50%;
z-index: 9999;
animation: particle-explosion 1.1s ease-out forwards;
box-shadow: 0 0 6px rgba(255, 255, 255, 0.8);
}
.dark .click-particle {
box-shadow: 0 0 8px rgba(255, 255, 255, 0.4);
}
@keyframes particle-explosion {
0% {
opacity: 1;
transform: scale(0.4) translate(0, 0);
}
15% {
opacity: 1;
transform: scale(1.3) translate(var(--dx), var(--dy));
}
60% {
opacity: 0.8;
transform: scale(1) translate(calc(var(--dx) * 2.5), calc(var(--dy) * 2.5));
}
100% {
opacity: 0;
transform: scale(0.3) translate(calc(var(--dx) * 3.5), calc(var(--dy) * 3.5));
}
}
.click-particle.color-1 {
background: #ffc1cc;
background: radial-gradient(circle, #ffb3ba 0%, #ffc1cc 100%);
}
.click-particle.color-2 {
background: #bde4ff;
background: radial-gradient(circle, #a8d8ff 0%, #bde4ff 100%);
}
.click-particle.color-3 {
background: #fff2a8;
background: radial-gradient(circle, #ffe66d 0%, #fff2a8 100%);
}
.click-particle.color-4 {
background: #e6ccff;
background: radial-gradient(circle, #d4a5ff 0%, #e6ccff 100%);
}
.click-particle.color-5 {
background: #c1ffc1;
background: radial-gradient(circle, #a8e6a8 0%, #c1ffc1 100%);
}
.click-particle.color-6 {
background: #ffd4a3;
background: radial-gradient(circle, #ffcc99 0%, #ffd4a3 100%);
}
.click-particle.color-7 {
background: #c4e8ff;
background: radial-gradient(circle, #b3deff 0%, #c4e8ff 100%);
}
.click-particle.color-8 {
background: #f8d7da;
background: radial-gradient(circle, #f5c2c7 0%, #f8d7da 100%);
}
.click-particle.color-9 {
background: #d1f2d1;
background: radial-gradient(circle, #c3e6c3 0%, #d1f2d1 100%);
}
.click-particle.color-10 {
background: #fff0d4;
background: radial-gradient(circle, #ffe8b3 0%, #fff0d4 100%);
}
.dark .click-particle.color-1 {
background: #ff6b8a;
background: radial-gradient(circle, #ff4757 0%, #ff6b8a 100%);
}
.dark .click-particle.color-2 {
background: #4fc3f7;
background: radial-gradient(circle, #29b6f6 0%, #4fc3f7 100%);
}
.dark .click-particle.color-3 {
background: #ffd54f;
background: radial-gradient(circle, #ffca28 0%, #ffd54f 100%);
}
.dark .click-particle.color-4 {
background: #ba68c8;
background: radial-gradient(circle, #ab47bc 0%, #ba68c8 100%);
}
.dark .click-particle.color-5 {
background: #81c784;
background: radial-gradient(circle, #66bb6a 0%, #81c784 100%);
}
.dark .click-particle.color-6 {
background: #ffb74d;
background: radial-gradient(circle, #ffa726 0%, #ffb74d 100%);
}
.dark .click-particle.color-7 {
background: #64b5f6;
background: radial-gradient(circle, #42a5f5 0%, #64b5f6 100%);
}
.dark .click-particle.color-8 {
background: #f48fb1;
background: radial-gradient(circle, #f06292 0%, #f48fb1 100%);
}
.dark .click-particle.color-9 {
background: #a5d6a7;
background: radial-gradient(circle, #81c784 0%, #a5d6a7 100%);
}
.dark .click-particle.color-10 {
background: #ffe082;
background: radial-gradient(circle, #ffd54f 0%, #ffe082 100%);
}
</style>
<script>//<![CDATA[
document.addEventListener('DOMContentLoaded', () => {
function createParticle(
x,
y,
angle,
distance,
colorIndex
) {
const particle = document.createElement('div')
particle.className = `click-particle color-${colorIndex}`
const dx = Math.cos(angle) * distance
const dy = Math.sin(angle) * distance
particle.style.setProperty('--dx', dx + 'px')
particle.style.setProperty('--dy', dy + 'px')
particle.style.left = x + 'px'
particle.style.top = y + 'px'
const size = Math.random() * 6 + 8
particle.style.width = size + 'px'
particle.style.height = size + 'px'
document.body.appendChild(particle)
setTimeout(() => {
if (particle.parentNode) {
particle.parentNode.removeChild(particle)
}
}, 1100)
}
document.addEventListener('click', (e) => {
const particleCount = 10
const baseDistance = 18
for (let i = 0; i < particleCount; i++) {
const angle = ((Math.PI * 2) / particleCount) * i
const distance = baseDistance + Math.random() * 8
const colorIndex = (i % 10) + 1
setTimeout(() => {
createParticle(e.clientX, e.clientY, angle, distance, colorIndex)
}, i * 12)
}
for (let i = 0; i < 4; i++) {
const randomAngle = Math.random() * Math.PI * 2
const randomDistance = baseDistance + Math.random() * 10
const colorIndex = Math.floor(Math.random() * 10) + 1
setTimeout(
() => {
createParticle(e.clientX, e.clientY, randomAngle, randomDistance, colorIndex)
},
(particleCount + i) * 12
)
}
})
})
//]]></script>

Tối Ưu Hóa Hiệu Ứng Click#

Để đảm bảo rằng hiệu ứng click của bạn không gây phiền toái cho người dùng, hãy đảm bảo rằng bạn chỉ sử dụng hiệu ứng này cho những phần tử quan trọng và có tính tương tác cao, chẳng hạn như các nút bấm, liên kết, hoặc các phần tử được nhấn mạnh.

  • Tăng/giảm particleCount để nhiều hạt hơn
  • Đổi màu trong phần .color-X
  • Giảm thời gian để hiệu ứng nhanh hơn

Câu hỏi thường gặp về hiệu ứng click chuột cho website#

Có thể thêm hiệu ứng click chuột cho Astro không?#

Có. Astro cho phép thêm hiệu ứng toàn cục thông qua Layout, CSS và JavaScript.

Blogger có hỗ trợ hiệu ứng click chuột không?#

Có. Bạn có thể chèn CSS và JavaScript trực tiếp vào giao diện Blogger để tạo hiệu ứng.

Hiệu ứng click chuột có làm chậm website không?#

Nếu sử dụng mã JavaScript và CSS tối ưu, hiệu ứng có thể hoạt động nhẹ và không ảnh hưởng đáng kể đến hiệu suất.

Kết Luận#

Tạo hiệu ứng click chuột cho website Astro hoặc Blogger là một cách tuyệt vời để làm nổi bật các yếu tố quan trọng và cải thiện trải nghiệm người dùng. Hãy thử áp dụng các đoạn mã trên và tùy chỉnh để tạo ra các hiệu ứng thú vị cho website của bạn.

Ủng hộ & Chia sẻ

Nếu bài viết này giúp ích cho bạn, hãy chia sẻ hoặc ủng hộ nhé!

Tài trợ
Cách Thêm Hiệu Ứng Click Chuột Cho Website Astro Và Blogger Bằng CSS JavaScript
https://thinhem.id.vn/posts/cach-them-hieu-ung-click-vao-blog/
Tác giả
Duy Thịnh
Đăng ngày
2025-11-28
Bản quyền
CC BY-NC-SA 4.0

Mục bình luận

Profile Image of the Author
Duy Thịnh
Hello, I'm Thinhem.
Chào mừng đến với blog của tôi 🎉
Đây là nơi mình sẽ chia sẻ những album, cách sắp xếp và tóm tắt tài liệu hàng ngày và tâm sự của mình, hy vọng chúng sẽ hữu ích cho các bạn :)💖
Bạn bè
Danh mục
Thẻ
Khoảnh khắc mới nhất
Thống kê trang web
Bài viết
27
Danh mục
11
Thẻ
86
Tổng số từ
60,289
Số ngày hoạt động
0 ngày
Hoạt động gần nhất
0 ngày trước
Thông tin trang
Nền tảng build
Cloudflare Pages
Phiên bản Blog
Thinhem v6.14.5
Giấy phép
CC BY-NC-SA 4.0