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

news/2024/11/29 5:44:11/

💭💭

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

💟:东非不开森的主页

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

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

旅途拾景

    • 一、日历的搭建
      • 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中,共享数据
    在这里插入图片描述

在这里插入图片描述

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


http://www.ppmy.cn/news/1604.html

相关文章

[激光原理与应用-36]:《光电检测技术-3》- 光学测量基础 - 光电效应与光电探测器的基本原理

目录 一、概述 二、光电检测的理论基础:光电效应 三、分类 3.1 光子效应 3.2 热效应 四、光电检测器的参数 五、常见的光电探测器 5.1 光电倍增管:微弱光信号转换成电信号 5.2 光电导器件:电阻或电流随着光强的变化而变化 5.3 光伏…

k8s之Pod控制器详解

文章目录一、Pod控制器介绍1、什么是Pod控制器1.2、ReplicaSet(RS)1.3、Deployment(Deploy)1.3.1、重建更新1.3.2、滚动更新1.3.2、版本回退1.3.3、金丝雀发布1.4、Horizontal Pod Autoscaler(HPA)1.5、DaemonSet(DS)1.6、Job1.7、CronJob(CJ)一、Pod控制器介绍 Pod是kubernet…

VUE3-工作笔记-06

本节:总结11月份学习的内容 1.如果有很多个功能是一样的,那就先写一个测试很多次,确定没有bug再全部改,不然辛辛苦苦全部改了之后,发现还是有bug又要重新改,最好是写成组件的形式,写成hook。 …

【C++泛型学习笔记】函数模板

提到C的程序设计方法,最先想到的便是两种:面向过程和面向对象编程。但是当我们去阅读一些优秀的C库源码时(比如CGAL),就会直接被其的泛型编程劝退。泛型编程也是C程序设计方法中的一种,不同于上述两种设计方…

Ra-01SC/Ra-01SCH模组驱动

目录简介硬件准备设备清单接线说明重要函数说明调试联系我们简介 本文档主要介绍Ra-01SC/Ra-01SCH模组驱动例程使用方法; 硬件准备 设备清单 硬件数量Ra-001SC/Ra-01SCH 模组2个杜邦线若干USB转TTL模块2个STM32F103C8T6开发板2个安卓线2根 接线说明 STM32F103C…

给定一个字符串str,求最长回文子序列长度。

问题描述: 给定一个字符串str,求最长回文子序列长度。 思想: 思想一: 根据回文串的性质,我们可以生成一个新的字符串,新字符串的顺序是原来字符串的倒序。本题可以转化为两个字符串求最长的公共子序列。 …

Windows搭建web站点:免费内网穿透发布至公网 1-2

什么是cpolar? cpolar是一个非常强大的内网穿透工具,开发调试的必备利器。 它可以将本地内网服务器的HTTP、HTTPS、TCP协议端口映射为公网地址端口,使得公网用户可以轻松访问您的内网服务器,无需部署至公网服务器。支持永久免费使…

Python 全栈系列209 so_pack

说明 新部署的基本服务 最近发现好些应用,特别是贴近某些具体功能的镜像里普遍都使用了SO加密。还有些连系统账户的权限都限制了,实在懒得去破解root密码。 当然现在站在自己的角度,也认可这样的设置,共享不一定代表完全开源。有时候想做修改只是因为作者封装镜像的时候功…