四、书城开发--1、书城首页的开发

2024-04-08 23:04
文章标签 开发 首页 书城

本文主要是介绍四、书城开发--1、书城首页的开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

书城开发需求分析:

书城首页有标题+搜索->随机推荐->猜你喜欢->热门推荐->精选->分类推荐->全部分类->分类列表

还有搜索列表页、图书详情页

题外话,隔了几天时间去小捣了一下vue3的项目的时候改了一下node版本,结果导致运行这个项目时出现了下面这种错误:这个node版本的东西老烦人了

就说什么node sass版本啥的,我之前把node版本变成了18+的,我这里这个node sass是4.14+的,对应的node版本是14加的,所以切换回版本即可

然后是不是就会遇见下面这个问题,暂时先在路径中加入nginx中某本电子书的路径即可,改成http://localhost:8080/#/ebook/history|电子书路径即可

1、书城首页开发(框架页面+路由配置)

第一步,先把书城这个模块给建立起来,书城所有页面都基于store下的index.vue进行展示

然后我们到router.js中把它加进来,然后先将默认页面指向store

因为你将默认页面指向store,所以你输入localhost:8080后回车它就自动跳到如下store路径展示出如下页面

在store下再加个书城首页,然后在路由中配置,完成路由跳转

2、书城首页(标题+搜索框布局和交互)

建标题搜索组件并且引入到书城首页中

在component中建一个标题栏搜索组件

然后引入到StoreHome组件中

标题栏布局

然后我们可以有两种处理方法使得横向对称排列,第一个是flex布局,第二个是绝对定位,让左箭头固定在左边,抖动图标固定在右边,然后中间的书城在中间自适应

flex布局实现:利用父display:flex; 某子flex:0 0 15%、某子flex:1;即占领剩余的

绝对定位实现:利用绝对定位的left/right,中间wight:100%实现

父绝对定位position:absolude;左子也绝对定位且left:15px;右子也绝对定位right15px;然后中子就wight:100%即可实现

搜索框布局

如下input中:placeholder是提示文本,:v-model是绑定搜索框中输入的文字,注意别漏了要在data中把v-model中定义的searchText定义好,然后进行样式调整,去掉搜索框的黑色边框用borderLnone,注意此时点击搜索框还是会出现黄色的边框

怎么去掉这个点击出现的黄色边框,利用伪类选择器,给它outline:none即可去掉

标题栏和搜索框的交互

向下滑动时标题和搜索框会有交互:首先第一个交互向下滑动时标题文本和右侧的图标会有一个向下的渐影并且消失即过渡动画的过程;第二个交互是搜索框会向上进行移动并且移动到标题栏的位置;第三个交互是搜索框向上移动的过程中会逐渐变窄(难点)以适应屏幕;第四个交互是左侧返回按钮会向下微微移动;第五个交互是向下移动后搜索框那栏下面会产生阴影,当回到最初位置时标题搜索栏阴影会消失;

第一个交互:向下滑动时标题文本和右侧的图标会有一个向下的渐影并且消失的过程
首先给标题栏一个v-show用来控制标题栏是否显示

什么时候显示,滑动的时候,之前在目录那部分有做过就是公共组件scroll滑动组件,把scroll组件引入到storeHome组件中,并且给:top="94"因为标题搜索栏高94,即让滚动组件放置在距离顶部94的地方

然后获取传递向下滑动的偏移量,并且把这个偏移量保存到vuex中

在这个滚动组件中我们之前做过一个handleScroll方法,是用来捕捉让我们屏幕产生滑动的偏移量,这个偏移量是在滚动组件中获取的,然后要传递到书城首页组件中,即子传父嘛,所以子中该函数中获取偏移量后用this.$emit("onScroll",offsetY)把这个偏移量offsetY传出去,父中就通过绑定这个onScroll函数来接收传递过来的偏移量

获取到offsetY后存到vuex中,offsetY改变就去改变vuex中的offsetY,就直接用vuex中offsetY即可

将offsetY放到vuex中并且设置offsetY改变方法,在mixin中通过mapGetters、mapActions获取vuex中存储的offsetY以及setofferY方法。通过vuex放到state中,在mutations和actions中,然后引入mapGetters、mapActions即可使用vuex中的该变量了,因为mapGetters、mapActions放在了mixin中,所以直接引入mixin即相当于引进了mapGetters、mapActions然后即可直接使用该变量了

我们想要ebookMixin专门做阅读器的,我们就再定义一个专门做书架的,如下

就直接引入这个storeHomeMixin即可使用vuex中的offsetY

我们在标题搜索组件中也引入这个storeHomeMixin,然后监听这个偏移量offsetY,即滑动屏幕时标题搜索框要能监听到才行

当监听到偏移量大于0即滑动了就让标题栏隐

然后我们给标题在隐藏时加一些过渡动画
然后让左箭头不跟着标题栏隐藏的,需要把左箭头从标题栏中抽出来并且还需要和标题栏在同一行

我们把左箭头图标拿出来,即左箭头与标题和搜索框同级,因为之前标题栏是相对定位,所以会出现下面这种情况

给标题栏一个绝对定位让标题栏脱离文档流即可让标题栏和左箭头在同一行显示了

第二个交互是搜索框会向上进行移动并且移动到标题栏的位置

