-
使用 vue-cli3 创建项目,预编译语言使用的是 less
-
删除一些不需要的文件并创建自己项目中需要的目录(common、network)
-
准备项目需要的图片放在 assets 的 img 中
-
创建 base.less 初始化基本的样式,定义几个常用的变量,方便使用
-
测试项目是否有误,并把项目提交到 github https://github.com/java0088/small.git
-
创建 vue.config.js 配置路径别名
3.1. div>a>img
4.1 基本结构的封装
4.2 监听点击
4.3 props -> title
4.4 div>根据 titles v-for 遍历 div->span{{title}}
4.5 选中哪一个 tab,哪个 tab 的文字变色,并添加 border-bottom,利用 currentInde 控制
goods: {
pop: { page: 0, list: [] },
new: { page: 0, list: [] },
sell: { page: 0, list: [] }
},
-
在 hom.js 中封装 getHomeGoods(type,page)
-
在 home.vue 中的 methods 中 js 中封装 getHomeGoods(type)
-
调用 js 中封装 getHomeGoods('pop')/getHomeGoods('new')/getHomeGoods('sell')
-
获取到 res
- 展示商品列表,封装 GoodsList
- 列表中每一个商品,封装 GoodsListItem
- 注意 CSS 属性的设置即可
- 学习 BetterScroll 的使用
- 安装 better-scroll
- 封装一个独立的组件,用于作为滚动组件:Scroll
- 组件内代码的封装:
- 1.创建 BetterScroll 对象,并且传入 DOM 和选项(probeType、click、pullUpLoad)
- 2.监听 scroll 事件,该事件会返回一个 position
- 3.监听 pullingUp 事件,监听到该事件进行上拉加载更多
- 4.封装刷新的方法:this.scroll.refresh()
- 5.封装滚动的方法:this.scroll.scrollTo(x, y, time)
- 6.封装完成刷新的方法:this.scroll.finishedPullUp
- 通过 Scroll 监听上拉加载更多。
- 在 Home 中加载更多的数据。
- 请求数据完成后,调动 finishedPullUp
- 封装 BackTop 组件
- 定义一个常量,用于决定在什么数值下显示 BackTop 组件
- 监听滚动,决定 BackTop 的显示和隐藏
- 监听 BackTop 的点击,点击时,调用 scrollTo 返回顶部
-
Better-Scroll 在决定有多少区域可以滚动是,是根据 scrollHeight 属性决定的
- scrollHeight 属性是根据方 Better-Scroll 中的子组件的高度
- 但是我们首页中,刚开始在计算 scrollHeight 属性是,是没有将图片计算在内的
- 后来图片加载进来的时候有了新高度,但是 scrollHeight 属性并没有进行更新
- 所以出现了滚动问题
-
解决问题
-
监听每一张图片是否加载完成,只要有一张图片加载完成了就执行 refresh 函数
-
如何监听图片加载完成了?
- 原生的 js 监听图图片:img.onload = function(){}
- vue 中监听:@load="方法"
-
调用 scroll 的 refresh()
-
-
将 GoodsListItem 中的事件传入到 Hemo 中
- 因为涉及到非父子组件之间的通信,所以这里哦们选择了事件总线
- bus->总线
- Vue.prototype.$but = new Vue()
- this.$but.$emit('事件名')发送事件
- this.$bus.$on('事件名)监听事件
-
对于 refresh 飞猪频繁的问题,进行防抖操作
-
防抖 debounce/ 节流 throttle
-
防抖函数起作用的过程
-
如果我们直接执行 refresh 函数,呢么 refresh 函数会被执行 30 次
-
可以将 refresh 函数传入到 debounce 函数中,生成一个新的函数
-
之后在调用非常频繁的时候,就使用新生成的函数
-
而新生成的函数,并不会非常频繁的调用,如果下一次执行的非常快,那么会将上一次取消掉
deBounce(func, delay) { let timer = null return function (...args) { if (timer) clearTimeout(timer) timer = setTimeout(() => { func.apply(this, args) }, delay) } }
-
-
- keep-alive
- 离开时, 保存一个位置信息 saveY.
- 进来时, 将位置设置为原来保存的位置 saveY 信息即可.
- 注意: 最好回来时, 进行一次 refresh()### 十. 让 Home 保持原来的状态
- keep-alive
- 离开时, 保存一个位置信息 saveY.
- 进来时, 将位置设置为原来保存的位置 saveY 信息即可.
- 注意: 最好回来时, 进行一次 refresh()
1.发送请求获取轮播图数据
2.将获取的数据保存在topImages数组中
1. 在utils文件中添加一个Goods的类用于存储数据
2. 在详情页中使用Goods类创建一个实例,并把实例保存到 goods 中
1. 在utils文件中添加一个Shop的类用于存储数据
2. 在详情页中使用Shop类创建一个实例,并把实例保存到 shopInfo 中
1. 使用mixins封装相同的属性和方法