第十三届蓝桥杯web前端模拟赛2期-职业组

本文介绍了一系列前端开发实用技巧,包括卡片化标签实现、随机数生成、响应式布局、学生成绩图表展示等,覆盖了HTML、CSS、JavaScript等多个方面。

1.卡片化标签

// 实现选项卡功能
function init() {
  // TODO 待补充代码
  var tabs = document.querySelector('.tabs');
  var divs = tabs.querySelectorAll('div');
  var items = document.querySelectorAll('#content div');
  // var items = content.querySelectorAll('div');
  // console.log(divs);
  // console.log(items);
  for (var i = 0; i < divs.length; i++) {

    divs[i].setAttribute('index', i);

    divs[i].onclick = function () {
      for (var i = 0; i < divs.length; i++) {
        divs[i].className = ''

      }
      this.className = 'active';
      var index = this.getAttribute('index');
      for (var i = 0; i < items.length; i++) {
        items[i].className = '';
      }
      items[index].className = 'active'
    }

  }
}
init();

2.随机数生成

/**
 * 封装函数,函数名 getRandomNum(min,max,countNum)
 * 生成 min~max 范围的 countNum 个不重复的随机数,存入数组并返回
 */
//生成指定数目和范围的随机数
const getRandomNum = function (min, max, countNum) {
  var arr = [];
  // 在此处补全代码
  for (var i = 0; i < countNum; i++) {

    arr[i] = Math.floor(Math.random() * (max - min - 1)) + min;//得到随机数

    
    if (i > 0) {
      for (var m = i - 1; m >= 0; m--) {
        if (arr[i] == arr[m]) {
          i--;
          break;
        }
      }
    }
  }
  return arr;
};

module.exports = getRandomNum; //请勿删除

3.个人博客

/* TODO:banner 上的文字 需要居中显示 */
.home-wrapper .banner .banner-conent .hero {
  margin-top: 3rem;
  text-align: center;
}

/* TODO: main-wrapper 通过设置main-wrapper 布局方式 让.main-left  .main-right 正确显示 */
.main-wrapper {
  margin: 1.5rem auto 0 auto;
  max-width: 1100px;
  padding: 0 0.9rem;
  box-sizing: border-box;
  position: relative;
  display: flex;
}

/*/* TODO 宽度自适应 居左显示 */
.main-wrapper .main-left {
  float: left;
  width: 0 auto;
}

/* 宽 245px 居右显示 */
.main-wrapper .main-right > * {
  width: 245px;
  box-sizing: border-box;
}

4.学生成绩统计

<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById("main"));
    
    var option = {
  
    tooltip: {
    },
    legend: {
        data: ["成绩"],
      },
    xAxis: [
      {
        type: "category",
        data: ["张三", "李四", "王五", "贺八", "杨七", "陈九"],
      }
    ],
    yAxis: [{
     
      }],
    series: [
        {
          name: "成绩",
          type: "bar",
          data: [55, 90, 65, 70, 80, 63],
        },
      ],
  };

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
  </script>

5.水果摆盘

/* 菠萝 TODO 待补充代码 */
.yellow {
 
  order: 1;
  align-self: flex-end;
}

6.给网页化妆

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
body {
  background-color: azure;
  background-size: cover;
  color: #fff;
  height: 945;
  width: 1920;
}
.nav-bar {
  display: flex;
  align-items: center;
  justify-content: flex-end;
}
.nav-bar p {
  font-size: large;
  color: cornflowerblue;
  margin: 15px;
}
/*TODO:请补充代码*/

/* 表单大的外观 */
.content-container {      
 
  width: 450px;
  height: 600px;
  background-color: rgba(0,0,0,.45);
  border-radius: 10px;
  margin: 0 auto;

}

/* 表单里面的布局 */
.content {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}


/* 图片样式*/
.content img {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  margin-top: -50px;
}


.content h2 {
  margin: 0 0 50px;
  font-size: 45px;
  font-weight: 800;
  text-align: center;
}


.form input {
  border: 0;
  outline: none;
  font-size: 20px;
  border-radius: 5px;
  width: 300px;
  text-align: center;
  height: 40px;
}
.form form {
  /* margin-top: 30px; */
  display: flex;
  flex-direction: column;
  align-items: center;

}
.form button {
  margin-right: 10px;
  width: 80px;
  height: 30px;
  border-color:#041c32 ;
  background-color: #2d4263;
  font-size: 16px;
  color: white;
}
.text a {
  margin-top: 5px;
  font-size: 16px;
  color: #fff;
  text-decoration: none;
}
form > * {
  margin: 10px;
}

7.小兔子爬楼梯

const climbStairs = (n) => {
  // TODO:请补充代码
  return (n <= 2) ? n : climbStairs(n - 1) + climbStairs(n - 2);
}


module.exports = climbStairs;

8.时间管理大师

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>任务管理器</title>

  <link type="text/css" href="css/style.css" rel="stylesheet" />
</head>

