当前位置: 首页 > news >正文

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

💭💭

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

💟:东非不开森的主页

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

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

旅途拾景

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

在这里插入图片描述

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

相关文章:

  • 目标检测算法——YOLOv5/YOLOv7改进之结合特征提取网络RFBNet(涨点明显)
  • 【Spring系列】- Spring循环依赖
  • Java实验七
  • 图像处理:模糊图像判断
  • SNMP协议——网络管理概述
  • 家庭用户无线上网案例(AC通过三层口对AP进行管理)
  • Hbase的SQL接口之Phoenix使用心得
  • Linux-性能分析常用工具
  • 用html做一个漂亮的网站【茶文化12页】期末网页制作 HTML+CSS网页设计实例 企业文化网站制作
  • 【torch.utils.data.sampler】采样器的解析和使用
  • 你绝对想象不到的端对端通信的几种方式
  • [附源码]计算机毕业设计文曦家教预约系统Springboot程序
  • 给出32位有符号整数,将这个整数翻转
  • 盒子模型详解
  • 详解设计模式:命令模式
  • 10个最佳ES6特性 ES7与ES8的特性
  • Angular4 模板式表单用法以及验证
  • Bytom交易说明(账户管理模式)
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Golang-长连接-状态推送
  • httpie使用详解
  • Javascript弹出层-初探
  • java多线程
  • Mybatis初体验
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL数据库运维之数据恢复
  • Object.assign方法不能实现深复制
  • spring学习第二天
  • text-decoration与color属性
  • use Google search engine
  • vue-cli在webpack的配置文件探究
  • vue自定义指令实现v-tap插件
  • 不上全站https的网站你们就等着被恶心死吧
  • 从输入URL到页面加载发生了什么
  • 第2章 网络文档
  • 动态规划入门(以爬楼梯为例)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 观察者模式实现非直接耦合
  • 回顾2016
  • 记录:CentOS7.2配置LNMP环境记录
  • 盘点那些不知名却常用的 Git 操作
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用 QuickBI 搭建酷炫可视化分析
  • 手写一个CommonJS打包工具(一)
  • 异常机制详解
  • 用简单代码看卷积组块发展
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • (06)金属布线——为半导体注入生命的连接
  • (floyd+补集) poj 3275
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • .CSS-hover 的解释