蓝桥杯前端Web赛道-水果消消乐

蓝桥杯前端Web赛道-水果消消乐

题目链接:2.水果消消乐 - 蓝桥云课 (lanqiao.cn)

题目要求可查看题目文件夹中的effect.gif文件。

下面开始分析题目需要我们做什么

首先显而易见的是,当点到相同的水果的时候,对于的格子消失;如果翻开的第二个水果和第一个水果不一样,就把水果的图案隐藏掉,成功就加2分并渲染到题目所在的位置是,反之则减两分。

所以总结下来有两点

  • 匹配先后点击的水果是否相同
  • 相同则加分并消除当前水果所在的方块,不同则减分当前水果恢复原状

观察dom结构我们发现相同水果的图片里的alt内容是相同的,我们可以利用这点来解决匹配先后点击的水果是否相同的问题。
在这里插入图片描述

而消除当前的水果方块,水果恢复原状可以使用opacity来控制透明度

题目还会暂时的展示所有的水果,所以我们还需要使用到setTimeout来控制时间。

现在开始写代码,首先我们要控制开始按钮的消失,通过观察dom结构拿到按钮的id

document.querySelector('#start').style.display = 'none'

然后我们再来做暂时显示水果的功能,题目的css文件里把水果使用display:none 隐藏了起来,所以我们需要先设置为block 然后再通过opacity来令他们消失

   document.querySelectorAll('.img-box img').forEach((item)=>{item.style.display = 'block' setTimeout(()=>{item.style.opacity = '0'  },500)})

因为我们需要控制所有的img,就需要用到遍历,使用querySelectorAll找到dom结构,如果不知道该怎么准确的找到元素可以使用console.log大法来进行测试

setTimeout() 全局函数 - Web API 接口参考 | MDN (mozilla.org)

此时达到了我们预期的效果,点击开始按钮消失,并且水果暂时的显示在了屏幕上,题目并没有对css效果做出限制,所以也就可以不用写和gif一样的过渡效果

然后就是进行判断当前点击的两张图片是否是同一个水果的操作。刚刚已经提到我们可以利用alt进行对比,于是我们需要用到监听器来监听到鼠标点击动作,可以直接在现有的循环里直接监听,同样我们也可以使用console.log来确定我们是否找错了元素

    item.addEventListener('click',()=>{if(item.style.opacity=='0') {arr.push(item)item.style.opacity = '1'}   })

这里我们利用判断当前的元素是否已经显示在页面上,来决定要不要将元素放入数组里,记得要在最顶上把数组定义好,然后再将该元素显示出来。

之后我们就应该进行判断了

if (arr.length >= 2) {if (arr[0].alt === arr[1].alt) {arr[0].parentElement.style.opacity = "0";arr[1].parentElement.style.opacity = "0";arr = [];} else {arr[0].style.opacity = "0";arr[1].style.opacity = "0";arr = [];}}

这里我们先判断数组内的元素是否已经有两个元素,这样我们才能继续对比然后对比这俩元素是否为相同的水果,如果是,我们就把当前元素的父元素透明度设置为0。
观察dom结构我们可以清楚的看到,此时的item也就是img是包裹在img-box里的,所以如果我们想要让方块消失,就必须控制它的父元素显示效果,然后我们再将数组清零,方便下一次操作。那么如果我们已经点击两个方块了,他们的不是一样的水果,就需要将他们再隐藏,同时也需要将数组清零,方便下一次操作

现在就剩下计分的需求了,由于每次判断后,分数就应该相应的发生变化,所以我们将分数的改变放到我们刚刚的判断里然后再渲染上去

 if (arr.length >= 2) {if (arr[0].alt === arr[1].alt) {arr[0].parentElement.style.opacity = "0";arr[1].parentElement.style.opacity = "0";arr = [];score += 2;document.querySelector("#score").innerHTML = score;} else {arr[0].style.opacity = "0";arr[1].style.opacity = "0";arr = [];score -= 2;document.querySelector("#score").innerHTML = score;}}

至此完成题目所有要求,由于题目没有要求效果必须要和实例一样,所以我并没有留显示水果的时间,所以点击第二个水果的时候会出现看不到它的情况,代码直接就往下走继续判断了,实际上代码也是可以通过的,如果想要达到题目的效果,使用setTimeout() 就可以实现

完整代码如下:

