利用数组生成手风琴图片框

这篇博客展示了如何利用JavaScript将图片路径存储到数组中,并动态创建一个图片轮播效果。通过CSS样式和JavaScript的数组遍历,实现了图片在页面上的布局和过渡动画。在代码中,每个图片都被包裹在一个div中,通过调整div的宽度来实现 hover 时的放大效果。此示例着重于前端开发中的动态内容生成和交互设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:利用js中数组的特性,把图片路径作为元素存入数组,同时打印出页面结构

先看效果:

 

再看代码: 

<style>

        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        .photos{
            /* 设置浮动布局,让子元素为伸缩盒子 */
            display: flex;
            width: 880px;
            height: 250px;
            border: 3px solid skyblue;
            margin: 50px auto;
            overflow: hidden;
            /* 让大盒子和图片一起旋转180°,就能实现另一种方向的效果 */
            /* transform: rotate(180deg); */
        }
        /* 关键点:设置一个盒子包住图片,给盒子固定宽度,利用图片的特性(不会被盒子包住),所以图片依然是超出盒子的,这时候让后面的盒子盖住照片就可以了,就能实现一种叠加的效果 */
        .photos div{
            width: 80px;
            height: 100%;
            transition: all 0.7s;
        }
     /*    .photos div img{
            transform: rotate(180deg);
        } */
        .photos div:hover {
            width: 400px;
        }
    </style>
  <script>
        let arr = [
            './images/1.jpg',
            './images/2.jpg',
            './images/3.jpg',
            './images/4.jpg',
            './images/5.jpg',
            './images/6.jpg',
            './images/7.jpg'
        ]
        // 根据数组元素生成页面内容
        // 设置空字符串保存photots里面的主体内容
        let str = ''
        for(let i = 0 ; i<arr.length ;i++){
            // 字符串拼接主体内容
            str += `<div><img src="${arr[i]}" alt=""></div>`
        }
        console.log(str);
        // 只用一个document.write来打印页面结构
        document.write(`<div class="photos"> ${str} </div>`)
    </script>

### 实现 `el-table` 手风琴效果并动态为 `children` 节点添加新字段 在 Element-UI 中,通过监听事件 `@expand-change` 可以实现手风琴效果[^1]。当某一行被展开时,可以通过回调函数控制其他同级行的折叠状态。为了动态为 `children` 节点添加新字段,可以在数据处理阶段或者响应事件时修改原始数据结构。 以下是具体实现方法: #### 动态为 `children` 添加字段 可以利用 Vue 的响应式特性,在触发 `@expand-change` 事件时更新对应的数据项及其子节点。假设需要为每个 `children` 节点增加一个名为 `newField` 的字段,则可通过如下方式完成: ```javascript methods: { toggleRow(row, expandedRows) { // 遍历当前表数据,关闭其他同级已展开的行 this.tableData.forEach(item => { if (item !== row && item._expanded) { // 判断是否为同一级且已展开 this.$refs.table.toggleRowExpansion(item, false); item._expanded = false; } }); // 更新当前行的状态 row._expanded = !row._expanded; // 如果有 children 子节点,为其动态添加字段 if (Array.isArray(row.children)) { row.children.forEach(child => { child.newField = Math.random(); // 示例:随机生成 newField 值 }); } console.log(JSON.stringify(this.tableData)); // 查看最终数据结构变化 }, }, ``` 上述代码中,每当调用 `toggleRow` 方法时会遍历整个表格数据,并确保只有目标行处于展开状态。同时,如果该行存在 `children` 字段,则对其子节点逐一操作,动态添加新的属性 `newField`。 #### 数据初始化与绑定 初始渲染时也需要考虑如何定义好基础数据模型以便后续扩展逻辑生效。例如下面是一个简单的树形结构示例: ```json [ { "id": 1, "name": "Parent Node", "_expanded": false, "children": [ {"id": 2, "name": "Child Node"}, {"id": 3, "name": "Another Child"} ] } ] ``` 其中 `_expanded` 是自定义标志位用于追踪每条记录的实际显示情况;而 `children` 数组则存储下一层嵌套关系[^2]。 最后需要注意的是,由于涉及到深层对象的操作可能会影响性能表现尤其针对大数据量场景建议采用懒加载机制来优化体验[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值