### 解决方案:单SKU选择与畅销品突出显示方案
#### 一、SKU选择逻辑
1. **单选模式强制锁定**
html
- 通过CSS隐藏原生radio控件,自定义选中样式
- 添加JS事件监听:选择新SKU时自动取消旧选择
2. **交互优化**
javascript
document.querySelectorAll('.sku-item').forEach(item => {
item.addEventListener('click', () => {
document.querySelectorAll('.sku-item').forEach(i => i.classList.remove('active'));
item.classList.add('active');
});
});
#### 二、畅销品突出策略
1. **数据标识**
json
{
"skuList": [
{"id": "A", "isBestSeller": true},
{"id": "B", "isBestSeller": false}
]
}
2. **视觉强化(示例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;
}
3. **默认选中逻辑**
javascript
// 页面加载时自动选择畅销SKU
window.addEventListener('DOMContentLoaded', () => {
const bestSeller = document.querySelector('[data-is-best-seller="true"]');
bestSeller?.click();
});
#### 三、异常处理
1. **无畅销品时**
- 隐藏标识元素
- 默认选中第一个SKU
2. **多畅销品冲突**
- 控制后端只返回一个`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');
}
> **效果说明**:通过动态边框、呼吸灯动画+角标实现视觉聚焦,默认选中逻辑降低用户决策成本,移动端保持标识可见性。