五、书架开发--1.书架标题组件交互、获取书架数据

添加书架页面,做路由配置

首先添加书架页面,到views中的store中添加一个StoreShelf表示书架

然后到路由中进行注册

然后书城首页的返回键我们是想要点击返回的话就跳转到书架页面,所以如下this.$router.push('/store/shelf')

做书架标题组件

我们在components中创建一个shelf文件夹然后创建一个书架标题组件即ShelfTitle.vue,并且在书架组件即StoreShelf.vue中引入注册使用书架标题组件。然后我们继续做书架标题组件。

我们这个标题下面还有一个副标题,就是你在选择图书的时候这里就会展示出你选了多少本书,所以这个副标题不是一段固定的文本,而是一个变化的,所以我们定义为一个变量,因为它是在变化的,所以我们把它放到computed计算属性中

实现编辑的交互

然后我们去实现编辑逻辑,点击编辑后会变文字变成取消,并且点击编辑后书架下面的副标题才会出现,我们选择书籍后副标题的文本会发生变化会自动统计选择的书籍数量。

点击编辑变取消,点击取消变编辑

也就是我们需要一个变量来控制编辑-取消的显示状态,所以我们到vuex中定义一个变量叫isEditMode,用来控制是否进入编辑模式,同理在mixin.js中引入,然后我们引入mixin,然后我们给编辑按钮添加一个点击事件叫onEditClick,在这个方法中我们让setIsEditMode去修改state中isEditMoed的值,即如果此时是编辑模式就展示取消,如果不是编辑模式就展示编辑,所以在上面我们用三元表达式{{isEditMode?'取消':'编辑'}},如下

编辑模式下副标题展示,不是编辑模式下副标题不展示

这个副标题是否展示是与是否是编辑模式决定,而isEditMode这个变量就控制着是否是编辑模式,所以根据这个变量v-show展示副标题即可

编辑模式中,如果还没有选择书籍,副标题就展示请选择书籍;如果选择了几本书籍,副标题需要展示已选择xx本书籍

我们在vuex中定义一个变量shelfSelected: [],是一个数组变量,记录选择了什么书

首先我们应该获取到当前选择的书数量,然后再根据这个数组中有没有图书,如果有图书即长度不为0则返回已选择多少本图书,如果没有图书则返回请选择图书,如下

实现搜索框的交互

我们用什么布局来做搜索框,使得点击搜索框的时候搜索框向上移动?

我们定义一个全屏的滚动条组件,然后将搜索框距离top顶部有标题栏的高度,书架列表就距离top顶部有标题栏和搜索框的高度,为什么这样做呢,我们采用这种绝对定位来做这个页面有什么好处呢,好处在于,我们点击搜索框的时候搜索框的移动会比较容易实现,因为我们布局这个搜索框的时候是距离top顶部有高度的,我们点击搜索框时就将它的top置为0,即可实现搜索框向上移动的效果了,这比用translate3d更加好做

书架搜索框布局实现

我们在书架组件中引入滚动条组件即Scroll.vue组件,如下我们让它是绝对定位并且覆盖全屏

然后我们components的shelf下定义一个搜索框组件,然后如下,这里搜索图标搜索框叉叉图标是用flex布局实现,因为中间搜索框需要自适应充满剩余的位置嘛。然后设置input里面的显示文字样式是通过&::-webkit-input-placeholder,同理这个搜索框去掉点击显示图框这个是通过&:focus{ outline:none }实现,搜索框的边框是通过border:none来实现

然后来实现这个叉叉图标的交互

搜索框的叉叉图标是搜索框中有内容时才展示,没有内容时不展示,所以定义一个变量叫searchText来保存搜索框中的输入的文本,然后v-show去判断这个变量长度大于0就说明有输入的文字就展示叉叉图标,否则不展示叉叉图标;

然后给叉叉图标加个点击事件,点击事件中就把搜索框中searchText置为空即可实现点击叉叉图标就把搜索框中文字删除的交互

现在我们实现搜索框的移动

