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

news2024/11/13 9:37:42

蓝桥杯前端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 = 0
    document.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+=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
              }
            }
          })
    })
}

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

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

相关文章

论文阅读——Align before Fuse

Align before Fuse: Vision and Language Representation Learning with Momentum Distillation image-text contrastive learning(ITC)用在单模态,masked language modeling (MLM) and image-text matching (ITM) 用在多模态。 单模态编码器的表示上引入了中间图像…

在dpvs上实现ICMP的源进源出

目录 1. 缘起2. 源码分析3. 让ICMP也走源进源出1. 缘起 在网络通信中,当一个请求报文从源主机到达目标主机,并经过中间路由器或交换机进行转发时,请求报文进入主机A的路径和响应报文离开主机A的路径可能不同。这种情况下,就会出现所谓的三角路径问题。如下图: 具体来说,…

精通Linux的磁盘分区:从理论到实战

前言 在这篇技术文章中,我详细介绍了Linux磁盘分区的理论知识,并结合实际示例演示了如何在CentOS 7系统上使用fdisk工具进行磁盘分区和删除操作。无论您是新手还是有一定经验的用户,本文都将帮助您轻松掌握磁盘分区的关键概念和操作技巧。如…

C++:vector类

vector的介绍及使用 1. vector 是表示可变大小数组的序列容器。 2. 就像数组一样, vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对 vector 的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的…

Linux信号灯

概念:是不同进程间或一个给定进程内部不同线程间同步的机制。类似我们的 PV操作概念: 生产者和消费者场景 P(S) 含义如下:if (信号量的值大于0) { 申请资源的任务继续运行;信号量的值减一;} else { 申…

同态滤波算法详解

同态滤波是一种用于增强图像的方法,特别适用于去除图像中的照明不均和阴影。该算法基于照射反射模型,将图像分解为两个分量:照射分量(illumination component)和反射分量(reflection component)…

腾讯云服务器地域是什么?地域选择看着一篇就够了

腾讯云服务器地域怎么选择?不同地域之间有什么区别?腾讯云哪个地域好?地域选择遵循就近原则,访客距离地域越近网络延迟越低,速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素,地域节点选择…

如何在Windows系统部署Plex影音站点并实现公网访问内网媒体库

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

NO5 蓝桥杯实践之矩阵键盘的使用(或许是一篇求助帖...)

1 任务 2 思路 视频中老师的思路写的代码过长,所以我想了个自己的思路,但是没完全跑出来,求大神指教!!!! 我的思路是首先将矩阵键盘的行和列对应的端口引脚分别存储在类似数组,然后…

【Python】快捷找到最大最小 N 个元素

heapq 简单数据结构取出最大最小N个元素复杂数据结构中取出最大最小N个元素代码解析:lambda Python 中有 heapq 模块可以快捷找到数组中最大最小的 N 个元素; heapq.nlargest(num, arr) # 从arr数组中取出最大num个元素 heapq.nsmallest(num, arr) # …

matplotlib-柱状图

日期:2024.03.14 内容:将matplotlib的常用方法做一个记录,方便后续查找。 # from matplotlib import pyplot as plt# 设置画布大小 plt.figure(figsize(20,8),dpi 300)# 全局设置中文字体 plt.rcParams[font.sans-serif] [Simhei]# 绘制三…

2024年1月粮油调味行业分析(TOP品牌/店铺/商品销售数据分析)

鲸参谋监测的某东1月份粮油调味市场销售数据已出炉! 根据鲸参谋电商数据分析平台显示,今年1月份,某东平台上粮油调味品的销量约6200万件,环比上个月增长45%,同比去年下滑15%;销售额约25亿元,环…

宝妈在家带孩子还是出去工作?足不出户,两者如何兼顾?

我是电商珠珠 很多女性生完孩子之后,就在家当家庭主妇带孩子。部分人舍不得吃穿,把从老公那里要来的钱都给孩子买了东西。自己也想过要出去工作,但是空窗期太久,觉得自己什么都不会,没有企业会要。 前段时间有一个硕…

CUDA下载安装与配置

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 CUDA是什么? CUDA(Compute Unified Device Architecture)是由NVIDIA推出的并行计算平台和编程…

sqllab第十二关通关笔记

知识点: 一般字符型注入分类 单引号闭合双引号闭合这是一个双引号闭合 看界面又是一个输入框的注入;通过admin admin进行登录发现页面还是有回显 直接使用万能密码尝试 构造payload:usernameadminor11 没有任何反应;可能是没加注释符的关闭 构造user…

npm yarn 一起使用报错

项目记录,具有独特性,仅供参考 项目好好的运行,前一天装个测试工具包, 突然就不行了,卸载重装也不行,所有的项目都安装失败,新起一个项目也不行,有时候某个单独安装一个包可以&…

C# 连接neo4j数据库,包括非默认的neo4j默认库

官方文档没找见,自己在源码里面找到的 private string _dbHost "bolt://localhost:7687"; private string _dbUser "neo4j"; private string _dbPassword "******"; private IDriver? _driver;public CQLOperation(string _data…

采购代购系统独立站,接口采集商品上货

采购代购系统独立站的建设与商品上货接口的采集是一个综合性的项目,涉及前端开发、后端开发、数据库设计以及API接口的对接等多个环节。以下是一个大致的步骤和考虑因素: 一、系统规划与需求分析 明确业务需求:确定代购系统的核心功能&…

有没有图像转3D模型的软件?

云端地球是一款免费的在线实景三维建模软件,不需要复杂的技巧,只要需要手机,多拍几张照片,就可以得到完整的三维模型! 无论是大场景倾斜摄影测量还是小场景、小物体建模,都可以通过云端地球将二维数据向三…

Windows系统下载安装Emby结合内网穿透实现公网访问本地影音网站

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…