三路十八湾 2023-06-04 15:27 采纳率: 50%
浏览 130
已结题

用React或js来循环给盒子添加点击事件

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

img

img

img

  • 写回答

8条回答

  • Stephen_112 2023-06-05 10:38
    关注
    获得25.00元问题酬金

    看下是不是这样就符合你的要求

    <!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>
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 赞助了问题酬金50元 6月4日
  • 创建了问题 6月4日