【蓝桥杯真题】当蓝桥杯开设Web组之后,对几题能拿省一?

news2025/7/4 7:04:33

目录

🏆难度分析

🏆一、水果拼盘

🏆二、展开你的扇子

🏆三、和手机相处的时光

🏆四、灯的颜色变化

🏆五、冬奥大抽奖

🏆六、蓝桥知识网

🏆七、布局切换

🏆八、购物车

🏆九、寻找小狼人

🏆十、课程列表

🏆结束语


🏆难度分析

        这是蓝桥杯第一年开设web开发组,我记得当时蓝桥杯组委会在开会时就说过,因为现在不知道广大同学们的真实web水平,本次省赛会比较简单,来试试大家的真实水平,再后续的国赛就会提高难度;

        所以我们可以看到,这次省赛的题目都非常基础,我也是有幸混了一个省一:

         当然,我也没有将所有的题目都写得很完美,所以我在一等奖中是排在中后位的,下面我们一起来看看题目,好好复盘一下本次比赛;


🏆一、水果拼盘

介绍:

        目前 CSS3 中新增的 Flex 弹性布局已经成为前端页面布局的首选方案,本题可以使用 Flex 属性快速完成布局。

/* TODO:待补充代码 */

#pond {
    /*使用flex布局,允许列排列,允许换行*/
    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
}


/* 以下代码不需要修改 */

.fruit.apple .bg {
    background-image: url(../images/apple.svg);
}

        分析:第一题考察flex布局,我们改一下排列的方向,并允许换行,秒掉;


🏆二、展开你的扇子

介绍

网站上为了让内容显示不臃肿,  我们可以做一个折叠展开的效果。本题将使用  CSS3 实现元素呈扇形展开的效果。

  

页面上有 12 个相同大小的 div 元素

 12  div 元素具有不同的背景颜色

 6  div 元素  (id="item1"~id="item6")均为逆时针转动,其最 小转动的角度为 10 deg,相邻元素间的角度差为 10 deg

 6  div 元素  (id="item7"~id="item12")均为顺时针转动,其最 小转动的角度为 10 deg,相邻元素间的角度差为 10 deg

注意,元素 6  (id="item6")和元素 7  (id="item7"),各自反方向转  10 deg,所以它们之间的角度差为 20 deg


/*TODO:请补充 CSS 代码*/

#box:hover #item1 {
    transform: rotate(-60deg);
}
#box:hover #item2 {
    transform: rotate(-50deg);
}
#box:hover #item3 {
    transform: rotate(-40deg);
}
#box:hover #item4 {
    transform: rotate(-30deg);
}
#box:hover #item5 {
    transform: rotate(-20deg);
}
#box:hover #item6 {
    transform: rotate(-10deg);
}
#box:hover #item7 {
    transform: rotate(10deg);
}
#box:hover #item8 {
    transform: rotate(20deg);
}
#box:hover #item9 {
    transform: rotate(30deg);
}
#box:hover #item10 {
    transform: rotate(40deg);
}
#box:hover #item11 {
    transform: rotate(50deg);
}
#box:hover #item12 {
    transform: rotate(60deg);
}

         这题考察伪类:hover的使用,再用transform实现旋转就行;


🏆三、和手机相处的时光

介绍

现在都提倡健康使用手机,  那么统计一下在一周中每天使用手机的情况吧! 本题使用 ECharts 实现统计手机使用时长的折线图,但是代码中存在 Bug 需要你去修复。

用折线图显示了一周当中,每天使用手机的时长

index.html 文件里 var option = {} 中的内容是 ECharts 的配置

,该配置中存在 Bug,  导致坐标轴显示不正确

在配置项中,  title 是用于设置折线图的标题

在配置项中,  series 是系列,其中的 data 是一周中每天使用手机的时间 数据,  type 是图表的类型为折线图。

