基于Vue3实现的 宫格 图片摆放

news2025/1/16 3:46:35

一个可以支持无限宫格的 vue3实现

本来要参考微信群头像的规则实现,网上找到一大堆类似的需求,奈何XXX折磨人,九宫格已经不能满足ta了。

当前代码实现了… 好多东西(可以多宫格).具体的看效果图

code

<style scoped lang='less'>
.s3-grid-image {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background-color: #dddedf;

  .one-line-image {
    display: flex;

    .img {
      width: v-bind(miniSize_);
      height: v-bind(miniSize_);
    }

    .img + .img {
      margin-left: v-bind(margin_);
    }
  }

  .line {
    display: flex;
    flex-wrap: wrap;

    .img {
      width: v-bind(miniSize_);
      height: v-bind(miniSize_);
    }

    .img + .img {
      margin-left: v-bind(margin_);
    }
  }

  .one-line-image + .line,
  .line + .line {
    margin-top: v-bind(margin_);
  }
}
</style>
<template>
  <div class='s3-grid-image' v-if='size>0' :style='{width:size+"px",height:size+"px"}'>

    <template v-for='line in lineIndex'>
      <div :class='this.num===line.length?"line":"one-line-image"'>
        <template v-for='i in line'>
          <img :src='images[i]' class='img' :alt='i'>
        </template>
      </div>
    </template>

  </div>
</template>

<script>
export default {
  name: "S3GridImage",
  components: {},
  emits: [],
  props: {
    images: {type: Array}, // 图片数量
    margin: {type: Number, default: 1} // 每个图片的间隔
  },
  data() {
    return {
      imgNum: 0,
      oneLineImgNum: 0,
      miniSize: 10,
      num: 0,
      size: 0,
      lineIndex: []
    }
  },
  computed: {
    miniSize_() {
      return this.miniSize + 'px'
    },
    margin_() {
      return this.margin + 'px'
    }
  },
  created() {
  },
  mounted() {
    const {offsetHeight, offsetWidth} = this.$el.parentElement
    this.size = Math.max(offsetHeight, offsetWidth)
    this.generateGrid();
  },
  methods: {
    generateGrid() {
      // 图片数量
      this.imgNum = this.images.length;
      // 几宫格
      this.num = new Array(this.imgNum).fill(0).map((_, i) => i + 1).filter((i) => i * i >= this.imgNum)[0];
      // 第一行的数量
      this.oneLineImgNum = this.imgNum === 1 ? 1 : this.imgNum === this.num ? this.num : this.imgNum % this.num;
      // 最小宽高
      this.miniSize = this.num === 1 ? this.size - this.margin * 2 : (this.size - (this.margin * (this.num + 1))) / this.num;
      // 第一行图片处理
      if (this.oneLineImgNum) {
        this.lineIndex.push(new Array(this.oneLineImgNum).fill(0).map((_, j) => j))
      }
      if (this.imgNum - this.oneLineImgNum > 0) {
        // 剩余的图片伪数组
        const surplusImg = new Array(this.imgNum - this.oneLineImgNum).fill(this.oneLineImgNum)
        // 生成剩余完整行的图片索引集合
        const eachRowImgIndex = (i) => surplusImg.map((n, j) => j >= this.num * i && j < this.num * (i + 1) ? j + n : undefined).filter(i => i !== undefined)
        // 剩余完整行的索引
        new Array(this.num).fill([]).map((_, i) => eachRowImgIndex(i)).filter(i => i.length).forEach(rowIndex => this.lineIndex.push(rowIndex))
      }
    }
  }
}
</script>

有图有真相

在这里插入图片描述

基于java和Thumbnails实现

…需要的联系我吧

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

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

相关文章

【Chapter1】绪论,《微机系统》第一版,赵宏伟

一、绪论 1.1 微处理器、微型计算机和微型计算机系统 计算机按照体积、性能、价格通常分为巨型机、大型机、中型机、小型机和微型计算机&#xff08;简称微机&#xff0c;如单片机、单板机&#xff09;五类。但是它们都由五大部分组成&#xff1a;运算器、控制器、存储器、输…

Golang | Leetcode Golang题解之第52题N皇后II

题目&#xff1a; 题解&#xff1a; func totalNQueens(n int) (ans int) {columns : make([]bool, n) // 列上是否有皇后diagonals1 : make([]bool, 2*n-1) // 左上到右下是否有皇后diagonals2 : make([]bool, 2*n-1) // 右上到左下是否有皇后var backtrack func(int)…

iZotope RX 10 音频修复和增强工具 mac/win

iZotope RX 10 for Mac是一款出色的音频修复和增强工具&#xff0c;凭借其卓越的音频处理技术&#xff0c;能够轻松应对各种音频问题。 无论是背景噪音、回声还是失真&#xff0c;RX 10都能精准去除&#xff0c;还原清晰纯净的音频。同时&#xff0c;它还提供了丰富的增强工具&…

前端HTML5学习1(新增布局,状态,列表,文本,表单控件标签)

前端HTML5学习1&#xff08;新增布局&#xff0c;状态&#xff0c;列表&#xff0c;文本&#xff0c;表单控件标签&#xff09; 新增布局标签新增状态标签新增列表标签新增文本标签新增表单控件属性input新增属性值 新增布局标签 HTML5 引入了许多新的语义化标签&#xff0c;用…

Vue2基础知识:组件的样式冲突scoped,为什么加了scoped样式就会独立出来呢?

