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

news2024/9/21 16:43:29

💭💭

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

💟:东非不开森的主页

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

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

旅途拾景

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

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/60237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android入门第38天-使用随鼠标移动的圆点来熟悉onTouchEvent

简介 平时包括之前的例子大量是基于TouchListener如:onClick这种一类的事件。 今天给大家带来的是TouchListener与OnTouchEvent的比较,以及多点触碰的知识点! TouchListener是基于监听的,而OnTouchEvent则是基于回调的&#xff…

SNMP协议——网络管理概述

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.网络管理概述 1.网络管理概念 2.网络管理功能 1.配置管理 …

Xshell连接如何记住用户秘钥文件

场景描述 服务器ssh登录有2种常用的方式: 方式1:用户密码认证,登录时输入用户名和密码。方式2:公钥认证(Public Key User Authentication),登录时提供用户名私钥。公钥需要存储一份在服务器上该用户的~/.ssh/authori…

是德科技DSOX2002A型号示波器的使用

文章目录图使用自检电路单次触发按键恢复出厂设置水平调整区水平位移调整按钮水平时机调整旋钮垂直调整区通道启用按钮垂直档位调节旋钮垂直位移调整旋钮测量区图 使用 自检 黑色鳄鱼夹接地,伸缩探钩挂到左侧。 按下auto按键 使用测量按键可以调出波形的峰峰值与频…

Redis (持续更新…)

提到这个词,脑海里一连串:它是什么,能干什么,怎么干的,不用它行不行,有没有同类…… 其实就是5W2H,或者说凡事多问个为什么 先放官网: ​​​​​​Redis CRUG网站 它是开源存储…

非零基础自学Golang 2 开发环境 2.5 第一个Go 程序

非零基础自学Golang 学习文档地址:https://www.topgoer.cn/ 本文仅用于学习记录,不存在任何商业用途,如侵删【已联系过文档作者】 文章目录非零基础自学Golang2 开发环境2.5 第一个Go 程序2.5.1 Hello World2 开发环境 2.5 第一个Go 程序 2…

IDEA创建Java Web项目

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者…

【电商】跨境电商「保税」业务(附支付宝、微信对接指南)

​电商作为产品的一个大类,很多业务相关的东西都比社交、工具类产品更为复杂;而且涉及到经济、支付等环节,让很多新人头疼不已。这篇文章作者从跨境电商的「保税」业务出发,以支付宝、微信的对接为例,为你详解跨境电商…

Python之面向对象

目录 一、类的定义 二、魔法方法 三、属性管理 四、封装 五、继承&多态 一、类的定义 # 类封装 class Dog:name"修狗"age3dDog() print(fname is {d.name} ,age is {d.age}) # python与java关于类封装的区别 d.sex"母" print(fname is {d.name} ,…

逸飞激光在科创板IPO过会:前三季度营收约3亿元,同比增长59%

近日,上海证券交易所科创板披露的信息显示,武汉逸飞激光股份有限公司(下称“逸飞激光”)获得上市委会议通过。据贝多财经了解,逸飞激光于2022年6月24日在科创板递交招股书。 本次冲刺科创板上市,逸飞激光计…

【大数据入门核心技术-Hadoop】Hadoop高可用集群搭建

目录 一、Hadoop部署的三种方式 1、Standalone mode(独立模式) 2、Pseudo-Distributed mode(伪分布式模式) 3、Cluster mode(集群模式) 二、准备工作 1、先完成zk高可用搭建 2、/etc/hosts增加内容 …

数据科学家赚多少?数据全分析与可视化 ⛵

💡 作者:韩信子ShowMeAI 📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40 📘 AI 岗位&攻略系列:https://www.showmeai.tech/tutorials/47 📘 本文地址:https://www…

[附源码]计算机毕业设计JAVA一点到家小区微帮服务系统

[附源码]计算机毕业设计JAVA一点到家小区微帮服务系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM…

Linux简单命令

Linux简单命令 现在写几个使用Linux时最常使用的简单命令 1.将一个文件复制到另一个文件夹内,比如将backboneA复制到backboneB路径下: cp -r /文件夹路径backboneA/* /文件夹路径backboneB/2.查看当前目录下有多少个文件及文件夹,需在终端输…

C++闲谈04——设计模式

C闲谈04——设计模式 单例模式 饿汉式单例模式 #include<iostream> #include<mutex>using namespace std; mutex mtx;class SingleTon{ public:static SingleTon* GetInstance() {if (instance nullptr) {lock_guard<mutex> lk(mtx); // 不是尖括号inst…

修复 爱普生 EPSON L4156 打印机 无法打印,开关 WIFI 墨水 三个灯同时闪烁的问题

L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4169 喷墨一体机清零图解 清零前请取消打印任务&#xff0c;打印机用 USB 线接电脑并开启 工具下载地址 EPSON打印机清零软件1.双击[Resetter.exe]启动软件,点击[Select],选择 Port 打 印机型号&#xff0c;然后点[OK]&#…

第8章 注意力机制与外部记忆

系列文章目录 第1章 绪论 第2章 机器学习概述 第3章 线性模型 第4章 前馈神经网络 第5章 卷积神经网络 第6章 循环神经网络 第7章 网络优化与正则化 第8章 注意力机制与外部记忆 第9章 无监督学习 第10章 模型独立的学习方式 第11章 概率图模型 第12章 深度信念网络 第13章 深…

Linux UART编程 驱动蓝牙芯片

在熟悉了UART概念后&#xff0c;我们要学以致用&#xff0c;在Linux用起来来驱动起来蓝牙芯片&#xff01; 我们直接借用man来看下&#xff0c;命令如下&#xff1a; man termios 1.头文件引用 #include <termios.h> #include <unistd.h> 2.串口打开关闭 open…

Python预测2022世界杯1/8决赛胜负

目录: why to do?how to do?why to do? 简单介绍一下为什么要做这个吧? 首先呢, 最近一直在看基于tensorflow框架实现facenet等一些人脸识别的网络. 再加上昨天(2022年12月3日)是2022年世界杯1/8决赛第一个比赛日. 就在不同平台搜了一下, 看看有没有其他大牛也做了这方面的…

设计模式——策略模式

设计模式中的复用性指的是编译单位&#xff08;二进制层面&#xff09;的复用性&#xff08;编译、测试、部署后是原封不动的&#xff09; 动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xf…