SnippetUI

Tombol Magnetik

Komponen tombol magnetis interaktif yang mengikuti kursor mouse dengan mulus seolah-olah tertarik secara magnetis.

HTMLCSSJavaScript

Pratinjau

Ini memberikan interaksi unik di mana tombol bergerak seolah-olah ditarik oleh kursor mouse. Animasi akan otomatis diputar segera setelah pengguna memamerkannya.

Kasus penggunaan dan fitur

  • Interaksi mikro berdampak tinggi: Tidak seperti animasi jalur umum dan efek cahaya, komponen ini menggabungkan konsep “kekuatan magnet” pada pelacakan mouse.

  • Sempurna untuk portofolio/situs kreatif: Tingkatkan kekuatan distribusi Anda dengan memberikan kejutan kecil kepada pengunjung Anda.

  • Efek peningkatan RKT: Dengan menerapkan ini pada tombol CTA (Ajakan Bertindak), diperkirakan memiliki efek menurunkan hambatan psikologis untuk menampilkan dan mengklik.

  • Hanya dapat dicapai dengan JavaScript: Tidak diperlukan perpustakaan. Implementasi sederhana yang secara dinamis memperbarui transform pada acara mousemove.

Poin desain dan UX

  1. Umpan Balik Berbasis Fisika: Komunikasikan secara intuitif bahwa tombol adalah elemen interaktif dengan menimbulkan risiko mengenai kursor.

  2. cubic-bezier(0.23, 1, 0.32, 1): Dengan menggunakan kurva tipe easy-out, pergerakan tombol akan tampak mulus dan kencang.

  3. Efek kilau: Dapatkan efek cahaya mengalir dengan elemen semu ::before.

  4. Aksesibilitas: mouseleave kembali ke posisi semula dengan andal, sehingga tidak ada masalah dengan pengoperasian keyboard atau perangkat sentuh.

Cara menyesuaikan

Anda dapat mengatur kekuatan gaya magnet dengan mengubah nilai variabel strength:


// 弱め(微妙な動き)

var strength = 0.15;



// 標準

// var strength = 0.35;



// 強め(大きく動く)

// var strength = 0.5;

Untuk mengubah warna tombol, cukup ubah CSS background:


/* サンセット */

background: linear-gradient(135deg, #f97316, #ef4444);



/* オーシャン */

background: linear-gradient(135deg, #06b6d4, #3b82f6);



/* エメラルド */

background: linear-gradient(135deg, #10b981, #059669);

Kode implementasi

<button class="magnetic-btn" id="magnetic-btn">

HOVER ME

<span class="magnetic-btn-arrow">→</span>

</button>



<style>
.magnetic-btn {

position: relative;

padding: 18px 48px;

font-size: 1.1rem;

font-weight: 700;

letter-spacing: 0.1em;

color: white;

background: linear-gradient(135deg, #6366f1, #8b5cf6);

border: none;

border-radius: 50px;

cursor: pointer;

outline: none;

box-shadow: 0 20px 60px rgba(99,102,241,0.4);

transition: transform 0.15s cubic-bezier(0.23,1,0.32,1), box-shadow 0.3s ease;

display: inline-flex;

align-items: center;

gap: 10px;

overflow: hidden;

}

.magnetic-btn::before {

content: '';

position: absolute;

top: -50%;

left: -60%;

width: 40%;

height: 200%;

background: rgba(255,255,255,0.15);

transform: skewX(-20deg);

transition: left 0.5s ease;

pointer-events: none;

}

.magnetic-btn:hover::before { left: 120%; }

.magnetic-btn:hover {

box-shadow: 0 30px 80px rgba(139,92,246,0.6), 0 20px 60px rgba(99,102,241,0.4);

}

.magnetic-btn-arrow {

display: inline-flex;

transition: transform 0.3s ease;

pointer-events: none;

}

.magnetic-btn:hover .magnetic-btn-arrow { transform: translateX(4px); }
</style>



<script>

(function() {

var btn = document.getElementById('magnetic-btn');

if (!btn) return;

var strength = 0.35;

btn.addEventListener('mousemove', function(e) {

  var rect = this.getBoundingClientRect();

  var dx = e.clientX - (rect.left + rect.width / 2);

  var dy = e.clientY - (rect.top + rect.height / 2);

  this.style.transform = 'translate(' + (dx*strength) + 'px,' + (dy*strength) + 'px) scale(1.08)';

});

btn.addEventListener('mouseleave', function() {

  this.style.transform = '';

  this.style.boxShadow = '';

});

})();

</script>

Status kompatibilitas peramban

| Peramban | Status kompatibilitas |

|--------|-------|

| Chrome 60+ | ✅ Sepenuhnya kompatibel |

| Firefox 55+ | ✅ Sepenuhnya kompatibel |

| Safari 10.1+ | ✅ Sepenuhnya kompatibel |

| Tepi 79+ | ✅ Sepenuhnya kompatibel |

Event mousemove tidak diaktifkan pada perangkat sentuh, sehingga efek magnet tidak ditampilkan, namun tombol dapat diklik seperti biasa.