微信小程序:两层循环的练习,两层循环显示循环图片大图(大图显示、多层循环)

news2024/11/27 3:59:11

效果

代码分析

外层循环

外层循环的框架

<view wx:for="{{info}}" wx:key="index"></view>

  • wx:for="{{info}}":这里wx:for指令用于指定要遍历的数据源,即info数组。当遍历开始时,会依次将数组中的每个元素赋值给子项进行展示。

  • wx:key="index":在循环过程中,需要为每个子项指定一个唯一的标识,以便更高效地更新和渲染。这里,我们使用了index作为索引来标识子项。

子项引用

<view class="right">

        {{item.name}}

</view>

  • 引用子项通过item来进行,在没通过wx:for-item自定义子项名称时,子项默认为item

扩展自定义子项名称wx:for-item,自定义索引名称wx:for-index(详见内层循环)

<view wx:for="{{info}}" wx:for-item="customItem" wx:key="index" wx:for-index="customIndex" class="item">

        <text>{{customItem}}</text> <!-- 使用自定义子项名称 -->

        <text>{{customIndex}}</text> <!-- 引用索引 -->

</view>

内层循环

外层循环的框架

内层循环中,循环的数据是外层循环的子项{{item.photo}},这里就需要设置子项名称和索引了,就不能使用默认的item和index了

<view wx:for="{{item.photo}}"  wx:key="photoIndex"  wx:for-item="photo" wx:for-index="photoIndex"></view> 

  • wx:for="{{item.photo}}":这里使用了wx:for指令来遍历名为item.photo的数组。每次循环时,将数组中的一个元素赋值给名为photo的自定义子项。
  • wx:key="photoIndex":使用wx:key指令来指定循环中每个子项的唯一标识符为photoIndex,通常会使用一个具有唯一性的属性值作为标识符。
  • wx:for-item="photo":使用wx:for-item指令来指定自定义子项的名称为photo,这样在循环内部就可以通过{{photo}}来引用每个子项的值。
  • wx:for-index="photoIndex":使用wx:for-index指令来指定循环中的索引变量名称为photoIndex,这样在循环内部就可以通过{{photoIndex}}来引用当前子项的索引值。

内层循环的子项引用

<image src="{{photo}}" data-card-index="{{index}}" data-index="{{photoIndex}}" bindtap="bindClickImg"></image>

  • <image>标签:在循环内部,使用<image>标签来显示图片。
  • src="{{photo}}"绑定了photo变量作为图片的路径。
  • data-card-index="{{index}}"为图片元素设置了外层循环的索引index
  • data-index="{{photoIndex}}"为图片元素设置了内层循环的索引photoIndex
  • bindtap="bindClickImg"表示点击图片时触发名为bindClickImg的事件处理函数。

显示大图

点击实现方法框架

bindClickImg(event) { },

  • 通过点击事件,获取wxml中传入的参数 data-card-index="{{index}}" data-index="{{photoIndex}}"(内外层的索引)

注:前面的data-前缀定义自定义数据属性时,属性名会被转换为驼峰命名法,即将连字符后的第一个字母大写。所以在事件处理函数中,data-card-index被转换为了cardIndex

 获取点击时间携带的参数

const cardIndex = event.currentTarget.dataset.cardIndex;//外层循环的索引

const photoIndex = event.currentTarget.dataset.index;//内层循环的索引

根据外层循环与外层循环的索引找到点开图片的路径

const photo = this.data.info[cardIndex].photo[photoIndex]; // 获取点击的图片路径

根据外层循环找到该外层的全部图片数组,便于大图的翻页功能(显示一组图片) 

const photos = this.data.info[cardIndex].photo; // 获取当前卡片中的所有图片链接

使用wx.previewImage方法实现显示大图的功能

wx.previewImage({

      current: photo, // 当前显示图片的链接

      urls: photos // 需要预览的图片链接列表

});

完整代码

wxml

<view class="allstyle">
  <view class="center">
    <view wx:for="{{info}}" wx:key="index" class="item">
      <view class="line">
        <view class="left">
          姓名
        </view>
        <view class="right">
          {{item.name}}
        </view>
      </view>
      <view class="line">
        <view class="left">
          ID
        </view>
        <view class="right">
          {{item.id}}
        </view>
      </view>
      <view class="line">
        <view class="left">
          年龄
        </view>
        <view class="right">
          {{item.age}}
        </view>
      </view>
      <view class="line">
        <view class="width_set">
          <view class="photo_title">照片</view>
          <view class="photo">
            <view wx:for="{{item.photo}}"  wx:key="photoIndex"  wx:for-item="photo" wx:for-index="photoIndex" class="image_wrapper">
              <image src="{{photo}}" data-card-index="{{index}}" data-index="{{photoIndex}}" bindtap="bindClickImg"></image>
            </view> 
          </view>
        </view>
      </view>
    </view>
  </view>
