Cách Tạo Hiệu Ứng Click Chuột Cho Website Astro/Blogger

1557 từ
8 phút
Cách Tạo Hiệu Ứng Click Chuột Cho Website Astro/Blogger

Cách Tạo Hiệu Ứng Click Chuột Cho Website Astro/Blogger#

Giới thiệu#

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

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 Tạo Hiệu Ứng Click Chuột Cho Website Astro/Blogger
https://thinhem.id.vn/posts/cach-them-hieu-ung-click-vao-blog/
Tác Giả
Duy Thịnh
Đăng lúc
2025-11-28
Giấy Phép
CC BY-NC-SA 4.0

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 :)💖
Âm Nhạc
Ảnh Bìa

Âm Nhạc

Không có bài đang phát

0:00 0:00
Không có lời bài hát
Bạn bè
Bình luận mới nhất
Đang tải...
Danh Mục
Thẻ
Thống Kê Trang Web
Bài Viết
26
Danh Mục
9
Thẻ
83
Tổng Số Từ
46,711
Ngày Hoạt Động
0 ngày
Hoạt Động Gần Nhất
0 ngày trước

Mục Lục