<script>
    var chartDom = document.getElementById("main");
    var myChart = echarts.init(chartDom);
    /*TODO:ECharts 的配置中存在错误,请改正*/
    var option = {
        title: {
            text: "一周的手机使用时长",
        },
        xAxis: {
            type: "category",
            data: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
        },
        yAxis: {
            type: "value"
        },
        series: [{
            data: [2.5, 2, 2.6, 3.2, 4, 6, 5],
            type: "line",
        }, ],
    };
    myChart.setOption(option);
</script>

         这个题可能是一个脑筋急转弯,他把横轴和竖轴放反了;


🏆四、灯的颜色变化

介绍

我们经常会看到各种颜色的灯光,本题我们将实现一个颜色会变化的灯的效果。

动态效果

目标

完成 js/trafficlights.js 文件中的 red、  green 和 trafficlights 函数,达 到以下效果:

1. 页面加载完成 3 秒后灯的颜色变成红色。

2. 在灯的颜色变成红色的 3 秒后,灯的颜色变成绿色(即 6 秒后灯光变成绿 色)。

3. 随后颜色不再变化。

4. 请通过修改 display属性来显示不同颜色的灯的图片。

// TODO:完善此函数 显示红色颜色的灯
function red() {
    let red = document.querySelector('#redlight');
    let default_ = document.querySelector('#defaultlight');
    default_.style.display = 'none';
    red.style.display = 'inline-block';
}

// TODO:完善此函数  显示绿色颜色的灯
function green() {
    let red = document.querySelector('#redlight');
    let green_ = document.querySelector('#greenlight');
    red.style.display = 'none';
    green_.style.display = 'inline-block';
}

// TODO:完善此函数
function trafficlights() {
    setTimeout(() => {
        red();
        setTimeout(() => {
            green();
        }, 3000)
    }, 3000)

}

trafficlights();

         这题无非是控制DOM节点,然后用定时器控制事件;


🏆五、冬奥大抽奖

介绍

蓝桥云课庆冬奥需要举行一次抽奖活动,我们一起做一个页面提供给云课冬奥抽奖活动使用。

动态效果
​​​​

目标

找到 index.js 中 rolling 函数,使用 jQuery 或者 js 完善此函数,达到以下效 果:

1. 选击开始后,以 class 为 li1 的元素为起选,黄色背景  (.active 类) 在奖项上顺时针转动。

2. 当转动停止后,将获奖提示显示到页面的 id 为 award 元素中。获奖提示 必须包含奖项的名称,  该名称需与题目提供的名称完全一致。

3. 转动时间间隔和转动停止条件已给出,请勿修改。

let rollTime; // 定义定时器变量用来清除定时器
let time = 0; // 转动次数
let speed = 300; // 转动时间间隔
let times; // 总转动次数

// 开始按钮点击事件后开始抽奖
$("#start").on("click", function() {
    $("#award").text(""); //清空中奖信息
    times = parseInt(Math.random() * (20 - 30 + 1) + 20, 10); // 定义总转动次数,随机20-30次
    rolling();
});

// TODO:请完善此函数
function rolling() {
    time++; // 转动次数加
    console.log(time, '间隔', times)
    clearTimeout(rollTime);
    rollTime = setTimeout(() => {
        window.requestAnimationFrame(rolling); // 进行递归动画
        let count = time % 8;
        if (time % 8 == 0) {
            count = 8;
        }
        let node = document.querySelector(`.li${count}`);
        let count2 = count - 1;
        if (count2 == 0) {
            count2 = 8;
        }
        let node2 = document.querySelector(`.li${count2}`);
        node2.classList.remove('active');
        node.classList.add('active');
    }, speed);

    // time > times 转动停止
    if (time > times) {
        clearInterval(rollTime);
        let c = times % 8;
        if (times % 8 == 0) {
            c = 8;
        }
        let helper = document.querySelector(`.li${c}`);
        let input = document.querySelector('#award');
        let content = helper.innerHTML;
        input.innerHTML = `恭喜您抽中了${content}!!!`
        console.log(content);
        time = 0;
        return;
    }
}

         这个题。。需要通过id来控制转动,然后用innerHTML写入文本;


🏆六、蓝桥知识网

介绍

蓝桥为了帮助大家学冬,开发了一个知识汇总网站,现在想设计一个简单美观的首页。本题请根据要求来完成一个首页布局。

