Vue项目supermall仿蘑菇街详解(一)首页开发详解

前言

本文章是对coderwhy vue项目仿蘑菇街做的一个步骤详解,此文章包含个人详解及主要步骤,由于代码较多较杂,就不放这了,代码大部分就用截图了


一、安装及创建

安装node,vue-cli,创建一个vue-cli3的项目

(我自己用的是Cli-4)


 二、项目开发

1.目录结构

按下图创建好文件夹

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第1张图片

 2.设置CSS初始化和全局样式

  •  normalize.css (自行去github下载)
  •  base.css

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第2张图片

App.vue引用base.css

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第3张图片

 3.vue.config和editorconfig

  • 新建vue.config.js
module.exports = {
  configureWebpack: {
    resolve: {
      alias: {
        'assets': '@/assets',
        'common': '@/common',
        'components': '@/components',
        'network': '@/network',
        'views': '@/views',
      }
    }
  }
}

报错及解决方法

按照上述配置成功后,应特别注意使用,若还是报错These dependencies were not found:

则应该重启项目再次运行之后就能成功

  •  editorconfig 对代码风格进行统一,直接复制,如果你是项目组长的话,最好是有这个文件

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第4张图片

 4.TabBar引入和项目模块划分

 1) tabbar

  • 把day7的  tabbar 文件夹复制到项目的compontents->    common  文件夹
  •  把day7的 mainTabBar 文件夹复制到项目的compontents-> content 文件夹

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第5张图片

  •  改一下MainTabBar里面的路径

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第6张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第7张图片

  •  在App.vue使用MainTabBar组件

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第8张图片

 2)项目模块划分:tabbar -> 路由映射关系

  • 复制day7的tabbar下,views文件夹里面的东西到项目的views文件夹下

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第9张图片Vue项目supermall仿蘑菇街详解(一)首页开发详解_第10张图片 

  •  安装vue-router,复制 day7的router->index.js文件夹到项目里,在App.vue里面使用router-view

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第11张图片

目前项目效果

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第12张图片

5.小图标的修改以及路径问题

  • 把favicon.ico图标替换掉

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第13张图片


三、首页开发

1.首页导航栏的封装与使用

  •  新建文件夹文件

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第14张图片

// NavBar.vue





// Home.vue






效果

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第15张图片

  •  修改一下样式

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第16张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第17张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第18张图片


 2.请求首页的多个数据

  •  复制day9的request.js文件到项目的network文件夹,删掉其中不必要的东西

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第19张图片

  •  安装axios

  •  network文件夹下新建home.js文件,用来封装首页的所有网络请求

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第20张图片

  • 在首页App.vue使用 

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第21张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第22张图片


 2.轮播图的展示

  • 从Day9的预习代码复制components->common->swiper文件夹 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第23张图片

  •  引用

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第24张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第25张图片

  •  这样写Swiper又是一坨在Home.vue,把它封装一下,在home文件夹下新建文件夹childComps,再创建文件HomeSwiper.vue
// HommSwiper.vue





Vue项目supermall仿蘑菇街详解(一)首页开发详解_第26张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第27张图片


3.推荐信息的展示

  • homeComps下新建文件 recommendView.vue 




 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第28张图片

目前首页效果

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第29张图片


4.FeatureView的封装 

  • childComps下新建文件FeatureView.vue文件 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第30张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第31张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第32张图片

  • 添加以下样式,使home-nav固定 

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第33张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第34张图片


5.TabControl的封装

  •  content新建文件TabControl,因为首页的tabcontrol与分类的只是文字不同,所以这里不用插槽,直接用props传值

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第35张图片Vue项目supermall仿蘑菇街详解(一)首页开发详解_第36张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第37张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第38张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第39张图片

  •  修改一下样式

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第40张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第41张图片

  • 目前效果 

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第42张图片

  •  实现点击添加样式功能

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第43张图片

  • 实现tabControl吸顶(停留效果)

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第44张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第45张图片


6.保存商品的数据结构设计

 goods: (流行/新款/精选)

goods: {
  'pop': {page: 5, list: [150]},
  'news': {page: 2, list: [60]},
  'sell': {page: 1, list: [30]}
}


7.首页数据的请求和保存

  • 默认请求三个的第一页数据,其他的等点击对应选项且下拉时再加载

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第46张图片

  • goods里面的news要改为new 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第47张图片

  •  此时created里面的代码有点多,一般created里面只做调用,把这些函数封装到methods里面

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第48张图片

  •  这样写的话,getHomeGoods也能动态传类型

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第49张图片

  • page的1不能写死,不然每次调用都是请求第一页的数据,应该是goods里面的page+1 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第50张图片

  •  保存商品数据

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第51张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第52张图片


8.首页商品数据的展示

  •  content文件夹新建goods文件夹,新建GoodsList.vueGoodsListItem.vue
  •  用props把对应type的goods传给GoodsList.vue
  • 用props把对应的goods里面的每一个商品item传给GoodsListItem.vue

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第53张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第54张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第55张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第56张图片

  • 把数据全部展示出来

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第57张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第58张图片

  • 添加一下样式,直接从Day9预习代码里面复制goodsListItem.vue的css代码,目前效果如下

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第59张图片

  • 让商品一行两个均等分显示 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第60张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第61张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第62张图片

  •  小bug:tabControl被覆盖了,加个z-index就行

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第63张图片Vue项目supermall仿蘑菇街详解(一)首页开发详解_第64张图片


