淘宝购物车拖拽功能的思考与实践

图片

本文深入剖析了购物车拖拽功能的技术实现路径,在复杂业务场景下通过精细化控制、合理架构分工与细节体验打磨,实现了高效、稳定、流畅的用户交互体验。

图片

功能演示

拖拽演示

   Weex demo   

购物车场景

为什么需要拖拽?

  2.1 购物车功能 & 分组与拖拽的关系

购物车作为用户准备购买的商品集合,承担着展示+管理的功能。

上述管理操作都是针对单一商品,为了丰富对于所有购物车商品的管理形式,在 iCart 版本新增了和店铺并列的分组概念。允许用户把不同店铺内的不同商品放置在同一个区块内,提升勾选、凑单、结算的效率。

视图

  2.2 拖拽的用途 & 拖拽规则

拖拽是针对用户购物车默认结构的一种调整,支持用户自动商品和区块组合起来。当然这种组合也不是完全的任意组合,也是有一些规则限制的。

简单罗列一下大致有这些规则:商品支持移入、移出自身店铺及任意分组;分组、店铺仅支持前后排序。一个商品特例是搭配购,搭配品必须一起移动,中间不能有任何品。

  • 同一店铺内商品间可以随意排序,

  • 同一分组内的商品可以随意排序,

  • 店铺里的商品可以放进任何一个分组,

  • 凑单条必须紧跟着店铺头

  • ······

iCart 通过定义这样数据类型,用来表述用户的一次拖拽行为

{  type: reorderGroup|reorderInGroup|joinIntoGroup|removeFromGroup   // 当前操作的类型  fromBundleId:  XXXXXXX                                            // 来自哪个分组/店铺  toBundleId:    XXXXXXX                                            // 去往哪个分组/店铺  from:          XXXXXXX                                            // 操作品的cartId  to:            XXXXXXX                                            // 松手处上方的cartId}

  2.3 拖拽功能的现实映射(为了更好的理解拖拽规则)

规则描述起来较为抽象,为了更好理解店铺、分组、商品之间的关系,理解拖拽中一些限制的原因,可以使用以下场景来映射一下购物车列表。以车厢、乘客为例,定义一些概念。

  • 现实映射

概念

  • 车厢:一种是 VIP 号码车厢<店铺>;一种是普通车厢<分组>

  • 车厢门:每个车厢有两个门,分布在车厢两侧<店铺头>;有铰链连接后一车厢<分隔符>

  • 窗帘:仅 VIP 号码车厢有窗帘<凑单条>,普通车厢没有

  • 乘客:

  • 普通乘客<商品>:每人都有一张 VIP 卡,对应一个 VIP 车厢号

  • 绑定乘客<搭配购商品>:乘客 A1、A2、A3。 他们不能被分开(中间

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值