【蓝桥杯 Web】2022 年第十三届蓝桥杯 Web 大学组省赛真题解析(完整版)
前言
==国赛==真题解析见:第十三届蓝桥杯Web大学组国赛真题解析
文章中出现的题目和代码可戳链接进行保存🏄♂️🏄♂️🏄♂️(蓝桥杯真题):「蓝桥杯」https://www.aliyundrive.com/s/7fsobhSy8dZ 提取码: 34pi
1. 水果拼盘🎖️🎖️🎖️
🌟介绍:目前
CSS3
中新增的Flex弹性布局
已经成为前端布局的首选方案,本题可以使用 Flex 属性快速完成布局。🌟准备:开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:其中:
css/style.css
是需要补充的样式文件
index.html
是主页面。
images
是图片文件夹。在浏览器中预览
index.html
页面效果如下:🌟目标:建议使用
flex
相关属性完成css/style.css
中的 TODO 部分。
禁止修改圆盘的位置和图片的大小。
相同颜色的水果放在相同颜色的圆盘正中间(例如:苹果是红色的就放在红色的圆盘里)。
完成后,页面效果如下:
这道题考察了css3
的flex
属性,非常简单,只需要三行代码✌️✌️:
2. 展开你的扇子🎖️🎖️🎖️
🌟介绍:网站上为了让内容显示不臃肿,我们可以做一个折叠展开的效果。本题将使用
CSS3
实现元素呈扇形展开的效果。🌟准备:开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:其中:
css/style.css
是样式文件。
effect.gif
是最终实现的效果图。
index.html
是主页面。在浏览器中预览
index.html
页面,鼠标悬浮在元素上,元素不会展开,效果如下:🌟目标:请完善
css/sty1e.css
文件(请勿修改文件夹中已给出的代码,以免造成判题无法通过)。当鼠标悬浮在元素上,元素呈扇形展开,页面效果如下所示:完成后的效果见文件夹下面的 gif 图,图片名称为
effect.gif
(提示:可以通过 VSCode 或者浏览器预览 gif 图片)。具体说明如下:
页面上有 12 个相同大小的 div 元素。
这 12 个 div 元素具有不同的背景颜色。
前 6 个 div 元素(
id="item1"~id="item6"
)均为逆时针转动,其最小转动的角度为==10deg==,相邻元素间的角度差为==10deg==.后 6 个 div 元素(
id="item7"~id="item12"
)均为顺时针转动,其最小转动的角度为==10deg==,相邻元素间的角度差为==10deg==.注意,元素 6(
id="item6"
)和元素 7(id="item7"
),各自反方向转动==10deg==,所以它们之间的角度差为==20deg==。
这一题主要考察了CSS3
的Transform
属性,(Transform
属性应用于元素的 2D 或 3D 转换。这个属性允许你将元素旋转,缩放,移动,倾斜等。)
这一题就是使用 rotate
旋转: transform: rotate(角度)
将卡片进行旋转,需要注意的是,角度的单位为deg
,且角度值为负时为逆时针旋转。
这一题虽然不难,但我发现好多人这题都没写出来,究其原因可能就是对css3
的transform
属性不熟悉,或者是忘记了角度的单位deg
,时代在进步,同志需努力💪💪💪
3. 和手机相处的时光🎖️🎖️🎖️
🌟介绍:现在都提倡健康使用手机,那么统计一下在一周中每天使用手机的情况吧!本题使用
ECharts
实现统计手机使用时长的折线图,但是代码中存在 Bug 需要你去修复。🌟准备:开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:其中:
js/echarts.js
是ECharts
文件。
index.html
是主页面。在浏览器中预览index.html
页面效果显示如下所示:🌟目标:请修复
index.html
文件中的 Bug.让页面呈现如下所示的效果:具体说明如下:
用折线图显示了一周当中,每天使用手机的时长。
index.html
文件里var option={}
子中的内容是ECharts
的配置项,该配置中存在 Bug,导致坐标轴显示不正确。在配置项中,
title
是用于设置折线图的标题。在配置项中,
series
是系列,其中的data
是一周中每天使用手机的时间数据,type
是图表的类型为折线图。
这一题考查了echarts
的配置,但考的并不是很深,就简单的考查了坐标轴(xAxis,yAxis)
的类型(type)
配置项:
坐标轴类型。可选:
'value'
数值轴,适用于连续数据。
'category'
类目轴,适用于离散的类目数据。为该类型时类目数据可自动从series.data
或dataset.source
中取,或者可通过xAxis.data
设置类目数据。
'time'
时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
'log'
对数轴。适用于对数数据。
这一题给出的最终效果图可以知道y
轴应该是数值轴,x
轴是类目轴。
而题中之所以出现展示的 bug 问题,是因为 xAxis
和yAxis
的type
配置搞反了🧐:
所以只需将xAxis
和yAxis
的type
配置替换,这一题就结束了(是不是超简单)😉:
4. 灯的颜色变化🎖️🎖️🎖️
🌟介绍:我们经常会看到各种颜色的灯光,本题我们将实现一个颜色会变化的灯的效果。🌟准备:开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:
其中:
index.html
是主页面。
images
是图片文件夹。
js/trafficlights.js
是需要补充的 js 文件。
effect.gif
是最终实现的效果图。在浏览器中预览
index.html
页面效果如下:🌟目标:完成
js/trafficlights.js
文件中的red
、green
和trafficlights
函数,达到以下效果:
页面加载完成==3==秒后灯的颜色变成红色。
在灯的颜色变成红色的==3==秒后,灯的颜色变成绿色(即==6==秒后灯光变成绿色)
随后颜色不再变化。
请通过修改
display
属性来显示不同颜色的灯的图片。完成后的效果见文件夹下面的 gif 图,图片名称为
effect.gif
(提示:可以通过 VSCode 或者浏览器预览 gif 图片)。🌟规定:
请通过修改
display
属性来显示不同颜色的灯的图片,以免造成无法判题通过。请勿修改项目中提供的
id
、class
、函数名称、已有样式,以免造成无法判题通过。请严格按照考试步骤操作,切勿修改考试默认提供项目中的文件名称、文件夹路径等。
这一题也是比较简单的,整体思路就是在定时器里通过JS
来操作DOM
,显示的话将指定元素的display
设置为inline-block
,至于为什么不设置为block
,是因为项目文件默认给出的css
代码中有:
当我们将显示元素的display
设置为block
后会发现效果与要求的不同,设置为inline-block
即可,当我们显示一个新的元素后需要将上一个元素display
设置为none
来进行隐藏,整体代码如下:
5. 东奥大抽奖🎖️🎖️🎖️
🌟介绍:蓝桥云课庆冬奥需要举行一次抽奖活动,我们一起做一个页面提供给云课冬奥抽奖活动使用。🌟准备:开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:
其中:
css/style.css
是样式文件。
index.html
是主页面。
js/jquery.js
是 jQuery 文件。
js/index.js
是需要补充的 js 文件。
effect.gif
是最终实现的效果图。在浏览器中预览
index.html
页面效果如下:🌟目标:找到
index.js
中rolling
函数,使用jQuery
或者js
完善此函数,达到以下效果:
点击开始后,以
class
为li1
的元素为起点,黄色背景(.active
类)在奖项上==顺时针转动==。当转动停止后,将获奖提示显示到页面的
id
为award
元素中。获奖提示必须包含奖项的名称,==该名称需与题目提供的名称完全一致。==转动时间间隔和转动停止条件已给出,请勿修改。
完成后的效果见文件夹下面的 gif 图,图片名称为
effect.gif
(捉示:可以通过 VSCode 或者浏览器预览 gif 图片。
这一题就开始有点难度了,但你基础牢固,思路清晰时其实也挺简单的🤓,难的一点就在怎么根据转动次数动态的获取应该显示active
类的元素。
解题思路:
根据转动次数
time
获取当前转动到的li
。因为总共有 8 个li
,且li
的class
设置的正好是转盘顺时针转动时.li
加对应的序号: 即.li1
是第一次转动到的.li4
是第四次转动到的.li8
是第八次转动到的,转到第九次时回到.li1
。所以我们可以利用==转动次数对 8 取余==来获取对应的DOM
元素li
。但time
是 8 的整数倍时,按照逻辑我们需要获取.li8
,但这时time
对 8 取余等于 0,所以这种情况我们需要单独讨论对获取到的
li
元素添加active
类名,并移除其它li
(兄弟节点)的active
类名。转动停止后根据
active
类名获取对应的li
元素,取其文本值赋值给#award
元素。
6. 蓝桥知识网🎖️🎖️🎖️
🌟介绍:蓝桥为了帮助大家学习,开发了一个知识汇总网站,现在想设计一个简单美观的首页。本题请根据要求来完成一个首页布局。🌟准备:开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:
其中:
css/style.css
是样式文件。
data.txt
是页面数据文件。
index.html
是主页面。
mark,png
是页面参数标注图。🌟目标:请根据
mark.png
图片上的参数标注,补充css/style.css
和index.html
文件中的代码。对于mark.png
上未标注的参数,请结合效果图自行调整。页面版心宽度为==1024px==,请保证==版心居中==,让页面呈现如下图所示的效果:页面数据在data.txt
文件中,直接复制即可。
这一题就单纯的考了HTML
布局和CSS
样式,没啥可说的,我把我写的代码贴出来仅供参考,毕竟HTML
结构和CSS
写法因人而异🧐🧐:
7. 布局切换🎖️🎖️🎖️
🌟介绍:经常用手机购物的同学或许见过这种功能,在浏览商品列表的时候,我们通过点击一个小小的按钮图标,就能快速将数据列表在大图(通常是两列)和列表两种布局间来回切换。本题需要在已提供的基础项目中使用
Vue2.x
知识,实现==切换商品列表布局==的功能。🌟准备:开始答题前,需要先打开本题的项目文件夹,目录结构如下:其中:
effect.gif
是最终实现的效果图。
goodsList.json
是情求需要用到的数据
css
是样式文件夹
images
是图片文件夹
js/vue.js
是Vue2.x
文件。
js/axios.min.js
是axios
文件。
index.html
是页面布局及逻辑。使用
live server
插件启动项目,并在浏览器中预览index.html
页面,显示如下:当前并未实现==数据异步加载和点击右上方按钮切换布局==的效果。==注意:一定要通过 live server 插件启动项目,避免项目无法访问,影响做题==。🌟目标:请在
index.html
文件中补全代码,最终实现数据渲染及切换布局的效果。具体需求如下:
完成数据请求(数据来源
goodsList.json
,请勿修改该文件中提供的数据)。在项目目录下已经提供了axios
,考生可自行选择是否使用。效果如下:2. 点击“列表效果”的图标,图标背景色变为红色(即
class=active
),“大图效果”的图标背景色变为灰色(即class=active
被移除),布局切换为列表效果。效果如下:3. 点击“大图效果”的图标,图标背景色变为红色(即
class=active
),“列表效果”的图标背景色变为灰色(即class=active
被移除),布局切换为大图效果。效果如下:完成后的效果见文件夹下面的 gif 图,图片名称为
effect.gif
(提示:可以通过 VSCode 或者浏览器预览 gif 图片。
解题思路:
发送
axios
请求获取数据我这里先在axios
请求外使用_this
保存了一下this
实例是因为在比赛时我直接在axios
内部使用this
报了错,但比赛过后我再次直接在axios
内部使用this
发现它又不报错了😥😥,为了保险起见还是在外部先保存一下this
为好。data
中添加一个判断字段active
,在 DOM 元素中根据这个active
动态添加相应的class
类这里我设置active
为true
时显示大图效果,为false
时显示列表效果为切换图片添加相应的点击事件,改变
active
字段的值。
8. 购物车🎖️🎖️🎖️
🌟介绍:网上购物已经成为现代人生活中不可或缺的一部分,那么人们最常用到的购物车功能又是如何实现的呢?本题需要在已提供的基础项目中,使用
Vue2.x
的知识,==解决购物车商品管理过程中遇到的问题==。🌟准备:开始答题前,需要先打开本题的项目文件夹,目录结构如下:其中:
base.gif
是初始效果图。
effect.gif
是最终实现的效果图。
js/goods.js
是数据文件。
js/vue.js
是Vue2.x
文件。
css/index.css
是样式文件。
images
是图片文件夹。
index.html
是页面布局及逻辑。在浏览器中预览
index.html
页面,具体显示[见项目文件夹中的base.gif]
,请使用浏览器或者 VS Code 查看 gif 图。当前出现的问题是:
在“商品列表”中点击 N 次“加入购物车”按钮,会在购物车列表中出现 N 个该商品,且初始数量为 1。
在“购物车”中点击商品数据后的加号(“+”)按钮,会在购物车列表中重复出现该商品,且初始数量为 1。
在“购物车”中点击商品数据后的减号(“-”)按钮,并未将商品从购物车中移出。
🌟目标:请在
index.html
文件中补全代码,最终实现购物车商品管理的功能。==注意:请勿修改 js/goods.js 文件中提供的数据!==具体需求如下:(1) 修改addToCart
方法,实现将商品加入到购物车的功能。即:
点击“加入购物车”按钮后,如果购物车中不存在该商品,则将该商品添加到购物车末尾,并初始化数量为 1;
如果购物车中已存在该商品,则只在原数量上+1 即可。
(2) 完善
removeGoods
方法,实现移出购物车商品功能。即:
点击购物车商品后对应的减号(“-”)按钮,将其数量在原数量上-1;
如果减后数量为 0,则将该商品从购物车中移除。
完成后的效果见文件夹下面的 gif 图,图片名称为
effect.gif
(提示:可以通过 VSCode 或者浏览器预览 gif 图片)。
解题思路:
点击添加按钮时,获取点击的该元素在购物车列表
cartList
中的下标,如果该下标不等于-1
,说明cartList
中==已经存在==该元素,这时只需将该元素的num
+1 即可,如果该下标等于-1
,说明cartList
中==没有==该元素,这时将该元素的num
设置为 1,然后push
添加到cartList
中。点击减少按钮时,获取点击的该元素在购物车列表
cartList
中的下标,根据这个下标获取到cartList
对应的那一条数据,判断该数据的num
是否大于 1,如果是,则num--
,否则删除cartList
里的这条数据。
9. 寻找小狼人🎖️🎖️🎖️
🌟介绍:“狼人杀”是一款多人参与的策略类桌面游戏。本题我们一起完成一个简易的狼人杀游戏,让我们找到其中的狼人。🌟准备:开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:
其中:
css/style.css
是样式文件。
index.html
是主页面。
images
是图片文件夹。
js/myarray.js
是需要补充的js
文件。在浏览器中预览
index.html
页面效果如下:🌟目标:在本题
index.html
已经给出的数组中,我们可以通过数组的 filter 方法:cardList,filter((item)=>item,category="werewolf")
返回一个都是狼人的新数组。但是技术主管为了考验大家的技术,规定了在代码中任何地方都不能出现filter
关键字。所以我们需要封装一个myarray
方法来实现类似数组filter
的功能。
狼人比较狡猾,筛选狼人的条件可能会变化,例如
item.name
,请实现一个通用的方法。完成封装后,页面效果会自动完成,效果见文件夹下
effect.gif
(请使用 VS Code 或者浏览器打开 gif 图片)。🌟规定:
禁止在代码中出现
filter
关键字。请严格按照考试步骤操作,切勿修改考试默认提供项目中的文件名称、文件夹路径等。
请勿修改项目中提供的
id
、class
、函数名等名称,以免造成无法判题通过。
这一题我们先看一下需要我们补充的myarray
方法是怎么调用的:
看到调用myarray
方法的方式与调用filter
一样,都是在方法内传入了一个回调函数,要让我们的myarray
方法能够直接被数组.
着调用,第一时间就应该想到需要在数组Array
的原型prototype
上添加myarray
方法,打开myarray.js
文件我们发现已经默认给我们创建好了myarray
方法,那我们就只需要在方法里添加事件处理代码就行了。
这个时候需要明白myarray
里的this
指向的是调用这个方法的数组,在myarray
方法里打印一下这个this
就知道了:
所以我们只需要创建一个新数组,然后遍历this
,将this
里的每一个对象传入传进myarray
方法的回调函数cb
( 即(item) => item.category == "werewolf"
)中,由cb
进行判断是否符合条件,如果符合我们就将这个对象数据加入到我们创建的新数组中,最最最后我们将新数组return
返回即可😉
10. 课程列表🎖️🎖️🎖️
🌟介绍:分页是前端页面中必不可少的一项功能,下面让我们一起来完成一个课程列表的分页吧。🌟准备:开始答题前,需要先打开本题的项目代码文件夹,目录结构如下:
其中:
css/bootstrap.css
是项目中用到bootstrap
样式文件。
index.html
是主页面。
js/carlist.json
是请求需要用到的数据。
js/axios.js
是请求需要用到的axios
文件。
js/index.js
是需要补充的js
文件。
effect.gif
是最终效果图。请通过 VS Code 中的
live server
插件启动本项目,让项目运行起来,效果如下:==注意:一定要通过 live server 插件启动项目,避免项目无法访问,影响做题==。🌟目标:
完成数据请求(数据来源
js/carlist.json
)。在项目目录下已经提供了axios
,考生可自行选择是否使用。完成数据分页显示,每页==5==条数据,默认当前页码为第一页(即
pageNum=1
),按照顺序第一页显示==1-5==条,第二页显示==6-10==条,依此类推。将每条数据显示到list-group
元素中。使用已有代码中list-group
,不要修改list-group
元素的DOM
结构。动态渲染时,list-group
示例代码可删除。当页码为第一页时,上一页为禁用状态(
class=disabled
),点击无任何变化。当页码为最后一页时,下一页为禁用状态(
class=disabled
),点击无任何变化。在
id
为pagination
元素中==正确显示当前页码和总页码(即最大页码)==。当前页码变量使用pageNum
,总页码变量使用maxPage
。请勿修改当前页码和总页码的变量名称,以免造成判题无法通过。完成后的效果见文件夹下面的 gif 图,图片名称为
effect.gif
(提示:可以通过 VSCode 或者浏览器预览 gif 图片)。
代码解析见注释:
这一题有一个小细节🧐🧐🧐,就是给我们的数据中价格是整数number
类型的,但展示的时候变成了货币格式加‘元’,所以我们需要对 price 这个字段数据进行处理一下,这里我是写了一个fmoney
函数对其进行处理。
结语
ok,到此蓝桥杯的题就解决完了,本人比较菜,如果发现文章中出现了问题或者有一些改进之处还请多多指正,在下感激不尽🙏🙏🙏
如果这篇文章对您有所帮助,还请点赞,评论,收藏,关注,一键四连😉😉😉
版权声明: 本文为 InfoQ 作者【海底烧烤店ai】的原创文章。
原文链接:【http://xie.infoq.cn/article/9a4214cd68fc5dd73dc5cde6b】。文章转载请联系作者。
评论