蓝桥杯(Web大学组)2022国赛真题:水果消消乐

思路:

记录点击次数,点击次数为1时,记录点击下标(用于隐藏or消除)、点击种类,点击次数为2时,判断该下标所对应种类与第一次是否相同

相同:两个都visibility:hidden (占位)

不同:两个都display:none

遇到的bug:

蓝桥杯(Web大学组)2022国赛真题:水果消消乐_第1张图片

一开始移除相同盒子之后会出现这个情况,以为是下标搞错了从而导致删成最后两个,后来转念一想,应该是因为每次删完后面所有盒子都会向前移动,所以不需要把外面盒子元素移除,只需要把外面盒子占位隐藏(使用visibility:hidden)

// TODO:请补充代码
function startGame() {
    //总分
    let score = document.querySelector('#score');   //存放分数的span
    let count = 0;  //分数

    let btn = document.querySelector('.btn');
    btn.style.opacity='0'//按钮隐藏
    
    let imgBox = document.querySelectorAll('.img-box');//装图片的盒子
    let img = document.querySelectorAll('img');//图片

    //题目的目标是图片出现后隐藏,一开始以为还要实现淡出淡入还有变大变小的效果,,(后面花太多时间没实现,去看了题目才发现。。。
    // img.forEach((item,index) => {
    //     item.style.transform = `transform: scale(${0})`
    //     item.style.transition = 'all 1s'
    // })
    img.forEach((item,index) => {
        
        item.style.display = 'block'
        // item.style.transform = `transform: scale(${1})`
        // item.style.opacity = 1
        //图片一开始出现后隐藏
        setTimeout(() =>{
            // item.style.transform = `transform: scale(${0})`
            item.style.display = 'none'
        },1000)
        // item.style.display = 'none'
        // item.style.transform = `transform: scale(${1})`
        
    })

    let cli = 0 //点击次数
    let preIndex = null  //上一次点击下标

    //遍历所有盒子
    for(let i = 0;i{
            img[i].style.display = 'block'  //图片出现
            cli++   //点击次数+1

            //判断点击次数,实现相应操作
            if(cli === 1){
                //记录第一次点击下标
                preIndex = k
            }
            if(cli === 2){
                //第二次判断是否相同
                if(img[i].alt === img[preIndex].alt){
                    setTimeout(() =>{
                        //相同:移除(×)
                        // container.removeChild(imgBox[preIndex])
                        // container.removeChild(imgBox[k])

                        //这里如果直接移除dom元素,会导致后面所有盒子都向前移动
                        //所以只需把外面盒子隐藏(占位)
                        imgBox[preIndex].style.visibility = 'hidden'
                        imgBox[k].style.visibility = 'hidden'
                    },1000)


                    //点击次数复原
                    cli = 0

                    //加2分
                    count+=2
                    score.innerHTML = count;
                }
                else{
                    setTimeout(() =>{
                        img[k].style.display = 'none';
                        img[preIndex].style.display = 'none'
                    },1000)
                    //点击次数复原
                    cli = 0

                    //减2分
                    count-=2
                    score.innerHTML = count;
                }
            }
        })
    }
}

你可能感兴趣的:(前端,javascript,css,蓝桥杯)