四、书城开发-2、热门搜索/推荐页面的开发

热门搜索的开发

热门搜索页面的交互主要有4个交互点

第一个交互是点击搜索框时,热门搜索会渐影显示;第二个交互是点击返回图标时热门搜索会渐影消失;第三个交互是热门搜索滑动页面的时候搜索栏下面会出现阴影,回到顶部时阴影会消失;第四个交互点击搜索框进入热门搜索页面的时候滑动位置会清除就每次进入热门搜索页都是回到顶部

热门搜索页面的布局

在component下的home中创建父搜索滚动组件HotSearchList.vue以及子搜索列表组件HotSearch.vue。搜索列表的大致布局如下一个滚动条包裹着两个列表和一条分割线

然后HotSearchList.vue其中定义了一个方法接收滚动组件中传过来的偏移量,子用父嘛所以是父this.$emit('onScroll',offsetY),子给滚动条组件标签中绑定@onScroll="onScroll"即可在下面的onScroll方法中直接使用传递过来的偏移量,然后这个偏移量我们要保存到vuex中

我们想阅读器的vuex是阅读器的,书城的vuex是书城的,所以我们在store下的modules下新建一个store.js用来专门放书城的state和mutations,那个book.js就是之前专门用来放阅读器的,然后注意我们还要到store的根路径即index.js下将store.js导入定义才行

然后到getters.js和actions.js中加入如下

最后一步是到mixin当中把这两个参数引入进来

然后我们使用一下HotSearchList组件试试看,将其加入到SearchBar组件中

可以看到热门搜索展示出来了,并且滑动页面的时候vuex中的热门搜索页的偏移量是在改变的

接下来我们就实现热门搜索的交互

热门搜索是点击搜索才展示否则不展示的嘛,所以第一步给热门搜索组件一个v-show

定义一个变量hotSearchVisible来控制热门搜索组件是否显示,然后同样增加两个方法隐藏热门搜索和展示热门搜索的方法

可以看到默认时候是不显示热门搜索组件的

接下来我们做第一个交互,就是点击搜索框时展示我们的热门搜索页

我们点击搜索框就展示搜索页那就给搜索框即input绑定一个点击事件嘛,点击事件就绑定showHotSearch即展示搜索页

第二个交互是点击返回图标时热门搜索会渐影消失

然后再给左侧返回按钮一个点击事件,点击事件中只需要隐藏起展示出来的热门搜索页即可,给返回按钮一个z-index:200即可,因为我们这里都是用的绝对定位布局,search-bar是z-index:150,我们不填z-index:200给它的话就会被盖住那么点击事件就点击不到返回按钮上,增加z-index:200那么它就会浮在表面,点击以后点击事件就能触发成功

第三个交互是热门搜索滑动页面的时候搜索栏下面会出现阴影,回到顶部时阴影会消失

就在watch中监听热门搜索中的滑动偏移量即可,如果热门搜索页中偏移量为0说明隐藏阴影,滑动了则显示阴影;然后返回到书城首页的时候,书城首页是之前是多少偏移量就是多少偏移量的即返回到书城首页的时候书城首页是不用回弹到顶部的,所以要判断此时书城首页的偏移量,如果偏移量大于0说明是滑动了的就需要展示阴影否则不需要展示阴影,所以在返回的back中判断

第四个交互点击搜索框进入热门搜索页面的时候滑动位置会清除就每次进入热门搜索页都是回到顶部

我们在热门搜索页组件中做了一个reset方法,这个reset方法它会去调用我们的滚动组件提供的scrollTo方法,是让我们滚动条回到最初的位置

我们在展示热门搜索页的时候就应该去让热门搜索页中的滚动条回到最初的位置即顶部,而展示热门搜索页的方法在SearchBar标题搜索组件中,即父组件标题搜索组件需要调用子组件热门搜索组件的方法,所以给子组件<hot-search-list>中增加一个ref好让SearchBar组件通过this.$refs来获取这个子组件中的方法,即如下,即在热门搜索页展示的时候就去调用这个reset方法