默认情况&#xff1a;写在组件中的样式会全局生效&#xff0c;这样就容易造成多个组件之间的样式冲突问题。 1.全局样式&#xff1a;默认组件中的样式会作用到全局.&#xff08;也就是说不管你在哪个页面或者组件中写入样式&#xff0c;只要页面生效&#xff0c;该页面的style…

【利兹】XJCO3221 Parallel Computation 并行计算考试资料辅导

XJCO3221 (34964) 西交利兹院 【并行计算】 Parallel Computation 资料or辅导 需要请私聊 1.独家近年考试题 包你高分 2.cw&#xff1a; Coursework 1: OpenMP Programming Assignment Coursework 2: MPI Programming Assignment and Analysis Coursework 3: OpenCL Progr…

STM32与Proteus的串口仿真详细教程与源程序

资料下载地址&#xff1a;STM32与Proteus的串口仿真详细教程与源程序 资料内容 包含LCD1602显示&#xff0c;串口发送接收&#xff0c;完美实现。 文档内容齐全&#xff0c;包含使用说明&#xff0c;相关驱动等。 解决了STM32的Proteus串口收发问题。 注意&#xff1a;每输…

笔试狂刷--Day7(搜索,动态规划)

大家好,我是LvZi,今天带来笔试狂刷--Day7 一.Fibonacci数列 1.题目链接 链接:Fibonacci数列 2.分析 在求解fib数列的过程中判断什么时候接近最小值 3.代码 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public sta…

单片机通讯协议

参考&#xff1a;江科大单片机教程 STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili IIC通讯协议SPI通信协议UARTCANUSB速度100k-400khz4Mhz-线数2 CLK,DATA4CLK,ENB,IO,OI额外设备一主多从一主多从 一般不用自己写&#xff0c;都有相应的库或官方提供相应的&#…

HarmonyOS 鸿蒙下载三方依赖 ohpm环境搭建

前言 ohpm&#xff08;One Hundred Percent Mermaid &#xff09;是一个集成了Mermaid的命令工具&#xff0c;可以用于生成关系图、序列图、等各种图表。我们可以使用ohpm来生成漂亮且可读性强的图表。 本期教大家如何搭建ophm环境&#xff1a; 一、在DevEco Studio中&#…

SCCM软件包

SCCM基础搭建-CSDN博客https://blog.csdn.net/weixin_52364868/article/details/135292639#comments_32482850 ADK下载&#xff1a; 下载并安装 Windows ADK | Microsoft Learn SQL Server2019/2022 SQL Server 下载 | Microsoft 下载最新的即可&#xff0c;SQL Server2022…

DSP开发实战教程-国产DSP替代进口TI DSP的使用技巧

1.替换CCS安装路径下的Flash.out文件 找到各自CCS的安装路径&#xff1a; D:\ti\ccs1230\ccs\ccs_base\c2000\flashAlgorithms 复制进芯电子国产DSP官网提供的配置文件 下载链接&#xff1a;https://mp.csdn.net/mp_download/manage/download/UpDetailed 2.替换原有文件 3.…

RabbitMQ工作模式(4) - 路由模式

概念 路由模式&#xff08;Routing&#xff09;是 RabbitMQ 中的一种消息传递模式&#xff0c;也称为直连模式。它允许生产者将消息发送到一个交换机&#xff0c;并指定一个或多个路由键&#xff08;routing key&#xff09;&#xff0c;交换机根据路由键将消息路由到与之匹配的…

大学生考勤系统C语言--升级版

要求&#xff1a; 人狠话不多&#xff0c;直接上代码&#xff08;以下代码只展示部分&#xff0c;如需完整版代码&#xff0c;请私信联系我&#xff09;&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h&g…

Linux--自主编写shell

目录 准备知识 shell原理 shell与用户互动的过程 实现shell 0.用到的头文件和宏定义 1.首先我们需要自己输出一个命令行 2.获取用户命令行字符 3.命令行字符串分割 4.执行命令 5.设置循环 6.检测内建命令 7.完善细节--获取工作目录而非路径 准备知识 Linux--环境…

掌静脉识别关键技术研究综述

掌静脉识别作为一种新兴的红外生物识别技术&#xff0c;因其高安全性、活体检测性等优势已成为当前生物特征识别领域中的研究热点之一。近年来&#xff0c;该领域的大量研究通过引入深度学习方法推动了掌静脉识别技术的发展。为了掌握掌静脉识别领域最新研究现状及发展方向&…

css中新型的边框设置属性border-block

border-block 是 CSS 中的一个属性&#xff0c;主要用于在样式表中一次性设置元素的逻辑块向边框的属性值。这个属性是简写属性&#xff0c;可以同时设置 border-block-width、border-block-style 和 border-block-color。其中&#xff0c;border-block-start 用于设置元素的开…

QT入门:计算圆面积的QT开始以及日历相关

QT入门&#xff1a;计算圆面积的QT开始以及日历相关 使用的工具为Qt creator 如图所示的为Qt的一个基本目录&#xff0c;首先打开mainwindow.ui进行设计&#xff0c;首先是讲解日历的&#xff0c;可以完全不用写代码&#xff0c;只在mainwindow.ui即可实现。 这是最后的一个成…

Ubuntu2004 CMake 使用基础

一、环境安装 win10安装wsl ubuntu2004 #windows c盘工程目录建立软链 ln -s /mnt/c /home/vrviu/ 安装cmake、c编译工具 apt install -y cmake g 二、CMakeLists.txt讲解 准备工作 首先&#xff0c;在/home/vrviu 目录建立一个 cmake 目录 以后我们所有的 cmake 练习都会放…