【项目_03】日历的回显、搭建热门精选、下拉加载更多、搜索框搭建 | 基于Vue3全家桶
创始人
2024-03-17 06:14:31
0

💭💭

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

💟:东非不开森的主页

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

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

旅途拾景

    • 一、日历的搭建
      • 1.1.基本搭建
      • 1.2.日期格式化处理及回显
    • 二、热门城市展示
      • 2.1.处理方式一
      • 2.2.处理方式二
    • 三、开始搜索搭建
    • 四、搭建热门精选
      • 4.1.数据分析
      • 4.2.数据获取及其处理
      • 4.3.使用数据搭建页面
    • 五、下拉加载更多
      • 5.1.监听加载更多
      • 5.2.挂载监听,卸载时移除监听
      • 5.3.抽取hooks,进行复用
      • 5.4. 如何监听页面的滚动?上拉加载更多、显示搜索框
    • 六、搜索框
      • 6.1.搜索框显示的控制
      • 6.2.搜索框的实现

一、日历的搭建

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.clientHeightscrollTop.value = document.documentElement.scrollTopscrollHeight.value = document.documentElement.scrollHeightif (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中,共享数据
    在这里插入图片描述

在这里插入图片描述

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

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...