请根据 mark.png 图片上的参数标注,补充 css/style.css index.html 文件 中的代码。对于 mark.png 上未标注的参数,请结合效果图自行调整

页面版心宽度为 1024px,请保证版心居中,让页面呈现如下图所示的效果:

         这个题,明人不说暗话,没有写完,不晓得给没给分数。。。大家自己写一下就行,只是考察你写页面的能力;


🏆七、布局切换

介绍

经常用手机购物的同学或许见过这种功能,在浏览商品列表的时候,我们通过选击一 个小小的按钮图标,就能快速将数据列表在大图(通常是两列)和列表两种布局间来回切换。

本题需要在已提供的基础项目中使用 Vue 2.x 知识,实现切换商品列表布局的功能。

<body>
    <div id="app" v-cloak>
        <!-- TODO:请在下面实现需求 -->
        <div class="bar">
            <a class="grid-icon active" @click="grid"></a>
            <a class="list-icon" @click="list"></a>
        </div>
        <!--grid 示例代码,动态渲染时可删除-->
        <ul class="grid" v-if="flag">
            <li v-for="(item,index) in goodsList">
                <a href="#/3814" target="_blank"> <img :src=item.image.large /></a>
            </li>
        </ul>
        <ul class="list" v-if="!flag">
            <li v-for="(item,index) in goodsList">
                <a href="#/3814" target="_blank"> <img :src=item.image.small /></a>
                <p>{{item.title}}</p>
            </li>
        </ul>
    </div>
</body>

</html>
<script type="text/javascript">
    var vm = new Vue({
        el: "#app",
        data: {
            goodsList: [],
            flag: 1
        },
        mounted() {
            // TODO:补全代码实现需求
            axios.get('goodsList.json').then(val => {
                this.goodsList = val.data;
            })
        },
        methods: {
            grid: function() {
                let all = document.querySelectorAll('.bar>a')
                let c = document.querySelector('.grid-icon');
                for (let i = 0; i < all.length; i++) {
                    all[i].classList.remove('active')
                }
                this.flag = 1;
                c.classList.add('active');
            },
            list: function() {
                let all = document.querySelectorAll('.bar>a')
                let b = document.querySelector('.list-icon');
                for (let i = 0; i < all.length; i++) {
                    all[i].classList.remove('active')
                }
                this.flag = 0;
                b.classList.add('active');
            }
        }
    });
</script>

         这个题考察vue2的基础知识,就看你v-if和v-for指令熟不熟了;


🏆八、购物车

介绍

网上购物已经成为现代制生活中不可或缺的一部分,那么制们最常用到的购物车功能 又是如何实现的呢?

本题需要在已提供的基础项目中,使用 Vue 2.x 的知识,  解决购物车商品管理过程中遇到的问题。

当前出现的问题是:

·   "商品列表"中选击  N  "加入购物车"按钮,会在购物车列表中出现

N 个该商品,且初始数量为 1

·   "购物车"中选击商品数据后的加号("+")按钮,会在购物车列表中

重复出现该商品,且初始数量为 1

·   "购物车"中选击商品数据后的减号("-")按钮,并未将商品从购物

车中移出

<script>
    new Vue({
        el: '#app',
        data: {
            cartList: [],
            goodsList: []
        },
        mounted() {
            this.goodsList = GoodsArr;
        },
        methods: {
            addToCart(goods) {
                // TODO:修改当前函数,实现购物车加入商品需求
                let flag = false;
                let id;
                for (let i = 0; i < this.cartList.length; i++) {
                    if (this.cartList[i].name == goods.name) {
                        flag = true;
                        id = i;
                    }
                }
                if (flag == false) {
                    goods.num = 1;
                    this.cartList.push(goods);
                    this.cartList = JSON.parse(JSON.stringify(this.cartList));
                } else {
                    this.cartList[id].num++;;
                }
            },
            removeGoods(goods) {
                // TODO:补全代码实现需求
                let id;
                for (let i = 0; i < this.cartList.length; i++) {
                    if (this.cartList[i].name == goods.name) {
                        id = i;
                    }
                }
                if (this.cartList[id].num == 1) {
                    this.cartList[id].num--;
                    this.cartList.splice(id, 1);
                } else {
                    this.cartList[id].num--;
                }
            }
        }
    });
