蓝桥杯第十四届(web开发)

01 电影院排座位(5 分)

思路

利用弹性布局+css子元素选择器

flex-wrap:wrap//换行
.seat:nth-child(n)//第n个孩子

题解

/* TODO:待补充代码 */
.seat-area{
  display: flex;
  flex-wrap: wrap; //换行
  margin-top: 40px;
}
.seat{
  margin-right: 10px;
  margin-top: 10px;
}
.seat:nth-child(8n+2){
  margin-right: 30px;
}
.seat:nth-child(8n+6){
  margin-right: 30px;
}
.seat:nth-child(8n+0){
  margin-right: 0;
}

02图片水印生成 

思路

根据传入参数cout 确定生成几个水印文字(利用for循环)

插值语法+模板字符串:渲染页面,利用span标签加载到页面上

题解

function createWatermark(text, color, deg, opacity, count) {
  // 创建水印容器
  const container = document.createElement("div");
  container.className = "watermark";
  // TODO: 根据输入参数创建文字水印
  for(let i=0;i<count;i++){
    container.innerHTML+=`<span style="color: ${color}; transform: rotate(${deg}deg); opacity: ${opacity};">${text}</span>`
  }
  return container;
}

 03手机帛书碎片

思路

es6语法:1.先生成一个集合(自带去重效果),再讲数据加入到集合中

2.将集合转为数组返回

题解

function collectPuzzle(...puzzles) {
  // TODO:在这里写入具体的实现逻辑
  // 对所有的拼图进行收集,获取不同拼图类型的结果,并返回
  let result=new Set()
  for(let i=0;i<puzzles.length;i++){
    for(let j=0;j<puzzles[i].length;j++){
      result.add(puzzles[i][j])
    }
  }
  // console.log(result);
  return [...result]
}

04自适应页面

思路

网格/栅格布局grid由2格改为一格,

题解

/* TODO: 考生需要完成以下内容 */

@media (max-width: 800px) {
  #tutorials .row {
    grid-template-columns: 1fr;
  }
  #tutorials img {
    margin: 0;
  }
  #tutorials .text .box {
    margin-bottom: 15px;
    margin-top: 20px;
  }
  label.icon-menu {
    display: block;
    color: white;
    padding: 0 20px;

    line-height: 54px;
  }
  .menu {
    height: 54px;
    margin-bottom: 25px;
  }
  .menu li {
    display: flex;
    flex-direction: column;
    background-color: #252525;
  }
  .collapse {
    display: none;
  }
  .menu:hover .collapse {
    display: flex;
    flex-direction: column;
  }
  .dropdown:hover ul {
    display: contents;
  }
  .dropdown:hover ul li {
    background-color: white;
  }
}











@media screen and (max-width: 800px) {
  .row {
    grid-template-columns: 1fr;
  }
  .dropdown ul{
    position: relative;
  }
  .collapse {
    display: none;
  }
  label.menu-btn {
    display: block;
    color:white;
    line-height: 53px;
    margin-left: 20px;
    height: 53px;
  }
  input:checked.menu-btn + .collapse{
    display: block;
  }
  .menu li{
    display: block;
  }
}

05全球新冠疫情数据统计

思路

1.利用axios获取json数据,在data中定义参数,同时在页面上利用插值语法绑定数据

2.利用v-for遍历数据,同时给下拉菜单绑定事件,检查数据是否改变

3.根据下拉菜单所选数据的不同获取不同的参数渲染到页面上

题解

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8" />
  <title>全球新冠疫情数据统计</title>
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <link rel="stylesheet" type="text/css" href="css/style.css" />
  <script src="js/axios.js"></script>
  <script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
  <script src="js/echarts.min.js" type="text/javascript" charset="utf-8"></script>
</head>

<body>
  <div id="app">
    <header>
      <div>
        全球新冠疫情数据统计
      </div>
    </header>
    <main>
      <!-- TODO: 请修改以下代码实现不同国家的数据展示功能 -->
      <div class="title">
        <h2>{{targetCountry}}</h2>
      </div>
      <div class="boxes">
        <div class="box1">
          <h3>确诊</h3>
          <div class="number">
            <span class="font-bold">新增:</span>{{select_data.newComfirmed}}
          </div>
          <div class="number">
            <span class="font-bold">总计:</span> {{select_data.totalConfirmed}}
          </div>
        </div>
        <div class="box2">
          <h3>死亡</h3>
          <div class="number">
            <span class="font-bold">新增:</span>{{select_data.newDeaths}}
          </div>
          <div class="number">
            <span class="font-bold">总计:</span>{{select_data.totalDeaths}}
          </div>
        </div>
      </div>
      <select v-model="selectedCountry">
        <option value="">Select Country</option>
        <!-- 请在此渲染所有国家选项 -->
        <option v-for="item in data" :key="item.Country" :value="item.Country">{{item.Country}}</option>
      </select>
      <div id="chart" style="width: 100%; height: 50vh;"></div>
    </main>
  </div>
</body>

<script>
  var vm = new Vue({
    el: "#app",
    data:{
      targetCountry:'请选择国家',
      data:[],
      select_data:{
        newComfirmed:0,
        totalConfirmed:0,
        newDeaths:0,
        totalDeaths:0
      }
    },
    methods: {
      // TODO: 请修改该函数代码实现题目要求
      initChart() {
        // 初始化图表
        this.chart = echarts.init(document.getElementById("chart"));
        this.chartOptions = {
          title: {
            text: "全球感染人数前30国家累计确诊人数统计",
            x: 'center',
          },
          tooltip: {
            trigger: 'axis',
            axisPointer: {
              type: 'shadow',
              label: {
                show: true
              }
            }
          },
          // 设置x轴数据
          xAxis: {
            // 这里需要显示国家名称缩写,因为有些国家的全称太长,会导致界面不美观
            data: [
              "US",
              "IN",
              "FR",
              "DE",
              "BR",
              "JP",
              "KR",
            ],
            axisLabel: {
              show: true,
              interval: 0,
            }
          },
          yAxis: {
            type: 'value',
            name: '确诊数量',
          },
          // 设置y轴数据
          series: [
            {
              data: [
                100856162, 44680355, 39560482, 37446795, 36362366, 29489769, 29299166,],
              type: 'bar',
              itemStyle: {
                normal: {
                  color: '#a90000'
                }
              }
            },
          ],
        };
        // 调用此方法设置 echarts 数据
        this.chart.setOption(this.chartOptions);
      },


      updatesCountryData(){

      }

    },
    // TODO: 请在此添加代码实现组件加载时数据请求的功能
    async mounted() {
      // let list=await axios.get{'./js/covid-data.json'},
      await axios.get("./js/covid-data.json").then(response=>{
        this.data=response.data
      }).catch(error=>{
        console.log('err')
      })
      console.log(this.data);
      this.initChart();
    },
    watch:{
    selectedCountry(){
      this.updatesCountryData();
    }
  }


  });
</script>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值