9.TabControl切换商品 

  •  之前点击是在tabControl,要把index传到home里面

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第65张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第66张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第67张图片

 效果

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第68张图片Vue项目supermall仿蘑菇街详解(一)首页开发详解_第69张图片

  • 封装一下 

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第70张图片


10.Better-Scroll的安装和使用 

  •  之前用的都是浏览器原生的滚动,不够顺滑,使用better-scroll做滚动
  •  安装

  • 在Category.vue组件做better-scroll的使用演示
  • 实现局部滚动 
    • 浏览器原生方法,会比较卡顿
      • Vue项目supermall仿蘑菇街详解(一)首页开发详解_第71张图片
    • better-scroll,丝滑,有回弹效果

     Vue项目supermall仿蘑菇街详解(一)首页开发详解_第72张图片

    Vue项目supermall仿蘑菇街详解(一)首页开发详解_第73张图片

  • html里面基本使用 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第74张图片

  •  检测滚动位置

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第75张图片


11.BScroll的封装和使用 

  • better-scroll的使用要求 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第76张图片

  • 滚动条的区域就在wrapper,而我们的内容content则要大于等于滚动区域wrapper的高度,二者均需要指定高度
  • 安装better-scroll,common新建文件夹scroll,新建文件Scroll.vue

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第77张图片

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第78张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第79张图片

ref如果是绑定在组件中的, 那么通过this.$refs.refname获取到的是一个组件对象.

ref如果是绑定在普通的元素中, 那么通过this.$refs.refname获取到的是一个元素对象.

  •  效果,在300px的范围内实现了局部滚动

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第80张图片

  • 确定中间的高度 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第81张图片

  •  方案1

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第82张图片

  • 方案2 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第83张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第84张图片


12.Backtop组件的封装和使用 

  •  文件夹content下新建backTop文件夹,文件BackTop.vue

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第85张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第86张图片

  • 实现点击回到最顶部 ,需要拿到scroll对象

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第87张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第88张图片


13.BackTop的显示和隐藏 

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第89张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第90张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第91张图片


 14.完成上拉加载更多

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第92张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第93张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第94张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第95张图片

  • 小bug,下拉之后滚动不了 ,这个后面再一起解决

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第96张图片


15.滚动区域的Bug分析和解决

  •  把上面关于上拉加载更多的代码删掉

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第97张图片

  •  分析

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第98张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第99张图片

事件总线解决滑动bug 

  •  Vue中的事件总线:$bus
  • vue 事件总线EventBus的概念、使用以及注意点

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第100张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第101张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第102张图片


16.refresh函数找不到的bug处理 

  • created()有可能拿不到refs,最好判断scroll存不存在 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第103张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第104张图片


17.刷新频繁的防抖函数处理 

  • 浅谈 JS 防抖和节流
  • 前端节流、防抖
  • 前端性能优化——防抖(debounce)

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第105张图片


18.上拉加载更多的完成

直接看第14那里 


19.tabControl的offsetTop获取分析 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第106张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第107张图片


20.tabControl的吸顶效果完成 

获取到tabControl的offsetTop

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第108张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第109张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第110张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第111张图片

 监听滚动, 动态的改变tabControl的样式

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第112张图片

  •  用动态绑定class会有bug,tabControl会消失

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第113张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第114张图片

  • 直接复制tabControl 

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第115张图片

  • 停留效果完成,但是还有其他bug ,两个选项卡没有同步

 ​​​​​​​Vue项目supermall仿蘑菇街详解(一)首页开发详解_第116张图片Vue项目supermall仿蘑菇街详解(一)首页开发详解_第117张图片

  •  改一下ref,做一下区分,在tabClick修改对应的currentIndex

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第118张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第119张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第120张图片

  •  吸顶效果完成

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第121张图片Vue项目supermall仿蘑菇街详解(一)首页开发详解_第122张图片


21.Home离开时记录状态和位置 

让Home不要随意销毁掉 

  • 每次离开home,都会被销毁 

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第123张图片Vue项目supermall仿蘑菇街详解(一)首页开发详解_第124张图片

  •  加keep-alive,home没有被销毁了,但是滚动位置还是改变了,是better-scroll的原因,但最新版似乎没有这个问题

 Vue项目supermall仿蘑菇街详解(一)首页开发详解_第125张图片

 让Home中的内容保持原来的位置

  • 离开时, 保存一个位置信息saveY.

  • 进来时, 将位置设置为原来保存的位置saveY信息即可.

    • 注意: 最好回来时, 进行一次refresh() 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第126张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第127张图片


22.跳转到详情页并携带id 

  • 新建文件,配置路由关系,监听GoodsListItem点击事件 

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第128张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第129张图片

Vue项目supermall仿蘑菇街详解(一)首页开发详解_第130张图片


  • 首页基本完成了

你可能感兴趣的:(Vue学习笔记,Vue,vue.js,前端,前端框架,vue-cli3,vue)