我们点击搜索框后,搜索框上移,我们给整个搜索框绑定一个class,这个样式就是让搜索框上移,搜索框上移的条件就是点击了搜索框,所以是:class="{'search-top':ifInputClicked}",这个样式中就把top置为0即可,然后再给个transition过渡动画,观测top值

然后搜索框上移后标题栏需要隐藏,点击取消可以让搜索框下移回来并且展示标题栏,所以

接下来实现点击搜索框后下面的tab展示

首先tab栏是否显示是看搜索框是否是被点击状态,所以用v-if=ifInputClicked来控制tab是否显示;然后tab栏不是直接三个文本默认\按进度\按购买直接展示出来那么简单,因为你点击它是需要被知道你点击的是哪一个所以这三个需要有个id来识别是哪个tab,所以computed中定义一个tabs属性,里面返回一个数组,数组中就是这三个tab的文本和id,然后去循环展示出这三个文本;然后你点击某一个后你需要知道当前点击的是哪一个,所以需要定义一个变量selectedTab来保存你点击的那个tab的id,所以给整个tab组件绑定一个点击事件,点击就把当前点击的tab的id传过去,然后点击事件中就去改变这个selectedTab的值;最后被点击的tab我们想要它有高光样式,所以给它们绑定一个class,如果当前的tab的id等于selectedTab的id即展示高光样式

然后这个tab也是用绝对定位,它top是52就是搜索框的高度;然后给display:flex;然后每个tab都是flex:1;这样它们就都是自适应撑满

接下来我们去实现书架里的图书

图书列表方框中的三种状态

这里图书分为三种状态:第一种为默认状态;第二种状态就是分类状态,就是当我们把几本书加入同一类之后它会显示出一个分类模块;第三种状态就是我们的添加状态。

三种状态就需要有三种组件支持,然后我们通过动态组件,动态的来判断当前应该属于哪种状态,这是图书书架的实现思路。

首先我们要获取数据源

如下就是我们准备在mock中的书架数据

然后我们要先到api的store.js中配置获取mock模拟数据的书架接口

然后需要到StoreShelf中获取这个mock模拟的书架数据,把这个shelf接口方法引入进来,然后在mouted钩子函数中调用这个方法

如下我们可以看到返回的数据,其中这个type是1则表示是个图书,那么它的title就是这个图书名,如果type是2则表示它是个分类,那么它的title就是这个分类名称就是你分类起的分类名,然后这个分类中的itemList就是这个分类中的图书。type为3是添加状态,是我们手动实现,等一下会做

然后处理数据,我们在vuex中定义一个数组变量,保存我们获取回来的书架数据。这样我们数据就准备好了

方框组件与三种组件结构关系

接下来我们实现书架图书列表组件,我们在components中的shelf中增加一个ShelfList组件,然后ShelfList组件下的每一块就是一个ShelfItem.vue组件(就是这一块不是一个图书就是一个分类不然就是添加状态的图片),然后每个框下有可能是一本书或者一个分类或者一个添加状态,所以还需要三个子组件分别表示这三种状态,状态1即默认图书我们叫ShelfItemImage.vue,状态2即分类组件我们叫它ShelfItemCategory.vue,状态3即添加组件我们叫ShelfItemAdd.vue

然后ShelfItem就那方框中我们用使用动态组件,即动态的去加载这里的三个组件,我们根据传入的参数然后使用动态组件判断三个组件到底加载哪一个

然后我们去实现这些组件

首先我们来实现ShelfList组件即图书列表组件即搜索框下哪些图书

然后我们发现滑动的时候那个搜索框也跟着滑上去了,我们是希望搜索框固定在上面不跟着滑动的,所以要固定搜索框,所以在ShelfSearch的搜索框中我们绑定一个样式,即整个搜索栏被点击的时候是固定在底部的,所以用上position:fixed;固定定位给它top:0;left:0;即固定在顶部,这样你鼓动图书列表是时候就不会带跑它啦

然后滚动的时候我们希望搜索框下面有阴影,就接收滚动条组件传递过来的偏移量,然后监测这个偏移量嘛,一旦偏移量大于0说明滑动了,那就展示阴影

