商品卡片(颜色切换 + 数量步进购物车 CSS 源码)

CSSJS 许可:自研原创

商品卡片组件源码:色板切换联动背景、数量步进器、划线原价与现价、加入购物车 Toast 反馈,纯 CSS + 原生 JS 实现,适合电商列表与商品详情侧栏。

效果演示(真实可交互)

下方为商品卡片:点击四个色板圆点,卡片背景氛围光会切换为对应颜色;数量步进器支持 1~9 之间增减;点击”加入购物车”会弹出绿色 Toast 提示并伴有价格弹跳动画,“立即购买”按钮有悬停上浮效果。

新品 🎧
YUEMIU AUDIO

粤喵无线降噪耳机 Pro

颜色
数量
1
¥899 ¥799

✅ 已加入购物车(1 件)

完整代码

HTML 结构:卡片分为图片区(含新品徽章与商品主图)和内容区(品牌、名称、色板、数量步进、价格、操作按钮):

<div class="pd-card">
  <div class="pd-img">
    <span class="pd-badge">新品</span>
    <span class="pd-emoji">🎧</span>
  </div>
  <div class="pd-body">
    <div class="pd-brand">YUEMIU AUDIO</div>
    <h3 class="pd-name">粤喵无线降噪耳机 Pro</h3>
    <div class="pd-colors">
      <button class="pd-swatch" data-color="#3a3f4b"></button>
      <button class="pd-swatch" data-color="#8d9bb5"></button>
    </div>
    <div class="pd-stepper">
      <button>−</button><b>1</b><button>+</button>
    </div>
    <span class="pd-price-old">¥899</span>
    <b class="pd-price-now">¥799</b>
    <button class="pd-btn cart">🛒 加入购物车</button>
    <p class="pd-toast">✅ 已加入购物车(1 件)</p>
  </div>
</div>

核心 CSS:色板选中态用白边 + 蓝色外环表示,Toast 通过 opacity/transform 组合出现,价格变化时有 scale 弹跳:

.pd-swatch.active { border-color: #fff; box-shadow: 0 0 0 2px #6c8cff; }
.pd-toast { opacity: 0; transform: translateY(6px); transition: opacity .3s ease, transform .3s ease; }
.pd-toast.show { opacity: 1; transform: translateY(0); }
.pd-price-now.pop { transform: scale(1.12); }

原生 JS 交互(无第三方库):

swatches.forEach(sw => {
  sw.addEventListener('click', () => {
    swatches.forEach(s => s.classList.remove('active'));
    sw.classList.add('active');
    img.style.background =
      'radial-gradient(circle at 30% 30%, ' + sw.dataset.color + '55, transparent 55%), #1a2130';
  });
});
document.getElementById('pdCart').addEventListener('click', () => {
  toast.classList.add('show');
  priceNow.classList.add('pop');
  clearTimeout(toastTimer);
  toastTimer = setTimeout(() => toast.classList.remove('show'), 1800);
});

参数说明

参数默认值说明
数量范围1 ~ 9步进器上下限,可自行调整
色板 data-color—颜色值,同时作用于背景氛围光
Toast 显示时长1800ms加入购物车提示自动消失时间
价格弹跳 scale1.12价格更新瞬间的放大倍数
商品图高度190px主图区高度,可换真实图片

兼容性与性能

常见问题

Q: 色板怎么加”已售罄”状态? 在 .pd-swatch 上加 .sold-out 类,用对角线条纹背景或降低透明度并禁用点击即可。

Q: 商品图想用真实图片? 把 .pd-emoji 换成 <img>,设置 object-fit: cover 铺满图片区,颜色切换改为叠加一层半透明色罩。

Q: 加入购物车如何做角标计数? 在购物车按钮或导航栏放一个徽章元素,每次点击时读取当前数量累加并更新文本,配合弹跳动画即可。

Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名,替换商品信息与配色即可用于真实商城。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核