此时你点击返回再加入搜索页发现没有生效,没有回顶部,这是因为我们做展示热门搜索页方法下的隐藏标题隐藏阴影这一系列操作的时候dom并不用立即被分析,而reset需要在整个dom更新完之后也就是热门搜索页显示之后才能拿到dom,而你上面这种是在dom更新时不是更新后,dom更新时拿不到dom所以调用不了reset方法,所以应该是dom更新后需要立即执行reset,所以要用到this.$nextTick(),this.$nextTick()就是在dom更新后立即执行,也就是当热门搜索显示之后再调用reset,注意$nextTick(()=>{})里面是通过箭头函数执行

推荐页面的开发

推荐页面的布局

在component下的home中建一个flapCard组件,是推荐页面,然后在storeHome中记得引入这个FlapCard组件,这个推荐页面是点击标题栏的推荐图标才显示,所以定义一个变量flapCardVisible来控制它是否显示,同理放到vuex中,即在store的store.js里的state、mutations中加入这个变量以及getters.js和actions.js中加入,最后在mixin中加入即可。然后增加一个关闭按钮,关闭事件中是让这个推荐页面隐藏所以置这个flapCardVisible变量为false即可,然后调整一下样式即可得到

接下来我们就实现弹出来的推荐图书卡片

要开发这个功能,首先要获取数据,在开发环境下我们采用mockjs来制造模拟数据,所以我们先来看看如何通过mockjs来模拟我们的接口数据

mockjs介绍:

背景和作用:在前端开发中,与后端接口的数据交互是一个常见的任务。然而,在接口尚未实现或无法访问的情况下,如何进行前端开发和调试呢?这就是mock.js出现的背景。mockjs主要用来拦截ajax请求,生成模拟数据。它提供了模拟接口请求和生成随机数据的能力,为前端开发者提供了便利。

原理:它通过拦截XMLHttpRequest或fetch等网络请求,根据定义的规则返回模拟的数据,当开发者发起一个请求时,mockjs会检查匹配的规则,并且返回相应的模拟数据。这使得前端开发者可以在没有真实接口的情况下进行开发和调试。

安装和使用:使用mock.js非常简单,只需要在项目中安装Mock.js,并在需要的地方定义接口的模拟数据。首先,通过npm安装Mock.js:npm install mockjs --save-dev;然后,在需要使用Mock.js的地方引入它:import Mock from 'mockjs';;接下来,可以使用Mock.mock()方法定义接口的模拟数据

回到项目,使用mock.js
第一步我们安装好mock.js和axios
第二步准备mock数据,把准备的mock数据即这个mock文件夹引入到src目录下,这个mock目录中放的就是你请求时给你模拟返回的数据

第三步做mockjs的初始化,在mock下面创建一个index.js即做mockjs的初始化,就是定义接口的模拟数据,即前端请求什么路径时就让mock去返回哪些数据这样子

然后注意要到main.js中引入mock

第四步,定义api请求方法

接着我们就在src下创建一个api文件夹,用来做我们的api请求,定义一个home方法,这个home方法中就返回axios去请求路径为book/home的数据,mockjs就会截取这个请求然后返回上面定的相对应的数据

第五步,使用这个方法去获取mockjs返回的模拟数据

然后我们就来尝试一下能不能请求这个home方法然后返回相对应的数据。怎么尝试呢,我们就哪里要请求数据我们就在哪里引入这个home方法,我们到StoreHome中引入home方法,然后在mounted中调用这个home方法,然后因为axios都是异步返回,所以我们需要用.then()的异步方式来接收请求回来的数据,即可如下

我们返回data可以看到rendom中就是返回给我们的图书

我们这里是随机推荐一本图书嘛,所以我们生成一个随机数,然后选返回数据中随机一本书保存在data中的random变量中