如下我们在书架组件中绑定@onSrcoll,然后定义一个onScroll方法,这个方法中接收滚动条组件中传过来的值;滚动条组件中滚动条一旦滚动就会触发$emit把偏移量传过来。得到滚动偏移量后我们就把vuex中的偏移量值更新

然后我们到标题栏组件中,定义一个变量叫ifHideShadow用来控制是否显示阴影,默认为true即不显示阴影;然后我们watch监听vuex中的偏移量,如果偏移量大于0即展示阴影即置为false,否则置为true,然后给标题搜索整个栏绑定一个样式,即ifHideShadow为true时则显示这个样式,这个样式即置box-shodow为none,平时就box-shadow:0 2px 2px 0;

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

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

相关文章

d3dcompiler_47.dll文件的缺失问题要怎么解决?四种修复d3dcompiler_47.dll的方法

d3dcompiler_47.dll文件的丢失,其实还是比较少见的,毕竟这个dll文件相对来说还是比较稳定的,他是一个固定软件的一个功能dll文件,不过既然这个d3dcompiler_47.dll丢失了,今天我们就来给大家详细的说一说吧。 一.d3dcom…

“人工智能+数字人”,让数字技术赋能多领域智能化管理、数字化服务

AI数字人结合了语音合成、语音识别、语义理解、图像处理、虚拟形象驱动等多项AI核心技术,可以实现导览服务、信息播报、互动交流、业务咨询等智能化功能。 如今,AI数字人逐渐被政务、文旅、展馆展厅、博物馆、数字会议、金融、校园等等领域多元化应用&am…

猝不及防 CCF-B ICPP 2024投稿延期至4月22日提交摘要 机会来了别错过

会议之眼 快讯 第53届ICPP(International Conference on Parallel Processing)即国际并行处理会议将于 2024年 8月12日-15日在瑞典哥特兰岛举行!ICPP是世界上最古老的连续举办的并行计算计算机科学会议之一。它是学术界、工业界和政府的研究…

git修改本地提交历史邮箱地址

