You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
exportdefault{// 这里省略其他代码methods:{onFoodScroll({ x, y }){constdistanceY=Math.abs(Math.round(y));for(letindex=0;index<this.sectionHeight.length;index++){if(distanceY>=this.sectionHeight[index]&&distanceY<this.sectionHeight[index+1]){this.currentIndex=index;}}}}}
概述
本篇文章从应用功能和技术实现一些方面剖析此项目的开发过程以及当中采到的坑,特此写下一篇总结文章。
项目功能截图
项目技术栈
前端
vue
开发项目核心框架axios
HTTP请求模块lib-flexible
移动端屏幕适配方案better-scroll
仿IOS
效果的移动端滚动库normalize.css
第三方css
样式初始化模块es 6/7
下一代javascript
语法后端
express
搭建服务端应用核心框架开发
vue-cli
项目初始化脚手架vue-devtools
项目开发环境调试工具vscode
chrome
git
macbookpro
部署
代码托管仓库
https://github.com/konglingwen94/vue-elm-sell线上地址
123.56.124.33:5000应用功能
商品页
评论页
是否有内容的评论
商家页
bounce
效果的滑动显示应用头部
购物车
应用局部优化
功能难点
商品导航和内容的左右联动效果
效果演示
思路
由于商品导航和内容是两个独立的滚动容器,当滚动到一个目标内容块时怎么才能激活它所关联的导航项呢?我们知道导航项列表和内容列表在排列顺序上是一致的,如果能计算出内容滚动位置处在对应区间块的索引,也就得到了导航列表应该激活的目标索引,然后就可以用
Vue
数据驱动视图的思想去实现这一切。逻辑实现
找到要激活的目标导航项索引的第一步需要把商品内容的各个类别块在容器内的纵坐标位置存储起来(给之后找到激活的目标索引提供比较对象),由于列表内容时动态渲染的,所以这里需要等所有数据已经渲染完成后才能操作,下面直接看代码演示吧!
template
部分script
部分有了各个商品块的
y
坐标,下一步就需要注册容器元素的滚动事件了,在回调函数里通过找到实时滚动位置disanceY
处在sectionHeight
数组中两个相邻元素之间的位置从而就得到了待激活导航索引currentIndex
的值,具体代码实现如下添加/删除 商品到购物车
效果截图
思路
添加商品到购物车是一个多场景的功能,由于这里的购物车功能是一个多页面联动的效果,购物车商品数量的实时更改也需要同步到商品内容页和商品详情页。从功能映射到
javascript
语言数据结构层面的话,不难想到对象引用传递的特点可以作为实现此功能的底层架构思路,那就让我们去实现它吧。实现
为了统计商品的数量。首先需要给每一个商品信息对象添加一个默认值为
0
的count
属性,添加后的对象长这样由于每一个商品项都有一个添加到购物车的数量选择器功能,这样我们直接给商品数量选择器组件设计一个名为
foodInfo
的对象类型props
,这样在增加/减少商品数量的时候直接操作foodInfo
的count
属性来实现同步数据的效果。/components/food-picker.vue 组件代码
下一个目标
基于目前已经实现的功能,整个应用的数据都是以
json
文件的格式存储在服务器,服务端并没有可以用来增删改查的API
接口可供使用。下一步我计划做出管理后台和服务端API
用来管理前端页面的数据,使所有模块的数据都是可配置的,这样前端所渲染出来的数据也都是动态的,能够整合三端到一个项目也满足了当下Web
全栈开发的场景需要。总结
通过真实的开发这样一个复杂交互的应用,自己对
Vue
在实际业务场景中的使用和理解有深入了一步。深入理解了Vue
的数据驱动视图改变的思想,熟练的掌握了组件化开发项目的流程,同时也感受到所带来的便利,为自己接下来预备做的中大型项目建筑好了桥梁。支持
如果本项目对您学习有帮助,请您动手点个
star
https://github.com/konglingwen94/vue-elm-sell。也希望您继续关注我的动态https://github.com/konglingwen94,有了您的支持我会有动力开源更多有趣的项目。The text was updated successfully, but these errors were encountered: