要求大盒子宽800高900,大盒子中有每行80个小盒子共20列,,小盒子每个宽8.5高44.5,visibility是visible,自带边框所有盒子添加点击事件,点击任意小盒子后,从当前盒子向后数16个小盒子合并成一个中盒子背景色变成绿色,这个中盒子宽度变成121共占用16个小盒子位置,其余15个小盒子visibility变成hidden隐藏掉,再次点击这个的绿色中盒子还原为刚才的16个小盒子



要求大盒子宽800高900,大盒子中有每行80个小盒子共20列,,小盒子每个宽8.5高44.5,visibility是visible,自带边框所有盒子添加点击事件,点击任意小盒子后,从当前盒子向后数16个小盒子合并成一个中盒子背景色变成绿色,这个中盒子宽度变成121共占用16个小盒子位置,其余15个小盒子visibility变成hidden隐藏掉,再次点击这个的绿色中盒子还原为刚才的16个小盒子



看下是不是这样就符合你的要求
<!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>Document</title>
</head>
<style>
#container {
padding: 20px;
}
.main {
border: 1px solid #ccc;
width: 800px;
height: 900px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.box {
width: 8px;
height: 44.5px;
}
.box-bg1 {
border: 1px solid #aaa;
}
.box-bg2 {
background-color: green;
border: 1px solid green;
}
</style>
<body>
<div id="container">
<div class="main">
<template v-for="l in list">
<template v-if="l.type == 1">
<div class="box box-bg1" @click="clc(l.no)">
<span></span>
</div>
</template>
<template v-if="l.type == 2">
<div class="box box-bg2" @click="unclc(l.start)">
</div>
</template>
</template>
</div>
</div>
</body>
<script src="./vue-2.6.14.min.js"></script>
<script>
let vue = new Vue({
el: "#container",
data() {
return {
list: []
}
},
created() {
this.init();
},
methods: {
init() {
for (let i = 0; i < 1600; i++) {
temp = []
temp['no'] = i
temp['type'] = 1
temp['start'] = i
this.list.push(temp)
}
},
clc(number) {
for (let i = 0; i < 1600; i++) {
if ((this.list[i]['start'] <= number + 16 && this.list[i]['start'] > number)
&& this.list[i]['type'] == 2) {
alert("不允许")
return
}
}
for (let i = 0; i < 1600; i++) {
if (i >= number && i < number + 16) {
this.list[i]['type'] = 2
this.list[i]['start'] = number
}
}
this.$forceUpdate();
},
unclc(number) {
for (let i = 0; i < 1600; i++) {
if (this.list[i]['start'] == number) {
this.list[i]['type'] = 1
this.list[i]['start'] = i
}
}
this.$forceUpdate();
}
},
});
</script>
</html>