使用Vue及自定义组件完成 10x10 图片表格的点击效果


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="js/vue.js"></script>
        <style>
            * {
                margin: 0;
                padding: 0;
            }

            /*定义大盒子控制内部小盒子元素*/
            #box {
                width: 1100px;
                border: 1px solid red;
                /*外边距:上下、左右自动*/
                margin: 100px auto;
                /* 弹性布局 */
                display: flex;
                /* 当元素占满一行自动换行 */
                flex-wrap: wrap;
                /* 对齐方式:两端对齐,间距相等 */
                justify-content: space-around;
            }

            /*定义控制组件里面的元素*/
            #items {
                width: 105px;
                height: 56px;
                background-color: pink;
                margin: 2px 0px;
            }

            img {
                width: 105px;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <!--大容器提供给vm实例对象使用-->
            <div id="box">
                <!--小容器用于规范内部全部元素的样式-->
                <testimg v-for="item in imgs" :imgs="item"></testimg>
                <!--循环拿到imgs数组的每个对应元素,每一次循环都把拿到的数组元素给到item-->
            </div>
        </div>
    </body>
    <script>
        //1.创建testimg组件     这里   : 号的都是v-bind单向绑定数据
        const testimg = Vue.extend({
            //创建testimg的模板映射到html上     因为每一次循环的话template模板就会重新解析所以给大盒子div一个样式不让他乱
            template: `im
                        <div id="items" @click="showInfo()">
                            <img :src="imgs" v-show="show">
                        </div>
            `,
            //那么传过来的就相当于拿到数组imgs的第几个元素,给到挨个定义props工具里面,
            //然后模板img的属性src绑定的是imgs所以每循环一次输出v-for拿到的第几个元素
            props: [
                "imgs"
            ], //<testimg v-for="item in imgs" :imgs="item"></testimg>  循环传过来item拿到的就是数组imgs的每一个下标元素,输出也就是对应的下标元素
            //定义data绑定数据,因为组件里面的模板需要使用数据方法,所以在组件里面定义
            data() {
                return { //在组件里面data必须定义成函数,所以要有返回值返回数据
                    show: true
                }
            },
            //定义方法用于写调用函数方法
            methods: {
                showInfo() {
                    //每一次调用我就把数据给你取反,这样实现点击隐藏、显示
                    this.show = !this.show
                }
            }
        })
        //创建vm(vue)实例对象
        new Vue({
            //绑定容器
            el: "#app",
            //2.注册组件
            components: {
                testimg
            },
            data: {
                //定义imgs数组,存储图片路径,便于循环输出图片
                imgs: ["img/tu_01.gif", "img/tu_02.gif", "img/tu_03.gif", "img/tu_04.gif", "img/tu_05.gif",
                    "img/tu_06.gif", "img/tu_07.gif", "img/tu_08.gif", "img/tu_09.gif", "img/tu_10.gif",
                    "img/tu_11.gif", "img/tu_12.gif", "img/tu_13.gif", "img/tu_14.gif", "img/tu_15.gif",
                    "img/tu_16.gif", "img/tu_17.gif", "img/tu_18.gif", "img/tu_19.gif", "img/tu_20.gif",
                    "img/tu_21.gif", "img/tu_22.gif", "img/tu_23.gif", "img/tu_24.gif", "img/tu_25.gif",
                    "img/tu_26.gif", "img/tu_27.gif", "img/tu_28.gif", "img/tu_29.gif", "img/tu_30.gif",
                    "img/tu_31.gif", "img/tu_32.gif", "img/tu_33.gif", "img/tu_34.gif", "img/tu_35.gif",
                    "img/tu_36.gif", "img/tu_37.gif", "img/tu_38.gif", "img/tu_39.gif", "img/tu_40.gif",
                    "img/tu_41.gif", "img/tu_42.gif", "img/tu_43.gif", "img/tu_44.gif", "img/tu_45.gif",
                    "img/tu_46.gif", "img/tu_47.gif", "img/tu_48.gif", "img/tu_49.gif", "img/tu_50.gif",
                    "img/tu_51.gif", "img/tu_52.gif", "img/tu_53.gif", "img/tu_54.gif", "img/tu_55.gif",
                    "img/tu_56.gif", "img/tu_57.gif", "img/tu_58.gif", "img/tu_59.gif", "img/tu_60.gif",
                    "img/tu_61.gif", "img/tu_62.gif", "img/tu_63.gif", "img/tu_64.gif", "img/tu_65.gif",
                    "img/tu_66.gif", "img/tu_67.gif", "img/tu_68.gif", "img/tu_69.gif", "img/tu_70.gif",
                    "img/tu_71.gif", "img/tu_72.gif", "img/tu_73.gif", "img/tu_74.gif", "img/tu_75.gif",
                    "img/tu_76.gif", "img/tu_77.gif", "img/tu_78.gif", "img/tu_79.gif", "img/tu_80.gif",
                    "img/tu_81.gif", "img/tu_82.gif", "img/tu_83.gif", "img/tu_84.gif", "img/tu_85.gif",
                    "img/tu_86.gif", "img/tu_87.gif", "img/tu_88.gif", "img/tu_89.gif", "img/tu_90.gif",
                    "img/tu_91.gif", "img/tu_92.gif", "img/tu_93.gif", "img/tu_94.gif", "img/tu_95.gif",
                    "img/tu_96.gif", "img/tu_97.gif", "img/tu_98.gif", "img/tu_99.gif", "img/tu_100.gif"
                ]
            }
        })
    </script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值