项目开发(2)

本文详细介绍了在项目开发中首页的构建过程,包括Feature视图、TabControl的固定与切换、数据请求与展示、使用Better-scroll实现局部滚动及回顶功能。通过实例讲解了如何处理滚动位置监听、上滑加载更多图片以及BackTop组件的设计和交互逻辑。
摘要由CSDN通过智能技术生成

首页开发

Feature

feature 特征
在这里插入图片描述
其实是一张图片
在这里插入图片描述

上下滚动时 要保证 “购物街” 也就是 nav-bar 固定不动 一直显示在最上方

还有个问题 图片被遮住了
在这里插入图片描述

直接在home离给个padding-bottom 40px 就好了 后面再用更好的办法

TabControl

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在Home里

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
向下滑动时 tab-control 固定

数据请求

在这里插入图片描述
在这里插入图片描述

把本来写在created的 封装到methods里
在这里插入图片描述
在这里插入图片描述

展示数据

先搞个大组件 GoodsList
在这里插入图片描述
返回list 数组
在这里插入图片描述

再里面放一个一个小组件 GoodsListItem
包括商品名称 价格 收藏数
返回一个对象
在这里插入图片描述
在这里插入图片描述
子绝父相
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

TabControl

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击tabControl 切换图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
变量太长不好 给他放到计算属性里
在这里插入图片描述
在这里插入图片描述

Better-scroll

npm install better-scroll --save

现在分类里试一下
在这里插入图片描述
在这里插入图片描述
用鼠标上滑,局部滚动
而且有弹簧效果


BackTop

在这里插入图片描述
在这里插入图片描述
点击这个图标 可以直接到首页顶部
最关键的是中间的滚动部分要回到最开始的地方 所以在Home里监听点击事件 而不在backTop里 如果在子组件里监听 还得$emit发射事件到父组件

只需要在Home里
在这里插入图片描述

在这里插入图片描述
通过this.$refs.scroll 可以访问到设置了ref属性的子组件scroll
在子组件scroll里封装了scrollTo time为默认值缓冲时间
在这里插入图片描述
这样就可以直接调用scrollTo方法了
比 原来的 this. $refs.scroll.scroll.scrollTo(0,0) 优雅一点


只有滚到某个位置的时候 回到顶部图标才显示出来
所以需要

监听滚动的位置

得有probeType属性才能监听
最好不写在创建BScroll对象里 因为 别的组件也要调用scroll 但是不一定实时监听
所以用props
Home需要监听就 :probe-type=“3” 不加冒号传的是字符串 加了才是变量 类型为number

probeType默认为0,
为1时,滑动超过一定时间才发送scroll事件
为2时,滑动过程中发送
为3时,不仅滑动过程中,而且滚动动画中也发送

pullUpLoad 上拉加载 默认为false 可以配置threshold (阈值)决定什么时候开始加载
在这里插入图片描述
创建scroll对象
Click为true时 才可以发送点击事件 因为better-scroll会阻止浏览器的click事件
probeType
pullUpLoad

监听滚动位置
子组件自定义事件scroll 传给父组件 position
在这里插入图片描述
父组件
在这里插入图片描述
谁想实时监听 就 @监听这个事件scroll在这里插入图片描述
在这里插入图片描述
一样可以打印position 有x,y值

要滚动到某个值的时候显示回到顶部图标 默认是不显示
使用v-show 因为要动态变化 所以不能直接写true 或 false
用变量isShowBackTop
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为position里的y值都是负数 所以加个负号
我记得是和坐标轴相反的 越往下则距离0越远 y值在变大
但这里是往上滑动 算的是负值 往上滚动的距离越多 则-222 -234 -256 这样
往下滑 则往上滚动的距离变小 则 -222 -201 -199


往上滑加载更多图片

pullUpload
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

better-scroll
最外层的是wrapper 滚动的是内层的content
在这里插入图片描述

当DOM结构发生变化时 也就是滑不动了 应该是高度变了 就需要重新计算高度
用refresh 刷新下

在这里插入图片描述
每次上拉加载完都需要finishPullUp 这样才能继续下一次的上拉加载
因为有封装finishPullUp 所以只写一次scroll
在这里插入图片描述


回顾

FeatureView
div>a>img

TabControl
props->titles
div> v-for titles > span {{item}}
css
选择tab 会变色

 :class="{active: index===currentIndex }"
@click="itemClick(index)"

getHomeGoods

goods:{
        'pop':{page:0,list:[]},
        'new':{page:0,list:[]},
        'sell':{page:0,list:[]}
      }

在home.js里封装 getHomeGoods
在Home.vue中 又在methods里 getHomeGoods(type)
调用getHomeGoods(‘pop’)getHomeGoods(‘new’)getHomeGoods(‘sell’)

created() {
    this.getHomeMultidata(),
    this.getHomeGoods('pop')
    this.getHomeGoods('new')
    this.getHomeGoods('sell')
    
  }

page 动态获取对应的page

const page = this.goods[type].page + 1

获取数据 res

getHomeGoods(type,page).then(res => {
        this.goods[type].list.push(...res.data.list)
        this.goods[type].page+=1

GoodsList
props:goods 是某一个list

<goods-list-item v-for="(item,id) in goods"  :goods-item="item" :key="id">

GoodsListItem
props:goodsItem
用goodsItem 取出数据 用 div p span 进行展示

<div class="goods-item" @click="itemClick">
    <img :src="goodsItem.show.img" alt="">
    <div class="goods-info">
      <p>{{goodsItem.title}}</p>
      <span class="price">{{goodsItem.price}}</span>
      <span class="collect">{{goodsItem.cfav}}</span>
    </div>
  </div>

better-scroll

this.scroll = new BScroll(this.$refs.wrapper, {

监听滚动 probeType :3

 this.scroll.on('scroll', (position) => {
        // console.log(position);
        this.$emit('scroll', position)
      })

上拉加载 pullUpLoad:true

 this.scroll.on('pullingUp', () => {
        this.$emit('pullingUp')
        // console.log('pp');
      })

click:false
button可以监听点击
div不可以

BackTop

对BackTop的监听

<back-top @click.native="backClick"  v-show="isShowBackTop"></back-top>

因为这里用了ref 所以可以用this.$ref.scroll 就能去scroll.vue里调用方法
在这里插入图片描述
回到顶部

this.$refs.scroll.scrollTo(0,0)

BackTop显示和隐藏
isShowBackTop:false
监听滚动的位置position

this.isShowBackTop = (-position.y) > 1000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值