磁性按钮
指针靠近时按钮被「吸」过去,离开时回弹。核心是 quickTo + clamp,不要每帧 new tween。
const xTo = gsap.quickTo(btn, "x", { duration: 0.4, ease: "power3" });
const yTo = gsap.quickTo(btn, "y", { duration: 0.4, ease: "power3" });
area.addEventListener("pointermove", (e) => {
const r = btn.getBoundingClientRect();
const dx = e.clientX - (r.left + r.width / 2);
const dy = e.clientY - (r.top + r.height / 2);
xTo(gsap.utils.clamp(-40, 40, dx * 0.35));
yTo(gsap.utils.clamp(-40, 40, dy * 0.35));
});
area.addEventListener("pointerleave", () => { xTo(0); yTo(0); });