</view>

wxss

page{
  background-color:rgb(214, 214, 214);
}
/* 整体样式,让item居中显示*/
.allstyle{
  width:100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* 设置宽度 */
.center{
  width:90%;
}
/* 设置每个item样式 */
.item{
  padding:2% 5%;
  margin:2% 0;
  background-color:#fff;
}
/* 设置行信息 */
.line{
  display:flex;  
  margin:2% 0;
}
.left{
  width:50%;
}
.right{
  color:#808080;
  width:50%;
  text-align:right;
}
.width_set{
  width:100%;
}
/* 图片样式 */
.photo{
  display: flex;
  flex-wrap: wrap; 
  width:100%;
  margin-top:2%;
}
.image_wrapper{
  width: calc(33.33% - 12px);
  margin:0 10px 10px 0;
  border:1px solid black;
  display: flex;
  align-items: center;
  justify-content: center;
}
image{
  width:150rpx;
  height:150rpx;
}

js

Page({
  data: {
    info: [{
        id: 1,
        name: '张三',
        age: 12,
        photo: [
          "这里写自己的图片路径1",
          "这里写自己的图片路径2",
          "这里写自己的图片路径3",
          "这里写自己的图片路径4"
        ]
      },
      { 
        id: 2,
        name: '李四',
        age: 24,
        photo: [
          "这里写自己的图片路径1",
          "这里写自己的图片路径2",
          "这里写自己的图片路径3"
        ]
      },
    ]
  },
  // 点击图片显示大图
  bindClickImg(event) {
    const cardIndex = event.currentTarget.dataset.cardIndex;
    const photoIndex = event.currentTarget.dataset.index;
    console.log(cardIndex)
    console.log(photoIndex)
    const photo = this.data.info[cardIndex].photo[photoIndex]; // 获取点击的图片路径
    const photos = this.data.info[cardIndex].photo; // 获取当前卡片中的所有图片链接
    // 在这里实现展示大图的逻辑,比如使用 wx.previewImage 方法
    wx.previewImage({
      current: photo, // 当前显示图片的链接
      urls: photos // 需要预览的图片链接列表
    });
  },
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

链表的结点个数统计及查找

链表节点个数统计 要统计链表中的节点个数&#xff0c;只需要遍历整个链表&#xff0c;并在遍历的过程中计数即可。具体实现代码如下&#xff1a;(仍然使用C#) 先定义一个整型函数(节点个数的返回值一定是整型变量) int getLinkNodeNum(struct Test *head) {int cnt 0;whil…

STM32:AHT20温湿度传感器驱动程序开发

注&#xff1a;温湿度传感器AHT20数据手册.pdf http://www.aosong.com/userfiles/files/AHT20%E4%BA%A7%E5%93%81%E8%A7%84%E6%A0%BC%E4%B9%A6(%E4%B8%AD%E6%96%87%E7%89%88)%20B1.pdf 一、分析AHT数据手册文档 (1).准备工作 1.新建工程。配置UART2 2.配置I2C1为I2C标准模式&…

数据链路层中存在的报文ip,arp,rarp

IP数据报 ARP请求/应答报 RARP请求/应答报 IP数据报 这里的目的地址和源地址是MAC地址。 这个被称为 MAC 地址&#xff0c;是一个网卡的物理地址&#xff0c;用十六进制&#xff0c;6 个 byte 表示。 MAC 地址是一个很容易让人误解的地址。因为 MAC 地址号称全球唯一&…

深度学习_7_实战_点集最优直线解_优化版代码解析

完整版优化代码&#xff1a; import torch from torch.utils import data from d2l import torch as d2l # 特定导入 from torch import nndef load_array(data_arrays, batch_size, is_trainTrue):dataset data.TensorDataset(*data_arrays) #解包传递&#xff0c;转成张量…

【Linux】Nignx的入门使用负载均衡前端项目部署---超详细

一&#xff0c;Nignx入门 1.1 Nignx是什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它使用事件驱动的异步框架&#xff0c;可同时处理大量请求&#xff0c;支持负载均衡、反向代理、HTTP缓存等常见Web服务场景。Nginx可以作为一个前端的Web服务器&#xff0c;也可…

使用docker进行nextcloud+onlyoffice环境搭建(在线 or 离线)

1.安装 MySQL&#xff08;有MySQL就可以不装&#xff09; docker run -itd --name mysql8.0 -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot --restartalways -e TZ"Asia/Shanghai" -v /home/docker/workspace/mysql:/var/lib/mysql mysql:latest --lower_case_table_na…

【案例】3D地球

效果图&#xff1a; 直接放源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content"initial-scale1.0, user-scalableno" …

用Python实现批量下载文件——代理ip排除万难

目录 前言 一、准备工作 二、批量下载文件 三、添加代理ip 四、处理异常 完整代码 总结 前言 下载文件是我们在日常工作中常常要做的一件事情。当我们需要从互联网上批量下载大量文件时&#xff0c;手动一个一个去下载显然不够高效。为了解决这个问题&#xff0c;我们可…

Unity内打开网页的两种方式(自带浏览器、内嵌浏览器)

1.自带浏览器 这个比较简单&#xff0c;直接调用unity官方的API即可&#xff0c;会直接使用默认浏览器打开网页&#xff0c;这里就不多做解释了。 代码 public InputField input;private void OpenUrlByUnity(){string inputStr input.text;if (!string.IsNullOrEmpty(input…

JVM虚拟机:你是如何理解Java中的垃圾?

什么是垃圾&#xff1f; 垃圾就是内存中不再被使用到的空间&#xff0c;当一个对象不再被引用后那么久成为垃圾可以回收了&#xff0c;但是线程计算没有引用也可以独立运行&#xff0c;因此线程和对象不同。如果一个对象没有任何一个引用指向它了&#xff0c;那么这个对象就是…

什么是Web 3.0?

什么是Web 3.0&#xff1f;简而言之&#xff0c;就是第三代互联网。 在回答Web 3.0之前&#xff0c;让我们先看一下Web 1.0和Web 2.0。 互联网革命 Web 1.0&#xff0c;第一代互联网&#xff0c;从互联网诞生到1997年。 在Web 1.0&#xff0c;互联网的信息是静态的只读网页&a…

MySQL 配置文件添加参数后服务起不来了

如何正确地向数据库添加配置参数。 作者&#xff1a;王雅蓉&#xff0c;DBA&#xff0c;负责 MySQL 日常问题处理和 DMP 产品维护。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 本文约 1000 字&#xff0c;预计阅读需…

CFCA国产SSL证书

随着国潮风的兴起和中国自主技术的发展&#xff0c;很多组织单位对网络信息安全产品的需求逐渐倾向国产化。在SSL证书需求方面也有很多的组织单位更倾向于国产SSL证书。今天&#xff0c;我们就先来侧重介绍一下国产SSL证书CFCA的相关特点。 CFCA国产SSL证书 CFCA拥有国家多项认…

linux jdk配置

1.下载jdk &#xff0c;以jdk1.8为例子 Java Downloads | Oracle JDK 8 Update Release Notes (oracle.com) 2.配置环境变量 1.下载相关jdk版本&#xff0c;执行以下命令安装jdk tar -zxvf jdk-8u144-linux-x64.tar.gz 2.编辑命令 vi /etc/profile 3.在最后加入下面配置 e…

完美解决:Nginx安装后,/etc/nginx/conf.d下面没有default.conf文件

目录 1 问题&#xff1a; 2 解决方法 方法一&#xff1a; 方法二&#xff1a; 3 查看 1 问题&#xff1a; /etc/nginx/conf.d下面没有default.conf文件。 2 解决方法 方法一&#xff1a; 自己创建default.conf文件。 vi /etc/nginx/conf.d/default.conf 添加如下内容&…

overflow溢出属性、定位、前端基础之JavaScript

overflow溢出属性 值 描述 visible 默认值。内容不会被修剪&#xff0c;会呈现在元素框之外。 hidden 内容会被修剪&#xff0c;并且其余内容是不可见的。 scroll 内容会被修剪&#xff0c;但是浏览器会显示滚动条以便查看其余的内容。 auto 如果内容被修剪&#xff0…

【算法挑战】设计一个支持增量操作的栈(含解析、源码)

1381.设计一个支持增量操作的栈 https://leetcode-cn.com/problems/design-a-stack-with-increment-operation/ 1381.设计一个支持增量操作的栈 题目描述方法 1: 用数组或链表模拟栈 数组复杂度分析链表复杂度分析代码 方法 2: 空间换时间 图解复杂度分析代码 题目描述 请…

企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?

企业服务总线ESB是什么 下面这张图&#xff0c;稍微了解些IT集成的朋友应该不陌生。 随着信息化发展不断深入&#xff0c;企业在不同的阶段引入了不同的应用、系统和软件。这些原始的应用系统互不连通&#xff0c;如同一根根独立的烟囱。 但是企业业务是流程化的&#xff0c;…

Vue入门——核心知识点

简介 Vue是一套用于构建用户界面的渐进式JS框架。 构建用户界面&#xff1a;就是将后端返回来的数据以不同的形式(例如&#xff1a;列表、按钮等)显示在界面上。渐进式&#xff1a;就是可以按需加载各种库。简单的应用只需要一个核心库即可&#xff0c;复杂的应用可以按照需求…

LeetCode 501. 二叉搜索树中的众数【二叉搜索树中序遍历+Morris遍历】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…