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


    效果

    代码分析

    外层循环

    外层循环的框架

    {info}}" wx:key="index">

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

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

    子项引用

            {{item.name}}

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

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

    class="item">

            {{customItem}}

            {{customIndex}}

    内层循环

    外层循环的框架

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

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

    • 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}}来引用当前子项的索引值。

    内层循环的子项引用

    {photo}}" data-card-index="{{index}}" data-index="{{photoIndex}}" bindtap="bindClickImg">

    • 标签:在循环内部,使用标签来显示图片。
    • 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

    1. <view class="allstyle">
    2. <view class="center">
    3. <view wx:for="{{info}}" wx:key="index" class="item">
    4. <view class="line">
    5. <view class="left">
    6. 姓名
    7. view>
    8. <view class="right">
    9. {{item.name}}
    10. view>
    11. view>
    12. <view class="line">
    13. <view class="left">
    14. ID
    15. view>
    16. <view class="right">
    17. {{item.id}}
    18. view>
    19. view>
    20. <view class="line">
    21. <view class="left">
    22. 年龄
    23. view>
    24. <view class="right">
    25. {{item.age}}
    26. view>
    27. view>
    28. <view class="line">
    29. <view class="width_set">
    30. <view class="photo_title">照片view>
    31. <view class="photo">
    32. <view wx:for="{{item.photo}}" wx:key="photoIndex" wx:for-item="photo" wx:for-index="photoIndex" class="image_wrapper">
    33. <image src="{{photo}}" data-card-index="{{index}}" data-index="{{photoIndex}}" bindtap="bindClickImg">image>
    34. view>
    35. view>
    36. view>
    37. view>
    38. view>
    39. view>
    40. view>

    wxss

    1. page{
    2. background-color:rgb(214, 214, 214);
    3. }
    4. /* 整体样式,让item居中显示*/
    5. .allstyle{
    6. width:100%;
    7. display: flex;
    8. align-items: center;
    9. justify-content: center;
    10. }
    11. /* 设置宽度 */
    12. .center{
    13. width:90%;
    14. }
    15. /* 设置每个item样式 */
    16. .item{
    17. padding:2% 5%;
    18. margin:2% 0;
    19. background-color:#fff;
    20. }
    21. /* 设置行信息 */
    22. .line{
    23. display:flex;
    24. margin:2% 0;
    25. }
    26. .left{
    27. width:50%;
    28. }
    29. .right{
    30. color:#808080;
    31. width:50%;
    32. text-align:right;
    33. }
    34. .width_set{
    35. width:100%;
    36. }
    37. /* 图片样式 */
    38. .photo{
    39. display: flex;
    40. flex-wrap: wrap;
    41. width:100%;
    42. margin-top:2%;
    43. }
    44. .image_wrapper{
    45. width: calc(33.33% - 12px);
    46. margin:0 10px 10px 0;
    47. border:1px solid black;
    48. display: flex;
    49. align-items: center;
    50. justify-content: center;
    51. }
    52. image{
    53. width:150rpx;
    54. height:150rpx;
    55. }

    js

    1. Page({
    2. data: {
    3. info: [{
    4. id: 1,
    5. name: '张三',
    6. age: 12,
    7. photo: [
    8. "这里写自己的图片路径1",
    9. "这里写自己的图片路径2",
    10. "这里写自己的图片路径3",
    11. "这里写自己的图片路径4"
    12. ]
    13. },
    14. {
    15. id: 2,
    16. name: '李四',
    17. age: 24,
    18. photo: [
    19. "这里写自己的图片路径1",
    20. "这里写自己的图片路径2",
    21. "这里写自己的图片路径3"
    22. ]
    23. },
    24. ]
    25. },
    26. // 点击图片显示大图
    27. bindClickImg(event) {
    28. const cardIndex = event.currentTarget.dataset.cardIndex;
    29. const photoIndex = event.currentTarget.dataset.index;
    30. console.log(cardIndex)
    31. console.log(photoIndex)
    32. const photo = this.data.info[cardIndex].photo[photoIndex]; // 获取点击的图片路径
    33. const photos = this.data.info[cardIndex].photo; // 获取当前卡片中的所有图片链接
    34. // 在这里实现展示大图的逻辑,比如使用 wx.previewImage 方法
    35. wx.previewImage({
    36. current: photo, // 当前显示图片的链接
    37. urls: photos // 需要预览的图片链接列表
    38. });
    39. },
    40. })

  • 相关阅读:
    【vue】ant-design弹出框无法关闭和runtimecore提示isFucntion is not function的问题修复
    Linux使用man指令出现No manual entry for fork
    【web前端开发】作业四--模拟数据库遍历信息
    COM组件IDispatch操作
    win10重装系统
    【数据库】MySQL的存储引擎
    【图形学】29 更复杂的光照
    如何正确的关闭Redis服务器
    Nifi06 Nifi基础操作
    突发公共卫生事件智慧城市数据利用框架构建研究
  • 原文地址:https://blog.csdn.net/weixin_46001736/article/details/134156699