当前位置: 首页 > article >正文

web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理

web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理
在这里插入图片描述
1.uni.getSystemInfoSync().screenWidth; 获取屏幕宽度
2.uni.onWindowResize() 实时监测屏幕宽度变化
3.根据宽度的大小拿到每行要展示的数量itemsPerRow
4.为了确保样式能够根据 itemsPerRow 动态调整,可以使用 CSS 变量或动态类。width: calc((100% - 40rpx * (itemsPerRow - 1)) / itemsPerRow);

<template>
    <view class="index">
      <!-- list表单 -->
      <view class="activityList">
        <view class="innerContent">
          <!-- conent-list -->
          <view class="content-list">
            <view class="list-row" v-for="(row, rowIndex) in groupedCollectionList" :key="rowIndex">
              <view class="list-item" v-for="(item, index) in row" :key="index" @click="goDetail(item)">
                <view class="item-left" v-if="item.picture">
                  <image class="img" :src="item.picture" />
                </view>
                <view class="item-right">
                  <view class="title space" v-if="item.name.length > 10">{{ item.name.slice(0, 10) }}...</view>
                  <view class="title space" v-else>{{ item.name }}</view>
                  <view class="title space">{{ item.createdTime }}</view>
                </view>
              </view>
            </view>
          </view>
        </view>
      </view>
    </view>
  </template>

<script>
export default {
    data() {
        return {
            list:[],
            itemsPerRow:1,// 默认每行显示1个
        };
    },
    computed: {
        // 在 computed 中添加 groupedCollectionList 以根据 itemsPerRow 分组数据。
        groupedCollectionList() {
            const rows = [];
            for (let i = 0; i < this.list.length; i += this.itemsPerRow) {
            rows.push(this.list.slice(i, i + this.itemsPerRow));
            }
            return rows;
        },
    },
    beforeMount() {
        this.updateScreenSize(); //初始化屏幕宽度
        uni.onWindowResize(this.updateScreenSize);  // 监听屏幕尺寸变化
    },
    beforeDestroy() {
       uni.offWindowResize(this.updateScreenSize);  // 移除监听器
    },
    methods: {
        // 获取当前屏幕宽度
        getScreenWidth() {
        return uni.getSystemInfoSync().screenWidth;
        },
        updateScreenSize(){
            const width = this.getScreenWidth()
            console.log(width,'width');
            // 562<width&&width<687
            if (width > 640) {
                this.itemsPerRow = 3;
            } else if (562<width&&width < 640) {
                this.itemsPerRow = 2;
            } else {
                this.itemsPerRow = 1;
            }
        },
        getList() {
            // this.$modal.loading("加载中..");
            this.list = [{
                picture:"https://jis-eclass.oss-accelerate.aliyuncs.com/images/Course/20250108/20250108141759a888cbd5-8dec-4b98-a423-30d1f2081023.jpg",
                name:"测试1",
                createdTime:"2025-1-1"
            },
            {
                picture:"https://jis-eclass.oss-accelerate.aliyuncs.com/images/Course/20250108/20250108141759a888cbd5-8dec-4b98-a423-30d1f2081023.jpg",
                name:"测试2",
                createdTime:"2025-1-1"
            },
            {
                picture:"https://jis-eclass.oss-accelerate.aliyuncs.com/images/Course/20250108/20250108141759a888cbd5-8dec-4b98-a423-30d1f2081023.jpg",
                name:"测试3",
                createdTime:"2025-1-1"
            },
            {
                picture:"https://jis-eclass.oss-accelerate.aliyuncs.com/images/Course/20250108/20250108141759a888cbd5-8dec-4b98-a423-30d1f2081023.jpg",
                name:"测试4",
                createdTime:"2025-1-1"
            }
        ]
        },
    },
    async onLoad(e) {
        const { id }  = e
        this.id = id
    },
    onShow() {
        this.pageNum = 1;
        this.getList();
    },


};
</script>

<style lang="scss" scoped>
.index {
  width: 100%;
  min-height: 100vh;
  background: #f7f8fc;
  box-sizing: border-box;
  padding-bottom: calc(110rpx + env(safe-area-inset-bottom));

  .activityList {
    width: 100%;
    padding: 0 20rpx;
    padding-top: 24rpx;

    .innerContent {
      width: 100%;
      background: #ffffff;
      border-radius: 20rpx;
      padding: 20rpx;

      .content-list {
        padding: 20rpx;
        padding-right: 0rpx;

        .list-row {
          display: flex;
          justify-content: space-between;
          margin-bottom: 20rpx;
        }

        .list-item {
          // 确保样式能够适应不同数量的每行显示。
          width: calc((100% - 40rpx * (itemsPerRow - 1)) / itemsPerRow);
          height: 152rpx;
          display: flex;
          margin-bottom: 20rpx;

          .item-left {
            width: 270rpx;
            height: 152rpx;
            border-radius: 10rpx;
            position: relative;

            .img {
              width: 270rpx;
              height: 152rpx;
              border-radius: 10rpx;
            }
          }

          .item-right {
            flex: 1;
            padding: 10rpx 0rpx;
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            width: 200rpx;
            padding-left: 20rpx;

            .title {
              font-size: 30rpx;
              font-family: PingFang SC, PingFang SC-Regular;
              font-weight: Regular;
              text-align: left;
              color: #333333;
              line-height: 41rpx;
            }

            .title.space {
              white-space: nowrap;
              overflow: hidden;
              text-overflow: ellipsis;
            }
          }
        }
      }
    }
  }
}
</style>


http://www.kler.cn/a/502854.html

相关文章:

  • # CentOS7 系统 /dev/mapper/centos-root满了,十步清理
  • 【Rust自学】12.3. 重构 Pt.1:改善模块化
  • 使用gtsam添加OrientedPlane3Factor平面约束因子
  • Kotlin构造函数
  • 【ROS2】☆ launch之Python
  • HOW - Form 表单确认校验两种模式(以 Modal 场景为例)
  • vue3+ts的<img :src=““ >写法
  • Unity搭配VS Code使用
  • 基于“大型园区”网络设计
  • LeetCode 3270.求出数字答案:每位分别计算 或 for循环
  • 重回C语言之老兵重装上阵(三)C语言储存类
  • 【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
  • 数据结构:栈(Stack)和队列(Queue)—面试题(一)
  • 2、第一个GO 程序
  • Win32汇编学习笔记09.SEH和反调试
  • 数据结构(Java版)第七期:LinkedList与链表(二)
  • 3 生成器(Builder)模式
  • Java算法 数据结构 栈 队列 优先队列 比较器
  • C#中前台线程与后台线程的区别及设置方法
  • 《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统
  • 灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设
  • 相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型
  • RabbitMQ 在 Spring Boot 项目中的深度应用与实战解析
  • Java异步任务
  • 2024 年 3 月青少年软编等考 C 语言二级真题解析
  • IP层之分片包的整合处理