// TODO:请补充代码
function startGame() {let arr = []let score = 0document.querySelector('#start').style.display = 'none'document.querySelectorAll('.img-box img').forEach((item)=>{item.style.display = 'block' setTimeout(()=>{item.style.opacity = '0'  },500)item.addEventListener('click',()=>{if(item.style.opacity=='0') {arr.push(item)}item.style.opacity = '1'if(arr.length>=2){if(arr[0].alt===arr[1].alt) {arr[0].parentElement.style.opacity = '0'arr[1].parentElement.style.opacity = '0'arr = []score+=2document.querySelector('#score').innerHTML = score}else {arr[0].style.opacity = '0'arr[1].style.opacity = '0'arr = []score-=2document.querySelector('#score').innerHTML = score}}})})
}

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

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

相关文章

想要自己制作一款游戏,需要掌握哪些基本技能?

你是否曾经沉浸在游戏的世界中,感受到游戏带来的无限乐趣?你是否曾经梦想能够亲手制作一款属于自己的游戏,为玩家带来独特的体验?然而,要实现自己的游戏创作梦想,并不是一件轻松的事情。需要掌握各种技能和…

ElasticSearch深度分页问题如何解决

文章目录 概述解决方法深度分页方式from size深度分页之scrollsearch_after 三种分页方式比较 概述 Elasticsearch 的深度分页问题是指在大数据集上进行大量分页查询时可能导致的性能下降和资源消耗增加的情况。这种情况通常发生在需要访问大量数据的情形下,比如用…

vue3 表单数据发生改变时,切换路由给我提示

一、需求说明 1、当表单数据未发生改变时,save和discard按钮不可点击,路由切换时无提示(如下图所示) 2、当表单数据发生改变时,save和discard按钮可点击,路由切换时出现提示(如下图所示&#x…

UEG/F-1H1D抗干扰中间继电器 额定电压DC220V 导轨安装 JOSEF约瑟

系列型号 UEG/F-2H2D抗干扰中间继电器;UEG/F-1H1D抗干扰中间继电器; UEG/F-10H-L抗干扰中间继电器;UEG/F-10H-L2抗干扰中间继电器; UEG/F-10HS抗干扰中间继电器;UEG/F-2DPDT抗干扰中间继电器; UEG/F-4DPDT抗干扰中间继电器;UEG/F-8DPDT抗干扰中间继电器; UEG/F-2H抗干扰中间继…

【CSS面试题】外边距折叠的原因和解决

参考文章 什么时候出现外边距塌陷 外边距塌陷,也叫外边距折叠,在普通文档流中,在垂直方向上的2个或多个相邻的块级元素(父子或者兄弟)外边距合并成一个外边距的现象,不过只有上下外边距才会有塌陷&#x…

都2024年了还不会vue3?从0到1 用vite搭建vue3项目,开箱即用

Vue.js(通常简称为Vue)是一个开源的JavaScript框架,用于构建用户界面和单页应用程序(SPA)。它于2014年首次发布,由Evan You创建,旨在提供一个更轻量、更易于学习的前端框架。Vue的核心库专注于视…

工业界真实的推荐系统(小红书)-排序:精排(模型、特征、融分公式、数据服务)、粗排(三塔模型)

课程特点:系统、清晰、实用,原理和落地经验兼具 b站:https://www.bilibili.com/video/BV1HZ421U77y/?spm_id_from333.337.search-card.all.click&vd_sourceb60d8ab7e659b10ea6ea743ede0c5b48 讲义:https://github.com/wangsh…

51-30 World Model | 自动驾驶的世界模型:综述

24年3月,澳门大学和夏威夷大学联合发布的工作,World Models for Autonomous Driving: An Initial Survey。花时间反复看了几遍,刚开始觉得世界模型没用,空洞无序,根本不可能部署到实车上,后面逐渐相信&…

msvcp100.dll文件丢失的多种解决手法,讲解四种比较靠谱的修复方法

在本次讨论中,我们将深入探讨电脑中出现msvcp100.dll文件丢失的各种可能原因,并且提供详尽的步骤介绍,帮助你理解并解决msvcp100.dll缺失问题的修复方案。通过这些方法,即使遇到此类问题,你也能够有效地恢复文件&#…

AI智能分析网关V4烟火识别技术在沿街商铺消防安全管理中的应用

一、背景需求 2024年3月13日,廊坊三河市燕郊镇一炸鸡店发生疑似燃气泄漏引发的爆燃事故,应急、消防、卫健等有关部门第一时间赶赴现场全力救援处置。目前现场搜救工作已经结束,事故善后处置、原因调查等工作正在进行中。本次事故也引发了社会…

【linux深入剖析】操作系统与用户之间的接口:自定义简易shell制作全过程

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.shell2.自定义shell的准…

基于SpringBoot的“家乡特色推荐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“家乡特色推荐系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 文章分享界面…