回答于 2025-04-29
解决方案:单SKU选择与畅销品突出显示方案
一、SKU选择逻辑
-
单选模式强制锁定 html
- 通过CSS隐藏原生radio控件,自定义选中样式
- 添加JS事件监听:选择新SKU时自动取消旧选择
-
交互优化 javascript document.querySelectorAll('.sku-item').forEach(item => { item.addEventListener('click', () => { document.querySelectorAll('.sku-item').forEach(i => i.classList.remove('active')); item.classList.add('active'); }); });
二、畅销品突出策略
-
数据标识 json { "skuList": [ {"id": "A", "isBestSeller": true}, {"id": "B", "isBestSeller": false} ] }
-
视觉强化(示例CSS) css .best-seller { position: relative; border: 2px solid #ff6b6b; animation: pulse 1.5s infinite; } .best-seller::after { content: "🔥 畅销款"; position: absolute; top: -10px; right: -10px; background: #ff6b6b; color: white; padding: 2px 8px; border-radius: 12px; font-size: 12px; }
-
默认选中逻辑 javascript // 页面加载时自动选择畅销SKU window.addEventListener('DOMContentLoaded', () => { const bestSeller = document.querySelector('[data-is-best-seller="true"]'); bestSeller?.click(); });
三、异常处理
-
无畅销品时
- 隐藏标识元素
- 默认选中第一个SKU
-
多畅销品冲突
- 控制后端只返回一个
isBestSeller:true - 前端取第一个匹配项
- 控制后端只返回一个
四、移动端优化
css @media (max-width: 768px) { .sku-item { padding: 12px; font-size: 14px; } .best-seller::after { font-size: 10px; right: -5px; } }
五、数据验证
javascript // 提交时验证SKU选择 function validateSKU() { return !!document.querySelector('input[name="sku"]:checked'); }
效果说明:通过动态边框、呼吸灯动画+角标实现视觉聚焦,默认选中逻辑降低用户决策成本,移动端保持标识可见性。