1、Git(Git) 2、修改Git本地提交历史中的邮箱地址 使用 git rebase 命令进行交互式重置。 具体步骤如下:(https://git-scm.com/docs/git-rebase) 1、查看提交历史: 使用 git log 命令列出提交历史&#x…

fs.1.10 ON CENTOS7 dockerfile模式

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs.1.10的流程记录,本文使用dockerfile模式。 环境 docker engine:Version 24.0.6 centos docker:7 freeswitch:v1.10.7 dockerfile 创建空…

4月11号总结

java学习 一.io流 简介:io,i代表in,指的是输入,o代表输出。io流是用于处理输入和输出数据的机制。Java的io流主要分为字节流和字符流两种类型。这些流可以用于读取和写入不同类型的数据,如文本,图片&#…

【洛谷】P1216 数字三角形

import java.io.IOException; import java.util.Scanner;public class P1216_数字三角形_DP_原版 {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] dp new int[n 1][n 1];int t;for (int i 1; i < n; i) {fo…

Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发

相关文章: Ollama教程——入门&#xff1a;开启本地大型语言模型开发之旅 Ollama教程——模型&#xff1a;如何将模型高效导入到ollama框架 Ollama教程——兼容OpenAI API&#xff1a;高效利用兼容OpenAI的API进行AI项目开发 Ollama教程——兼容OpenAI API&#xff1a;高效利用…

推荐一个大学生可以参加的榜单赛事|人工智能赛道

【榜单赛事】第十四届全国大学生计算机应用能力与数字素养大赛 - 人工智能产业应用赛道人工智能编程赛项 正在火热报名中 本赛道定位于人工智能产业应用和实践&#xff0c;把人工智能产业真实的技能要求、能力要求体现在竞赛内容设计当中&#xff0c;并在竞赛环节融入实战项目…

软考121-上午题-【软件工程】-敏捷方法

一、敏捷方法 敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性&#xff0c;敏捷方法使用户能够在开发周期的后期增加或改变需求。 敏捷过程的典型方法有很多&#xff0c;每一种方法基于一套原则&#xff0c;这…

阻塞队列和基本实现

1. 什么是阻塞队列 阻塞队列,从名字上看,它首先应该是一个队列,满足先进先出的原则.其次,我们来理解一下"阻塞"这个词.我们之前其实见过这个词,在介绍线程的状态时,我们讲过有一种状态就是阻塞状态.所谓的"阻塞",也就是一种等待,需要其他的线程进行唤醒,在…

跟TED演讲学英文:The next grand challenge for AI by Jim Fan

The next grand challenge for AI Link: https://www.ted.com/talks/jim_fan_the_next_grand_challenge_for_ai? Speaker: Jim Fan Date: October 2023 文章目录 The next grand challenge for AIIntroductionVocabularyTranscriptSummary后记 Introduction Researcher Jim…

Terraform 语法配置

配置语法 Terraform 的配置文件都是以 .tf 为后缀Terraform 支持两种模式 HCL、JSON Provider 插件 providers 地址&#xff1a;Terraform Registry Terraform 通过 provider 管理基础设施&#xff0c;使用 provider 与云供应商 API 进行交互&#xff0c;每个 Provider 都包含…

多线程的学习

多线程编辑&#xff1a; 可以简单理解进程是一个软件 而线程就是一个软件中多个可以同时运行的功能 实现多线程的第一种方式&#xff1a;使用Thead类我们再自己创造一个类继承于这个类我们在对Thead方法进行重写&#xff0c;注意我们再重写的时候一定要加上Override这行 我犯下…

多线程回答的滚瓜烂熟,面试官问我虚线程了解吗?我说不太了解!

Java虚拟线程&#xff08;Virtual Threads&#xff09;标志着Java在并发编程领域的一次重大飞跃&#xff0c;特别是从Java 21版本开始。这项新技术的引入旨在克服传统多线程和线程池存在的挑战。 多线程和线程池 在Java中&#xff0c;传统的多线程编程依赖于Thread类或实现Ru…

2024 年“认证杯”数学中国数学建模网络挑战赛

题目 C题 云中的海盐 巴黎气候协定提出的目标是&#xff1a;在 2100 年前&#xff0c;把全球平均气温相对于工业 革命以前的气温升幅控制在不超过 2 摄氏度的水平&#xff0c;并为 1.5 摄氏度而努力。 但事实上&#xff0c;许多之前的研究已经指出&#xff0c;全球的碳排放以及…

主从数据同步原理

2.2.主从数据同步原理 2.2.1.全量同步 主从第一次建立连接时&#xff0c;会执行全量同步&#xff0c;将master节点的所有数据都拷贝给slave节点&#xff0c;流程&#xff1a; 这里有一个问题&#xff0c;master如何得知salve是第一次来连接呢&#xff1f;&#xff1f; 有几个…

Linux操作系统的学习

Linux系统的目录结构 / 是所有目录的顶点目录结构像一颗倒挂的树 Linux常用命令 常见命令 序号命令对应英文作用1lslist查看当前目录下的内容2pwdprint work directory查看当前所在目录3cd [目录名]change directory切换目录4touch [文件名]touch如果文件不存在&#xff0c;新…

6.11物联网RK3399项目开发实录-驱动开发之定时器的使用(wulianjishu666)

嵌入式实战开发例程【珍贵收藏&#xff0c;开发必备】&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1tkDBNH9R3iAaHOG1Zj9q1Q?pwdt41u 定时器使用 前言 RK3399有 12 个 Timers (timer0-timer11)&#xff0c;有 12 个 Secure Timers(stimer0~stimer11) 和 2 个 …

鸿蒙实战开发-如何实现标准化数据定义与描述的功能。

介绍 本示例主要使用ohos.data.uniformTypeDescriptor 展示了标准化数据定义与描述的功能&#xff0c;在新增预置媒体文件后&#xff0c;对媒体文件的utd标准类型获取、utd类型归属类型查询、获取文件对应的utd类型的默认图标、支持自定义数据类型等功能。 实现过程中还使用到…