8pt

Magnetic Button

磁吸按钮•按钮
介绍

按钮在感应区内被指针吸引,文字比按钮多走一段,离开后弹簧回位。

纯 HTML、CSS 与少量原生 JS,没有框架依赖。复制提示词交给 Claude Code、Cursor、Trae 或 Codex,模型会把 Magnetic Button 加进你的项目并换成你的配色。

适用场景

注册、下单、提交表单和落地页的行动号召按钮,需要一个让人愿意点的主操作时。

安装

订阅 Builder 后,用 8pt CLI 装进项目,或在已接入 8pt MCP 的编辑器里直接调用。

$ npm i -g @8pt-dev/cli && 8pt add magnetic-button
mcp › 使用 8pt MCP 调用 get_component("magnetic-button")

代码

Magnetic Button 的源码,动效只用 transform 与 opacity,并尊重减少动态效果设置。

<div class="x-mag">
  <button class="x-mag__btn" type="button"><span>拖近一点</span></button>
</div>
.x-mag{display:grid;place-items:center;width:100%;height:100%;min-height:200px}
.x-mag__btn{width:132px;height:132px;border-radius:50%;border:1px solid var(--d-line,rgba(255,255,255,.14));background:var(--d-card,#101016);color:var(--d-fg,#fff);font:600 14px/1 var(--d-font,system-ui,sans-serif);cursor:pointer;will-change:transform;box-shadow:0 30px 60px -30px var(--d-accent,#4D74FF)}
.x-mag__btn span{display:inline-block;will-change:transform}
const init = (root) => {
  const zone = root.querySelector('.x-mag'), btn = zone.querySelector('button'), label = btn.querySelector('span');
  let tx = 0, ty = 0, x = 0, y = 0, raf = 0;
  const tick = () => {
    x += (tx - x) * 0.16; y += (ty - y) * 0.16;
    btn.style.transform = `translate(${x}px, ${y}px)`; label.style.transform = `translate(${x * 0.4}px, ${y * 0.4}px)`;
    raf = Math.abs(tx - x) + Math.abs(ty - y) > 0.1 ? requestAnimationFrame(tick) : 0;
  };
  const kick = () => { if (!raf) raf = requestAnimationFrame(tick); };
  zone.addEventListener('pointermove', e => {
    const r = btn.getBoundingClientRect(); tx = (e.clientX - r.left - r.width / 2) * 0.35; ty = (e.clientY - r.top - r.height / 2) * 0.35; kick();
  });
…
订阅 Builder 查看完整源码。查看价格

更多按钮组件

查看全部

Shimmer Button

更多组件

查看全部

AI Prompt Composer

Film Strip Carousel

Auto Tab Showcase

Media Bento Grid

Agent Chat Window

Model Pill Marquee

Director Art Cards

Mac File Window

继续探索