<body>
  <div id="box">
    <div class="head">
      <h2>Todos</h2>
      <p>罗列日常计划,做一个时间管理大师!</p>
      <div class="input">
        <span>内容</span>
        <input v-model="addTodo" @keyup.enter="addTodoEvent" name="title" id="title" placeholder="请输入你要做的事" />
        <span id="add" @click="addTodoEvent">确认</span>
      </div>
    </div>

    <ul class="list">
      <li v-show="todoings.length ==0">暂无数据</li>
      <li v-show="todoings.length !=0" v-for="(todoing,index) in todoings">
        <!-- 前面的序号 -->
        <span class="xh">{{index+1}}</span>
        <!-- 列表内容 -->
        <span>{{todoing}}</span>
        <!-- 删除按钮 -->
        <span class="qc" @click="removeTodo(index)" ></span>
      </li>


      <li v-if="todoings.length !=0">
    
        <b v-show="todoings.length !=0"> 总数:{{todoings.length}}</b>
        <b id="clear" @click="removeAll" v-show="todoings.length !=0">清除</b>
      </li>
    </ul>
  </div>
  <script src="js/vue.js"></script>
  <script>
    var top = new Vue({
      el: "#box",
      // 在此处补全代码,实现所需功能
      data: {
        addTodo: '',
        todoings: []
      },
      methods: {
        addTodoEvent() {
          if (this.addTodo == '') return alert("输入不能为空")
          this.todoings.push(this.addTodo)
          this.addTodo = ''
        },
        removeTodo(index){
          this.todoings.splice(index,1)
        },
        removeAll(){
          this.todoings = []
        }
        
      },
    });
  </script>
</body>

</html>

9.购物车

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>购物车</title>
	<script src="./js/vue.js"></script>
	<script src="./js/axios.js"></script>
	<link rel="stylesheet" href="./css/element-ui.css">
	<link rel="stylesheet" href="./css/index.css">
</head>
 
<body>
	<div class="container" id="app">
		<h4>购物车</h4>
		<!-- 购物车列表 -->
		<div v-for="item in carlist">
			<el-card class="box-card">
				<!-- 商品图片 -->
				<img :src="item.img">
				<div>

					<span>
						<!-- 商品名称 -->
						{{item.name}}
					</span>
					<div class="bottom clearfix">
						<el-button type="text" class="button">+</el-button>
						<el-button type="text" class="button">
							<!-- 商品数量 -->
							{{item.num}}
						</el-button>
						<el-button type="text" class="button">-</el-button>
					</div>
				</div>
			</el-card>
		</div>
	</div>
	</div>

	<!-- 引入组件库 -->
	<script src="./js/element-ui.js"></script>
	<script>
		new Vue({
			el: "#app",
			data: {
				carlist: [] //购物车列表
			},
			created() {
				// 在这里使用axios 发送请求
				this.getlist()
				
			},
			methods: {
				async getlist(){
					axios.get('./carList.json').then(res=>{
						
						this.carlist = res.data
					
					})
				}
			},
		})


	</script>
</body>




</html>

10.菜单检索

js部分

const app = new Vue({
  el: "#app",
  // 在此处补全代码,实现二级菜单搜索功能
  data: {
    input: '',
    dataList: []
  },
  // async created() {
  //   this.dataList = await this.queryData();
  // },
  created() {
    this.queryData()
  },
  methods: {
    async queryData() {
      // let { data } = await axios({
      //   url:'./data.json'
      // })
      axios.get('./data.json').then(res => {
        this.dataList = res.data
        // console.log(this.dataList);
      })
      // console.log(data);
      // return data;
    },

    //过滤数据进行模糊搜索
    filterData(data) {
      // console.log(data);
      let filter = data.filter(i =>
        i.meta.title.includes(this.input)
        // console.log(i.meta.title);
        // console.log(this.input);
      );
      // console.log(filter);
      // return data.filter(i => i.meta.title.includes(this.input));
      return filter
    },

    //搜索高亮
    searchHeight(item) {
      let Hight = this.input === '' ? false : item.includes(this.input) ? true : false;
      return Hight;
      // return this.input === '' ? false : item.includes(this.input) ? true : false;
    }
  },

  computed: {
    list() {
      let _this = this;
      let data = _this.dataList;
      let arr = [];
      arr = this.filterData(data)
      // console.log(arr);
      
      for (let i = 0; i < data.length; i++) {
        // console.log(data.length);
        // console.log(data[i].children);

        data[i].children?.forEach(value =>
        {
          if (value.meta.title.includes(_this.input)) {
            arr = new Set([...arr, data[i]])
          }
          // console.log(value.meta.title);
        });

      }
      console.log(arr);
      return arr;
    }

  }
}); 

html部分

<!DOCTYPE html>
<html lang="zh">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>test</title>
  <script src="./js/vue.js"></script>
  <script src="./js/axios.min.js"></script>
  <style>
    input {
      width: 200px;
      height: 32px;
      padding-left: 5px;
    }

    .active {
      background-color: yellow;
    }
  </style>
</head>

<body>
  <!-- 需求:输入待查找的字段,输出包含该字段的所有菜单数据。
    1、若该菜单有父级菜单,则返回其父级菜单及同胞菜单。
    2、若该菜单有子级菜单,则返回该菜单及其下子级菜单。
    3、若该菜单既无父级也无子级,则返回菜单本身即可。
    测试字段:查询、首页、管理、配置、维护 -->
  <div id="app">
    <input type="text" placeholder="请输入要搜索的菜单内容" v-model="input" />
    <ul>
      <li v-for="(item,index) in list" :key="index">

        <span :class="[searchHeight(item.meta.title) ?'active':'']">
          {{item.meta.title}}
        </span>
        <ul v-if="item.children">
          <li v-for="(k,v) in item.children" :key="v">

            <span :class="[searchHeight(k.meta.title)?'active':'']">
              {{k.meta.title}}
            </span>
          </li>

        </ul>
      </li>
    </ul>
  </div>
</body>
<script type="text/javascript" src="./js/index.js"></script>

</html>

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值