</script>

        这个题,就看你对vue数据的处理了;


🏆九、寻找小狼人

介绍

"狼制杀"是一款多制参与的策略类桌面游戏。本题我们一起完成一个简易的狼制杀 游戏,让我们找到其中的狼制。

目标

在本题  index.html 已经给出的数组中,  我们可以通过数组的  filter 方法: cardList.filter((item) => item.category == "werewolf") 返回一个都 是狼制的新数组。但是技术其管为了考验大家的技术,规定了在代码中任何地方都不 能出现  filter 关键字。所以我们需要封装一个  myarray 方法来实现类似数组 filter 的功能。

1. 狼制比较狡猾,筛选狼制的条件可能会变化,例如  item.name,请实现一 个通用的方法。

2. 完成封装后,  页面效果会自动完成,  效果见文件夹下  effect.gif (请使 用 VS Code 或者浏览器打开 gif 图片)。

        我们只需要创建一个新数组,然后遍历this,将this里的每一个对象传入传进myarray方法的回调函数cb( 即(item) => item.category == "werewolf")中,由cb进行判断是否符合条件,如果符合我们就将这个对象数据加入到我们创建的新数组中,最最最后我们将新数组return返回即可

// 返回条件为真的新数组
Array.prototype.myarray = function(cb) {
    // TODO:待补充代码
    let arr = []
    this.forEach(item => {
        if (cb(item)) {
            arr.push(item)
        }
    })
    return arr
};

🏆十、课程列表

介绍

分页是前端页面中必不可少的一项功能,下面让我们一起来完成一个课程列表的分页吧。

let pageNum = 1; // 当前页码,默认页码1
let maxPage; // 最大页数

// TODO:待补充代码
let pagination = document.getElementById("pagination")
let list = document.getElementById('list')
let arr = []
axios.get('./js/carlist.json').then(res => {
        arr = res.data
        maxPage = Math.ceil(res.data.length / 5)
        showDom(pageNum)
        pagination.textContent = `共${maxPage}页,当前${pageNum}页`
    })
function fmoney(num) {
    if (!num) return NaN
    num = num.toString()
    let l = num.split('');
    let i = l.length
    l.splice(i - 2, 0, '.')
    return l.join('')
}
function showDom(index) {
    let Dom = JSON.parse(JSON.stringify(arr))
    let newDom = Dom.splice((index - 1) * 5, 5)
    list.innerHTML = ''

    for (let i = 0; i < newDom.length; i++) {
        const element = newDom[i];
        list.innerHTML += `  <div class="list-group">
        <a href="#" class="list-group-item list-group-item-action">
          <div class="d-flex w-100 justify-content-between">
            <h5 class="mb-1">${element.name}</h5>
            <small>${fmoney(element.price)}元</small>
          </div>
          <p class="mb-1">
          ${element.description}
          </p>
        </a>
      </div>`;
    }
}
let prev = document.getElementById("prev");
let next = document.getElementById("next");
function isDisabled() {
    if (pageNum === 1) {
        prev.classList.add('disabled')
    } else {
        prev.classList.remove('disabled')
    }
    if (pageNum === maxPage) {
        next.classList.add('disabled')
    } else {
        next.classList.remove('disabled')
    }
}
isDisabled()
    // 点击上一页
prev.onclick = function() {
    // TODO:待补充代码
    if (pageNum > 1) {
        pageNum--
        showDom(pageNum)
    }
    isDisabled()
    pagination.textContent = `共${maxPage}页,当前${pageNum}页`

};
// 点击下一页

next.onclick = function() {
    // TODO:待补充代码
    if (pageNum !== maxPage) {
        pageNum++
        showDom(pageNum)
    }
    isDisabled()
    pagination.textContent = `共${maxPage}页,当前${pageNum}页`
};