然后把这本书从书城首页组件中传到推荐图书组件中

接下来我们就到推荐图书页面中展现我们的图书

我们在styles中引入home.scss,并且在global.scss中引入。home.scss主要是定义了一些通用标题的一些样式,方便我们进行复用

然后在utils中引入store.js,这个是用来专门存放书城的静态资源的,就哪些固定的数据啊固定的方法啊

然后我们做推荐图书卡片的布局,变量flapCardVisible为true时显示推荐页面和显示图书卡片

最后点击推荐图标即可出现如下画面

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出 -- 系统架构之微服务标准组件及职责

我们来认识一下微服务架构在Java体系中依托哪些组件实现的。 相对于单体架构的简单粗暴&#xff0c;微服务的核心是将应用打散&#xff0c;形成多个独立提供的微服务&#xff0c;虽然从管理与逻辑上更符合业务需要。但微服务架构也带来了很多急需解决的核心问题&#xff1a; 1…

PDF锐化

PDF Shaper Ultimate(pdf转图片) 编辑->添加文件->选中一个要处理的pdf 操作->转换->PDF转为图片 ComicEnhancerPro设置(把图片锐化) PDF Shaper Ultimate(图片转pdf) 编辑-添加图片->选中所有锐化处理后的图片 转换->图片转为pdf&#xff08;会把所有图…

最新AI工具系统ChatGPT网站运营源码SparkAi系统V6.0版本,GPTs应用、AI绘画、AI换脸、垫图混图、Suno-v3-AI音乐生成大模型全支持

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

《深入Linux内核架构》第4章 进程虚拟内存(2)

目录 4.3 内存映射原理 4.4 数据结构 4.4.1 树和链表 4.4.2 虚拟内存区域VMA的表示 4.4.3 相关数据结构 本节讲VMA结构体struct vm_area_struct和struct address_space。 4.3 内存映射原理 所有进程的虚拟空间总和比物理内存大得多&#xff0c;因此只有最常用的虚拟空间…

生活日常韩语成人外语培训中为什么韩国人说话喜欢用“~도록”?

많이 받는 질문 중 하나가 ‘~도록’을 자신에게 쓸 수 있는가 하는 것이다. 즉 “제가 하도록 하겠습니다” “조심하도록 하겠습니다” “말씀드리도록 하겠습니다” 등과 같은 표현이다. 我经常被问到的问题之一就是能否将“~도록”用于自己。比如“我来做吧”、“我会小心…

深度学习500问——Chapter06: 循环神经网络(RNN)(2)

文章目录 6.4 CNN和RNN的区别 6.5 RNNs与FNNs有什么区别 6.6 RNNs训练和传统ANN训练异同点 6.7 为什么RNN训练的时候Loss波动很大 6.8 标准RNN前向输出流程 6.9 BPTT算法推导 6.9 RNN中为什么会出现梯度消失 6.10 如何解决RNN中的梯度消失问题 6.4 CNN和RNN的区别 类别特点描述…

sfml sdl2 windows vscode 调试和coderunner插件运行

链接库写在编译链接命令里&#xff0c;如果没有使用到不会加入到生成的可执行文件里。所以tasks.json可以这样写&#xff0c; {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C: g.exe 生…

Apache Pulsar源码解析之Lookup机制

文章目录 引言Lookup是什么客户端实现原理服务端实现原理总结 引言 在学习Pulsar一段时间后&#xff0c;相信大家也或多或少听说Lookup这个词&#xff0c;今天就一起来深入剖析下Pulsar是怎么设计的它吧 Lookup是什么 在客户端跟服务端建立TCP连接前有些信息需要提前获取&am…

arm-linux-gnueabihf-gcc默认目录

默认编译的头文件目录&#xff1a; /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib 默认编译的库文件目录&#xff1a; /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include/ …

vscode 重命名很慢或失败 vscode renames are slow