左箭头和标题栏倒是同一行显示了,但是搜索框又上去了

所以给搜索框也用绝对定位布局,让它在距离顶部42px的地方

此时标题栏是可以正常移动的

那么接下来就是需要搜索框向上收缩移动,通过改变top值来移动

因为搜索框我们是用绝对定位,所以移动的时候我们有两种方式,一种是使用通常使用的translate3d(),但是这个移动是绝对位置的改变,它改变以后是没有办法影响布局的,而我们这里移动是希望影响布局即搜索框上移后原位置是没有东西占着的,所以需要用第二种位移方式,就是改变top值,之前我们做书签下拉的时候也做过

怎么通过改变top值改变位移呢,如下当移动时即标题栏隐藏时就给它绑定一个样式,这个样式中就让它从原来的top:52px变成距离top为0即可实现了移动

然后添加一下移动的过渡动画即可,即如下,在搜索框样式中添加transition让它去监听top变化,top一旦变化就做0.2秒的匀速动画

第三个交互是搜索框向上移动的过程中会逐渐变窄(难点)以适应屏幕

滚动条出了问题有留白,我们先解决这个

给它定义一个变量scrollTop做滚动条的top值,默认值为94,一旦滑动就变成搜索框的高度52,然后父调子方法即书城首页组件调用滚动条组件中的refresh方法即重新计算滚动条高度

接下来我们就实现让搜索框上移的过程中变窄,这个很常规思路也不一样,我们通过flex实现。

我们定义一个虚拟的dom,也就是这个dom它不展示任何内容,它主要就是原来占位的。

我们左侧那个左箭头它距离左边是15像素的,它本身又是20像素的,所以加在一起就是35像素,所以我们这个占位的dom就给它35像素

即给搜索栏flex布局,然后这个虚拟dom就占固定35像素嘛即flex:0 0 31像素,这个搜索框就flex:1;即自适应收缩嘛

但是我们是移动的过程中才出现这个占位dom的,也是就我们么滑动的情况下这个占位dom应该是flex:0 0 0;即不占位,wight:0;没有宽度的

那怎么实现滑动的时候才有这个样式呢,就给它绑定个样式嘛,即滑动的时候就让占位dom变成35像素的

第四个交互是左侧返回按钮会向下微微移动

原先左箭头高度是42,搜索框移上去后整个高度是52,那么就让左箭头的高度也变成52就好了

同理给左箭头绑定一个样式,改变它的高度为52,即可

第五个交互是向下移动后搜索框那栏下面会产生阴影,当回到最初位置时标题搜索栏阴影会消失

同理绑定样式,在滑动的时候绑定样式,用一个变量来控制是否展示阴影,该变量为false时不展示阴影,滑动时展示阴影,平时为false即不展示,滑动为true就展示

这篇关于四、书城开发--1、书城首页的开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/886622

相关文章

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

手把手教你入门vue+springboot开发(五)--docker部署

文章目录 前言一、前端打包二、后端打包三、docker运行总结 前言 前面我们重点介绍了vue+springboot前后端分离开发的过程,本篇我们结合docker容器来研究一下打包部署过程。 一、前端打包 在VSCode的命令行中输入npm run build可以打包前端代码,出现下图提示表示打包完成。 打包成功后会在前端工程目录生成dist目录,如下图所示: 把

Sapphire开发日志 (十) 关于页面

关于页面 任务介绍 关于页面用户对我组工作量的展示。 实现效果 代码解释 首先封装一个子组件用于展示用户头像和名称。 const UserGrid = ({src,name,size,link,}: {src: any;name: any;size?: any;link?: any;}) => (<Box sx={{ display: "flex", flexDirecti

ROS2从入门到精通4-4:局部控制插件开发案例(以PID算法为例)

目录 0 专栏介绍1 控制插件编写模板1.1 构造控制插件类1.2 注册并导出插件1.3 编译与使用插件 2 基于PID的路径跟踪原理3 控制插件开发案例(PID算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 1 控制插

JavaWeb 学习笔记 spring+jdbc整合开发初步

JdbcTemplate类是Spring的核心类之一,可以在org.springframework.jdbc.core中找到它。JdbcTemplate类在内部已经处理数据库的建立和释放,可以避免一些常见的错误。JdbcTemplate类可直接通过数据源的应用实例化,然后在服务中使用,也可在xml配置中作为JavaBean应用给服务使用直接上一个实例步骤1.xml配置 <?xml version

Android开发的一些不错的学习资料

一个有趣的学习网站:http://hukai.me/android-training-course-in-chinese/index.html 这个是一些基础的教程,看看很好的,赏心悦目。 工具下载网站:http://www.androiddevtools.cn/ 这里的东西很不错,AndroidStudio,UIStyle的压缩工具,开发必备。

同城跑腿APP开发,随叫随到超方便!

随着移动互联网的发展和人们生活节奏的加快,越来越多的人们没有闲暇的时间来做一些繁琐的事情,比如说买药、挂号、排队、送花、取文件等等。如果没有时间去处理这些事情怎么办?开发同城跑腿APP,提供跑腿服务,随时办事随时下单,只需在手机上轻轻一点,就可完成跑腿需求。 首先,跑腿小程序有几种开发方式。第一种是自己组建开发,这种方式比较适合有软件开发能力的企业,比较花费时间和金钱成本。第二种是找到第三方