一、场景分析
在一些如商城、点餐小程序中实现购物车抛物线效果可以提升界面趣味性增加小程序用户体验。
二、效果预览
效果图压缩后速度有点快,请下载代码片段预览
三、实现原理
当用户点击物品时记录当前触摸点,根据触摸点计算抛物线运动的顶点位置,通过触摸点、顶点、购物车的位置计算出抛物线运动轨迹,然后控制 icon 运动。
- 计算购物车在当前手机内的位置
/** 设置购物车的坐标位置 **/
wx.getSystemInfo({
success: (res) => {
let busPos = {}
// x y 坐标分别取屏幕百分之八十的位置
busPos['x'] = res.windowWidth * 0.8
busPos['y'] = res.windowHeight * 0.8
this.setData({
busPos
})
}
})
-
商品点击事件的处理
点击物品后记录点击的位置,然后根据点击位置计算出抛物线的顶点位置,计算方式为点击位置的上方+150,右边+150(需要根据点击位置是否在购物左边还是右边进行判断)。 -
根据点击,顶点,购物车三个位置计算出抛物线运动轨迹
- 以3个控制点为例,点A、B、C、AB 上设置点 D、BC 上设置点 E、DE 连线上设置点 F,则最终的贝塞尔曲线是点F的坐标轨迹;
- 计算相邻控制点间距;
- 根据完成时间,计算每次执行时 D 在AB方向上移动的距离,E 在 BC 方向上移动的距离;
- 时间每递增 100ms,则 D、E 在指定方向上发生位移,F 在 DE 上的位移则可通过 AD/AB = DF/DE 得出;
- 根据 DE 的正余弦值和 DE 的值计算出F的坐标。
-
开启定时器,依次按照贝塞尔曲线位置做动画位移
使用定时器将抛物线运动轨迹做动画位移。 -
定时器执行完动画后将购物车角标+1
-
老规矩,结尾放代码片段
https://developers.weixin.qq.com/s/PnYfitmG7Hxv
看了大佬的代码 体验了效果后 如图2 一点小小的建议
源代码中如果用户在抛物线动画未结束时 点击另一件商品 currentImg会被替换
作者绝对是个技术派,点个赞。我刚来,感觉看你们的文章跟天书样,想努力但是找不到方向。。
购物车是 tabBar 怎么处理?
不知道为啥有点些许卡顿
楼主,我的购物车是在左边,如何进行优化啊
我的购物车在左侧,如何设置添加购物车效果往左侧抛物线跌落?
666
大哥,我购物车在右边,计算出来的效果不太好看,
很不错,来学习学习。这里好像有点问题,能优化下就更好啦
大佬 求看看我发表的那个帖子 能帮忙看看有什么好方法吗