网上问题&#xff0c; 插件问题&#xff08;我遇见的排除&#xff0c;不是&#xff09;被其他程序占用问题&#xff0c;&#xff08;我这边是这个&#xff09; 解决方案&#xff1a; 打开【资源管理器】&#xff0c;使用火绒 或其他软件&#xff0c;查看文件夹 or 文件 被哪个…

2024.4.9-day12-CSS 常用样式属性和字体图标

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业 作业 <!DOCTYPE html> <html lang"zh-CN"><he…

go之web框架gin

介绍 Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API&#xff0c;性能要好得多&#xff0c;多亏了 httprouter&#xff0c;速度提高了 40 倍。 如果您需要性能和良好的生产力&#xff0c;您一定会喜欢 Gin。 安装 go get -u github.com/gin-gonic/g…

【C++】unordered 系列关联式容器

文章目录 1. unordered 系列关联式容器2. unordered_map2.1 unordered_map 的文档介绍2.2 unordered_map 的接口说明 3. unordered_set4. 在线 OJ 1. unordered 系列关联式容器 在 C 98 中&#xff0c;STL 提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可…

STM32中C编程引入C++程序

C具备类的创建思想很实用于实际场景多相似性的框架搭建&#xff1b;同种类型或相似类型的C的优势明显因此进行相互嵌套使用 需要在C中使用C类的话&#xff0c;你可以通过C的“extern "C"”语法来实现。这允许你在C代码中使用C的链接方式&#xff0c;而在C代码中使用…

实现RAG:使用LangChain实现图检索查询

你是不是有时会遇到这样的问题&#xff1a;你可能遇到的任何主题或问题&#xff0c;都有大量的文档&#xff0c;但是当尝试将某些内容应用于自己的用途时&#xff0c;突然发现很难找到所需的内容。 在这篇博文中&#xff0c;我们将看一下LangChain是如何实现RAG的&#xff0c;这…

kali基础渗透学习,永恒之蓝,木马实战

简介 kali的学习本质是在linux上对一些攻击软件的使用&#xff0c;只是学习的初期 先在终端切换到root用户&#xff0c;以便于有些工具对权限的要求 下载链接 镜像源kali 攻击流程 公网信息搜集 寻找漏洞&#xff0c;突破口&#xff0c;以进入内网 进入内网&#xff0c…

码蹄集部分题目(第五弹;OJ赛2024年第10期)

&#x1f40b;&#x1f40b;&#x1f40b;竹鼠通讯&#xff08;钻石&#xff1b;分治思想&#xff1b;模板题&#xff1a;就算几何平面点对问题&#xff09; 时间限制&#xff1a;3秒 占用内存&#xff1a;128M &#x1f41f;题目描述 在真空中&#xff0c;一块无限平坦光滑…

秋招算法刷题6

20240408 1.两数之和 &#xff08;时间复杂度是O&#xff08;n的平方&#xff09;&#xff09; public int[] twoSum(int[] nums, int target){int nnums.length; for(int i0;i<n;i){ for(int j1;j<n;j){ if(nums[i][j]target){ …

libVLC 提取视频帧使用OpenGL渲染

在上一节中&#xff0c;我们讲解了如何使用QWidget渲染每一帧视频数据。 由于我们不停的生成的是QImage对象&#xff0c;因此对 CPU 负荷较高。其实在绘制这块我们可以使用 OpenGL去绘制&#xff0c;利用 GPU 减轻 CPU 计算负荷&#xff0c;本节讲解使用OpenGL来绘制每一帧视频…

harmonyOS安装ohpm

下载 下载地址 HUAWEI DevEco Studio和SDK下载和升级 | 华为开发者联盟 初始化 注意&#xff1a;初始化ohpm前&#xff0c;需先完成node.js环境变量配置 1.解压文件&#xff0c;进入commandline-tools-windows-2.0.0.2\command-line-tools\ohpm\bin 2.执行&#xff1a; init.ba…