【项目_03】日历的回显、搭建热门精选、下拉加载更多、搜索框搭建 | 基于Vue3全家桶

10 篇文章 1 订阅

💭💭

✨: 日历的回显、搭建热门精选、下拉加载更多、搜索框搭建 | 旅途拾景

💟:东非不开森的主页

💜: 心若有所向往,何惧道阻且长💜💜

🌸: 如有错误或不足之处,希望可以指正,非常感谢😉

一、日历的搭建

1.1.基本搭建

  • 我们先搭建出基本的框架
  • 再使用vant组件库

在这里插入图片描述

在这里插入图片描述

1.2.日期格式化处理及回显

  • 然后就是对日期的格式化
  • 这里我们可以使用dayjs
npm install dayjs

然后封装个工具

  • 包括日期格式化
  • 计算天数
import dayjs from "dayjs";

export function formatMonthDay(date) {
    return dayjs(date).format("MM月DD日")
}

export function getDiffDays(startDate, endDate) {
    return dayjs(endDate).diff(startDate, "day")
}
  • 对时间范围的处理

在这里插入图片描述

  • 日历的回显(以正确的格式在页面显示)
    还有天数的处理

在这里插入图片描述
请添加图片描述

二、热门城市展示

2.1.处理方式一

  • 先发送网络请求

在这里插入图片描述

  • 传递数据给子组件

在这里插入图片描述

  • v-bind绑定,用于传递数据,子组件用defineprops

在这里插入图片描述

  • 数据渲染

在这里插入图片描述
css blablabla~

2.2.处理方式二

  • 在service的modules里面处理网络请求接口
  • 用pinia共享数据

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

  • 使用数据
    在这里插入图片描述
    在这里插入图片描述

  • 调用网络请求
    在这里插入图片描述

三、开始搜索搭建

在这里插入图片描述
跳转页面

  • 先添加路由
  • 配置对应页面
  • 跳转可以用query传递相应的参数

在这里插入图片描述

在这里插入图片描述

用$route来接收参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、搭建热门精选

4.1.数据分析

  • 我们可以发现该数据分为两种,所以我们可以分为两个组件
  • 用v-if v-else进行判断
    在这里插入图片描述
    在这里插入图片描述

4.2.数据获取及其处理

  • 分页数据传递参数
  • 传递参数

在这里插入图片描述

  • 对数据进行追加,当本页数据加载完成后,加载下一页

在这里插入图片描述

  • 使用数据

在这里插入图片描述

  • 父子组件传递数据

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

4.3.使用数据搭建页面

  1. 类型为三的页面

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

  • 类型为9的页面搭建

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

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

然后就是调css了
呜呜呜 慢慢调吧

五、下拉加载更多

5.1.监听加载更多

  1. 因为是分页数据,所以我们需要监听下拉加载更多
  2. 我们要知道滚动的是元素,而不是窗口
  3. 所以我们需要算出窗口实际高度,
  4. 当滑到底的时候,就可以加载更多了

注:

  • scrollHeight 元素内容的高度,包括溢出的不可见内容,滚动视口高度(也就是当前元素的真实高度)
  • clientHeight 元素的像素高度,包含元素的高度+内边距,不包含水平滚动条,边框和外边距,可见区域高度
  • scrollTop “元素中的内容”超出“元素上边界”的那部分的高度。滚动条顶部到浏览器顶部高度

当scrollTop + clientHeight >= scrollHeight的时候,就说明滑到底部了
此时发送网络请求,加载下一页数据

在这里插入图片描述

5.2.挂载监听,卸载时移除监听

  • 用onMounted生命周期来挂载监听
  • 用onUnmounted生命周期移除监听

在这里插入图片描述

5.3.抽取hooks,进行复用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

重点:

5.4. 如何监听页面的滚动?上拉加载更多、显示搜索框

  • 上拉加载更多很可能多个组件都需要用到 所以对其进行hooksuseScroll封装 用于方便使用
    • 获取客户端 scrollTop ``scrollHeight的高度 定义isReachBottom控制网络请求的再次的触发
    • 当客户端的高度 + 上滑的高度 >= 内容滑块总高度时 就说明已经滚动到底部了 就可再次请求数据
    • 当然这里为了提升性能 可用节流函数
    • 事件需要在声明周期onMounted中进行(因为setup内部东西加载是处于(beforeCreate和create声明周期之间) 进行完成之后记得取消事件
import { onMounted, onUnmounted, ref } from "vue";
import { throttle } from "lodash";

export default function useScroll() {
  const isReachBottom = ref(false)

  const clientHeight = ref(0)
  const scrollTop = ref(0)
  const scrollHeight = ref(0)
 // 获取各种高度(客户端  上滑高度   滑块内容总高度)
  const scrollListenerHandler = throttle(() => {
    clientHeight.value = document.documentElement.clientHeight
    scrollTop.value = document.documentElement.scrollTop
    scrollHeight.value = document.documentElement.scrollHeight

    if (clientHeight.value + scrollTop.value >= scrollHeight.value) {
      // 滚动到底部触发
      // console.log('gundao dibu l')
      isReachBottom.value = true
    }
  }, 150)
  // 监听事件
  onMounted(() => {
    window.addEventListener('scroll', scrollListenerHandler)
  })
  //移除事件
  onUnmounted(() => {
    window.removeEventListener('scroll', scrollListenerHandler)
  })

  return { isReachBottom, clientHeight, scrollTop, scrollHeight }
}

六、搜索框

6.1.搜索框显示的控制

  • 默认是false
  • 当滑到一定高度的时候才会出现

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
请添加图片描述

  • 监听也可以用computed
  • 因为computed计算的数据返回的也是响应式的,就不用ref了
  • 如果大于则为true
  • 不满足就为false
  • 在这里插入图片描述
    定义的可响应式式数据,依赖于另一个可响应式数据,那么可以用计算属性computed

6.2.搜索框的实现

  • 我们可以把它拆为一个组件
  • 所要显示年月日我们可以给它写在store中,共享数据
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
请添加图片描述
请添加图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东非不开森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值