🏆结束语

        本次复盘就到这里结束了!!!你们觉得这种难度的题第几个能拿省一呢?

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

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

相关文章

vue3,使用watch监听props中的数据

情况一&#xff1a;监听 props 中基本数据类型 父组件中对传入数据的处理 const handleClick () > {testStr.value P }子组件中监听传入的数据 watch(() > props.testStr,(newVal, oldVal) > {console.log(监听基本类型数据testStr)console.log(new, newVal)cons…

Vue 和 React 有什么不同?

大家好&#xff0c;我是前端西瓜哥。今天的文章简单探讨一下 Vue 和 React 的不同。 本人 Vue2 和 React 都用过&#xff0c;但不熟悉 Vue3&#xff0c;没用它做过项目。 其实我对这两大框架也没有认真钻研过它们的细节&#xff0c;也就是工作上用它们写一些简单业务&#xf…

解决npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)报错问题

在vue项目中&#xff0c;使用npm i 命令安装node modules时&#xff0c;出现报错。 第一句&#xff1a; npm ERR! Cannot read properties of null (reading pickAlgorithm) 搜索的话也是有很多答案的&#xff0c;比如&#xff1a; 在终端中运行命令&#xff1a;npm cache cle…

Vue使用axios进行get请求拼接参数的几种方式

前言 本文主要介绍如何在Vue使用axios进行get请求拼接参数的两种方式 我们就以github上的一个开源接口举例&#xff1a; https://api.github.com/search/users?qxxx 这是github给开发人员提供的一个接口&#xff0c;是get请求。我们可以直接通过浏览器访问 很明显&#xff0…

ECharts 饼图颜色设置教程 - 4 种方式设置饼图颜色

本文首发&#xff1a;《ECharts 饼状图颜色设置教程 - 4 种方式设置饼图颜色》 ECharts 饼状图颜色设置教程 方法一&#xff1a;在 series 内配置饼状图颜色方法二&#xff1a;在 option 内配置饼状图颜色方法三&#xff1a;在 data 内配置饼状图颜色方法四&#xff1a;配置 E…

UE4 利用WEBUI插件完成UE与JS的交互 (UE4嵌入WEB)

目录 一、UE4显示Echart图表 二、UE调用JS&#xff08;修改Echart图表数据&#xff09; 三、JS调用UE&#xff08;UE4中打印js传递过来的数据&#xff09; 一、UE4显示Echart图表 步骤&#xff1a; 1.下载WEBUI插件 我的UE编辑器版本是4.24.3对应版本的插件下载地址是 链…

全站最简单 “数据滚动可视化大屏” 【JS基础拿来即用】

源码获取方式&#xff1a; 数据滚动大屏源码&#xff0c;原生js实现超级简单-Javascript文档类资源-CSDN下载原生js实现的数据滚动大屏案例&#xff0c;实现应该是全网最简单的&#xff0c;拿来直接使用即可&#xff0c;没有会员的小伙伴去我文章主更多下载资源、学习资料请访问…

聊一聊浏览器打印 - window.print

前言 一般信息填写类的需求页面&#xff0c;都会增设「预览」和「打印」功能。我们会通过编写 DOM 及样式来绘制出预览视图&#xff0c;而打印则是基于预览来生成 PDF 文件。 浏览器原生 API window.print() 可以用于打印当前窗口&#xff08;window.document&#xff09;视图…

CSS中animation动画-详解

1、animation有什么组成&#xff1f; Animations由两部分组成&#xff1a;css动画的配置&#xff0c;以及一系列的keyframes&#xff08;用来描述动画的开始、过程、结束状态&#xff09;。不需要了解任何Js技术即可完成动画的制作 2、关键帧应该怎么表示&#xff1f; 0%表示…

CSS的hover属性

1.hover的定义 :hover在鼠标移到链接上时添加的特殊样式 :hover适用于任何元素 2.hover的使用方法 用法1:控制自身的样式 鼠标悬浮在元素上改变元素样式,改变本身的背景颜色,例如: 用法2&#xff1a;通过hover控制其他块的样式 &#xff08;1&#xff09;控制子元素的样式…

【React Router 6 快速上手二】useParams / useSearchParams / useLocation / 编程式路由导航useNavigate等API

前言 博主主页&#x1f449;&#x1f3fb;蜡笔雏田学代码 专栏链接&#x1f449;&#x1f3fb;React专栏 之前学习了react-router-dom5版本的相关内容 参考文章&#x1f449;&#x1f3fb;React路由组件传参的三种方式和 【React路由】编程式路由导航 回顾上篇文章&#x1f449…

nvm管理node版本

nvm 使用 1. nvm介绍 nvm 全英文也叫 node.js version management&#xff0c;是一个 nodejs 的版本管理工具 nvm 和 npm 都是 node.js 版本管理工具&#xff0c;为了解决 node.js 各种版本存在不兼容现象可以通过它可以安装和切换不同版本的 node.js 2. 安装与配置 2-1 nv…

CSS绝对定位(absolute)、相对定位(relative)方法(详解)

CSS中几种常用的定位方法&#xff0c;直接上干货&#xff01; 什么是定位&#xff1f; 元素可以使用的顶部&#xff0c;底部&#xff0c;左侧和右侧属性定位。然而&#xff0c;这些属性无法工作&#xff0c;除非是先设定 position属性。他们也有不同的工作方式&#xff0c;这…

Echarts直角坐标系x轴y轴属性设置大全

1、Echarts版本 "echarts": "^5.3.3", 2、最简单的直角坐标系&#xff0c;以柱状图为例。 常见的直角坐标系&#xff0c;x轴设置type: category&#xff0c;为类目轴&#xff0c;适用于离散的类目数据&#xff1b;y轴设置type: value&#xff0c;为数值轴…

前端编程中你是如何进行调试代码的?这篇文章让你学会更多调试方法——前端新手进阶

要我讲就是&#xff1a;对自己代码自信的人&#xff0c;从来不需要调试&#xff0c;只是log一下值是否符合预期(doge)。 哈哈&#xff0c;这当然是一句玩笑话&#xff0c;不管你是刚刚起步的新手&#xff0c;还是从业多年的老手&#xff0c;编程中或多或少都会遇到一些瓶颈&…

Vue3中的watch监听

目录 一、监听基础ref类型 1、监听单个ref数据 2、 监听多个ref数据 二、监听reactive类型 1、监听对象中单个属性 2、监听对象中多个属性 3、同时监听ref基本类型数据和reactive对象中的属性 4、监听整个对象 5、监听对象中值为对象的属性 三、watchEffect 一、监听基础…

JS数组方法中哪些会改变原数组,哪些不会?

前言 作为一名前端开发人员&#xff0c;我们每天都会与数组打交道。JS 也提供了很多操作数组的原生 API 供我们调用。在这些方法里面&#xff0c;有的方法会改变原数组&#xff0c;有些不会改变原数组。别看这一点小小的区别&#xff0c;往往会造成巨大的影响&#xff0c;特别…

HTML常用标签超详细整理

HTML概述 1.1 什么是HTML HTML是做网站的、Web开发、互联网生态开发(PC端移动端微应用) 目前我们使用的都是HTML5,支持传统的PC端开发&#xff0c;还支持移动端开发还支持微应用开发,从而替换了部分传统的移动端开发技术 1.2 HTML概念 HTML:Hyper Text Markup Language&#…

小满Vue3第三十六章(Vue如何开发移动端)

视频教程Vue3 vite Ts pinia 实战 源码 全栈_哔哩哔哩_bilibili 如果使用npm init vuelatest 报错 error when starting dev server: Error: Cannot find module node:path nodejs 升级为16版本就好了 开发移动端最主要的就是适配各种手机&#xff0c;为此我研究了一套…

让div居中的方式的几种方法

让div水平居中的方式的几种方法。 文章目录 一、margin二、绝对定位三、子元素绝对定位父元素相对定位四、flex布局总结 一、margin 第一种方式我们可以利用外边距属性来使div水平垂直居中 先来看一段有问题的代码 <!DOCTYPE html> <html lang"en"> &…