vue element 多图片组合预览

news2024/11/24 14:22:31

 

定义组件:preview-image

<template>
    <div>
        <div class="imgbox">
            <div
                class="preview-img"
                :class="boxClass"
                v-if="
                    Imageslist == 3 ||
                    Imageslist == 5 ||
                    Imageslist == 7 ||
                    Imageslist == 8 ||
                    Imageslist >= 9
                "
            >
                <div
                    class="img-box"
                    v-for="(item, index) in imgArr"
                    :key="index"
                >
                    <div v-for="(_item, _index) in item" :key="_index">
                        <div class="box-image" v-if="_index <= 3">
                            <el-image
                                ref="preview"
                                fit="cover"
                                :preview-src-list="previewImages"
                                :src="_item"
                            />
                            <div
                                class="box-image-shade"
                                @click="imglistclick()"
                                v-if="item.length > 4 && _index == 3"
                            >
                                <div class="shade-more">
                                    <i class="el-icon-d-arrow-right"></i>
                                    <i
                                        class="arrow"
                                        custom-style="margin-left:-16px;"
                                    ></i>
                                </div>
                                <div>{{ Imageslist }}张</div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div :class="boxClass" class="preview-img" v-else>
                <div
                    v-if="
                    Imageslist != 3 ||
                    Imageslist != 5 ||
                    Imageslist != 7 ||
                    Imageslist != 8 ||
                    Imageslist <= 9
                "
                    class="box-image"
                    v-for="(item, index) in imgArr"
                    :key="index"
                >
                    <el-image fit="contain" :src="item" /> 
                </div>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    props: {
        previewData: {
            type: Array,
            default: () => {
                return [];
            },
            //     observer: function (newVal, oldVal) {
            //         console.log("newVal, oldVal", newVal, oldVal);
            //         const previewImages = [];
            //         newVal.map((item) => {
            //             previewImages.push(item);
            //         });
            //         this.setData({
            //             previewImages,
            //         });
            //         this.formatImageList(newVal);
            //     },
        },
    },
    watch: {
        previewData: function (newVal, oldVal) {
            console.log("newVal, oldVal", newVal, oldVal);
            const previewImages = [];
            newVal.map((item) => {
                previewImages.push(item);
            });
            this.previewImages = previewImages;

            this.formatImageList(previewImages);
            console.log("222222", newVal.length);
            this.$nextTick(() => {
                this.Imageslist = newVal.length;
            });
            // this.formatImageList(newVal);
        },
    },
    data() {
        return {
            previewImages: [],
            imgArr: [],
            boxClass: "one",
            Imageslist: 0,
        };
    },
    mounted() {},
    methods: {
        imglistclick() {
                 
            console.log("图片", this.$refs.preview[8]);
            this.$refs.preview[8].clickHandler();
        },
        formatImageList(imageArr) {
            //     console.log("imageArr---", imageArr);
            console.log("长度:", imageArr.length);

            const arrLength = imageArr.length;
            if (arrLength == 1) {
                // this.setData({
                //     imgArr: imageArr,
                //     boxClass: "one",
                // });
                this.imgArr = imageArr;
                this.boxClass = "one";
            }

            if (arrLength == 2) {
                // this.setData({
                //     imgArr: imageArr,
                //     boxClass: "two",
                // });
                this.imgArr = imageArr;
                this.boxClass = "two";
            }

            if (arrLength == 3) {
                const firstArr = [...imageArr.splice(0, 1)];
                const threeArr = [[...firstArr], [...imageArr]];
                // this.setData({
                //     imgArr: threeArr,
                //     boxClass: "three",
                // });
                this.imgArr = threeArr;
                this.boxClass = "three";
            }

            if (arrLength == 4) {
                // this.setData({
                //     imgArr: imageArr,
                //     boxClass: "four",
                // });
                this.imgArr = imageArr;
                this.boxClass = "four";
            }

            if (arrLength == 5) {
                const firstArr = [...imageArr.splice(0, 1)];
                const fiveArr = [[...firstArr], [...imageArr]];
                // this.setData({
                //     imgArr: fiveArr,
                //     boxClass: "five",
                // });
                this.imgArr = fiveArr;
                this.boxClass = "five";
            }

            if (arrLength == 6) {
                // this.setData({
                //     imgArr: imageArr,
                //     boxClass: "six",
                // });
                this.imgArr = imageArr;
                this.boxClass = "six";
            }

            if (arrLength == 7) {
                const firstArr = [...imageArr.splice(0, 1)];
                const secondArr = [...imageArr.splice(0, 4)];
                const sevenArr = [[...firstArr], [...secondArr], [...imageArr]];
                console.log("sevenArr", sevenArr);
                // this.setData({
                //     imgArr: sevenArr,
                //     boxClass: "seven",
                // });
                this.imgArr = sevenArr;
                this.boxClass = "seven";
            }

            if (arrLength == 8) {
                const firstArr = [...imageArr.splice(0, 1)];
                const secondArr = [...imageArr.splice(0, 4)];
                const eightArr = [[...firstArr], [...secondArr], [...imageArr]];
                console.log("eightArr", eightArr);
                // this.setData({
                //     imgArr: eightArr,
                //     boxClass: "eight",
                // });
                this.imgArr = eightArr;
                this.boxClass = "eight";
            }

            if (arrLength >= 9) {
                const firstArr = [...imageArr.splice(0, 1)];
                const secondArr = [...imageArr.splice(0, 4)];
                const nineArr = [[...firstArr], [...secondArr], [...imageArr]];
                console.log("nineArr", nineArr);
                // this.setData({
                //     imgArr: nineArr,
                //     boxClass: "nine",
                // });
                this.imgArr = nineArr;
                this.boxClass = "nine";
            }
        },
    },
};
</script>

<style lang="scss" scoped>
.spanimg {
     
    
}
.imgbox {
    width: 675px;

    padding-bottom: 50px;
    // background: red;
}
.preview-img {
    padding: 16px 5px 0;
    box-sizing: border-box;
}

.box-image {
    margin-top: 10px;
    width: 315px;
    height: 315px;
    border-radius: 6px;
    overflow: hidden;
}

.box-image .el-image {
    width: 100%;
    height: 100%;
    // width: 100px;
    //     height: 100px;
    display: block;
}

.two {
    display: flex;
    align-items: center;
    justify-content: flex-start;
}

.two .box-image + .box-image {
    margin-left: 12px;
}

.three,
.five,
.seven,
.eight,
.nine {
    display: flex;
    align-items: center;
    justify-content: flex-start;
}

.three .img-box + .img-box {
    margin-left: 12px;
}

.three .img-box + .img-box .box-image {
    width: 154px;
    height: 153px;
}

.four {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;
}

.four .box-image {
    width: 205px;
    height: 205px;
    margin-right: 14px;
    margin-top: 14px;
}

.five .img-box + .img-box {
    margin-left: 12px;
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
}

.five .img-box + .img-box .box-image {
    width: 153px;
    height: 153px;
}

.six {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
}

.six .box-image {
    width: 205px;
    height: 205px;
    margin-top: 14px;
}

.seven,
.eight,
.nine {
    flex-wrap: wrap;
}

.seven .img-box:nth-child(2),
.eight .img-box:nth-child(2),
.nine .img-box:nth-child(2) {
    margin-left: 12px;
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
    width: 315px;
}

.seven .img-box:nth-child(2) .box-image,
.eight .img-box:nth-child(2) .box-image,
.nine .img-box:nth-child(2) .box-image {
    width: 153px;
    height: 153px;
}

.seven .img-box:nth-child(3) {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: flex-start;
}

.seven .img-box:nth-child(3) .box-image + .box-image {
    margin-left: 12px;
    margin-top: 14px;
    width: 315px;
}

.eight .img-box:nth-child(3),
.nine .img-box:nth-child(3) {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.eight .img-box:nth-child(3) .box-image {
    width: 206px;
    height: 206px;
    margin-top: 14px;
}

.nine .img-box:nth-child(3) .box-image {
    width: 152px;
    height: 152px;
    margin-top: 12px;
    position: relative;
}

.box-image-shade {
    width: 152px;
    height: 152px;
    position: absolute;
    top: 0;
    left: 0;
    background-color: rgba(0, 0, 0, 0.55);
    text-align: center;
    font-size: 28px;
    font-weight: 500;
    color: #ffffff;
    line-height: 42px;
    padding-top: 36px;
    box-sizing: border-box;
}
</style>

 父组件中引用子组件preview-image

import previewimage from "../../components/commonModule/preview-image.vue";
 <previewimage :previewData="limagePreviewArn"></previewimage>

data中定义变量:limagePreviewArn 

 this.limagePreviewArn = [
            "https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg",
            "https://img01.yzcdn.cn/vant/apple-1.jpg",
            "https://img01.yzcdn.cn/vant/apple-2.jpg",
            "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
            "https://fuss10.elemecdn.com/1/8e/aeffeb4de74e2fde4bd74fc7b4486jpeg.jpeg",
            "https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg",
            "https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg",
            "https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg",
            "https://fuss10.elemecdn.com/2/11/6535bcfb26e4c79b48ddde44f4b6fjpeg.jpeg",
            "https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg",
            "https://img01.yzcdn.cn/vant/cat.jpeg",
        ];

 

 

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

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

相关文章

SQLyog中导入CSV文件入库到MySQL中

1.在数据库中新建一个表&#xff0c;设置列名&#xff08;与待导入文件一致&#xff09;&#xff0c;字段可以多出几个都可以 2.右键表名&#xff0c;导入- - >导入使用本地加载的CSV数据 选择使用加载本地CVS数据 3.指定好转义字符&#xff0c;将终止设置为,号(英文状态下…

微型导轨在包棉机中的作用

随着工业革命的开展&#xff0c;各种人工智能设备的迅猛发展&#xff0c;为了适应高速发展的工业自动化&#xff0c;越来越多的工业企业开始采用微型导轨&#xff0c;尤其是在包棉机中的应用。 包棉机是一种用于加工棉花的机械设备&#xff0c;它的主要功能是将原始棉花经过清洁…

zabbix监控tomcat

一、zabbix监控Tomcat1.1 zbx-agent配置1.1.1 关闭防火墙&#xff0c;将安装 Tomcat 所需软件包传到/opt目录下1.1.2 安装JDK1.1.3 设置JDK环境变量1.1.4 安装启动Tomcat1.1.5 配置 JMX 1.2 zbx-server配置1.2.1 安装zabbix&#xff08;省略&#xff0c;可看上一篇博客&#xf…

【校招VIP】前端JS语言考点之px rem等单位

考点介绍&#xff1a; rem vm等问题是前端面试里的高频题型。但是不少同学并不能很清楚的说明为什么在有px单位之后&#xff0c;还需要rem单位&#xff1f;往往会往不对的自适应方向回答。 作为基础性问题&#xff0c;只要回答不出来&#xff0c;面试就通过不了&#xff0c;需要…

在vue中使用swiper轮播图(搭配watch和$nextTick())

在组件中使用轮播图展示图片信息&#xff1a; 1.下载swiper,5版本为稳定版本 cnpm install swiper5 2.在组件中引入swiper包和对应样式&#xff0c;若多组件使用swiper&#xff0c;可以把swiper引入到main.js入口文件中&#xff1a; import swiper/css/swiper.css //引入swipe…

树莓派3B CSI摄像头配置

1.硬件连接 1、找到 CSI 接口(树莓派3B的CSI接口在HDMI接口和音频口中间)&#xff0c;需要拉起 CSI 接口挡板,如下&#xff1a; 2、将摄像头排线插入CSI接口。记住&#xff0c;有蓝色胶带的一面应该面向音频口或者网卡方向&#xff0c; 确认方向并插紧排线&#xff0c;将挡板…

基于Spring Boot的高校图书馆管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的高校图书馆管理系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

springBoot 集中配置管理

springBoot 集中配置管理 项目配置如果上线项目&#xff0c;运维或者开发者可以直接和jar包同目录下创建文件&#xff0c;然后更改属性 项目配置 创建文件&#xff0c;调整配置如果上线项目&#xff0c;运维或者开发者可以直接和jar包同目录下创建文件&#xff0c;然后更改 属…

海格里斯HEGERLS四向穿梭车仓储解决方案在电子商务行业中的应用

随着现代物流&#xff0c;尤其是智能化物流的飞速发展&#xff0c;河北沃克金属制品有限公司看到了智能物流领域背后的巨大价值和市场空间&#xff0c;深知物流与供应链对企业发展的重要性。于是&#xff0c;引进了先进的高科技智能技术—HEGERLS四向穿梭车技术&#xff0c;并迅…

echarts-convert.js使用

echarts-convert.js demo 点击下载 1、本地安装phantom.js插件 点击下载 2、更改文件路径 &#xff08;D:\phantomjs-2.1.1-windows\bin&#xff09;改为本地项目文件路径 3、打开cmd命令行&#xff0c;并格式化语言 运行以下命令 将命令行语言改为中文简体 chcp 65001…

超详细,自动化测试实战-获取配置文件信息(实例源码)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 配置文件的类型 …

03.Show and Tell

目录 前言泛读摘要IntroductionRelated Work小结 精读模型基于LSTM的句子生成器TrainingInference 实验评价标准数据集训练细节分数结果生成结果多样性讨论排名结果人工评价结果表征分析 结论 代码 前言 本课程来自深度之眼《多模态》训练营&#xff0c;部分截图来自课程视频。…

新题速看!2023阿里、腾讯、字节都在问的SQL数据库笔试题及答案都给你整理好啦!

♥ 前 言 2021到了最后一个月份&#xff0c;年后肯定有蛮多小伙伴需要跳槽换工作&#xff0c;但对于年限稍短的软件测试工程师&#xff0c;难免会需要进行笔试&#xff0c;而在笔试中&#xff0c;基本都会碰到一道关于数据库的大题&#xff0c;今天这篇文章呢&#xff0c;就…

保存位置不同,多个文件如何统一命名并给文件编号

在日常工作中&#xff0c;我们会经常碰到文件或文件夹需要整理归类下&#xff0c;或文件&#xff08;夹&#xff09;需要统一名称再编号下再保存&#xff0c;也方便日后用到文件时可以快速找到文件。大家有没有碰到文件多个&#xff0c;但是文件的保存位置不一样&#xff0c;并…

聚观早报 | 近2亿“救命款”每日优鲜不卖菜了;小鹏G6难过交付关

【聚观365】8月14日消息 近2亿元“救命款”每日优鲜不卖菜了 小鹏爆款G6难过交付关 AIGC在数字营销领域应用程度 iPhone SE 4设计基于iPhone 14 Modulal寻求A轮融资挑战英伟达 近2亿元“救命款”每日优鲜不卖菜了 从一家基于前置仓模式的蔬菜水果等本地生活服务商&#x…

多个项目使用的node版本不一致?vscode dev container + docker 真香

一、接手的项目多了&#xff0c;什么node版本都有~ 遇到这种情况&#xff0c;多数情况会使用 nvm 进行 node 版本管理&#xff0c;具体使用方法可戳nvm的安装与使用。但若要并行开发两个不同环境下的项目&#xff0c;不停切换node版本&#xff0c;也难免有些繁琐。此时&#xf…

基于HTML+CSS+Echarts大屏数据可视化集合共99套

基于HTMLCSSEcharts大屏数据可视化集合共99套 一、介绍二、展示1.大数据展示系统2.物流订单系统3.物流信息系统4.办税渠道监控平台5.车辆综合管控平台 三、其他系统实现四、获取源码 一、介绍 基于HTML/CSS/Echarts的会议展览、业务监控、风险预警、数据分析展示等多种展示需求…

共识算法初探

共识机制的背景 加密货币都是去中心化的&#xff0c;去中心化的基础就是P2P节点众多&#xff0c;那么如何吸引用户加入网络成为节点&#xff0c;有那些激励机制&#xff1f;同时&#xff0c;开发的重点是让多个节点维护一个数据库&#xff0c;那么如何决定哪个节点写入&#x…

浅谈人工智能技术与物联网结合带来的好处

物联网是指通过互联网和各种技术将设备进行连接&#xff0c;实时采集数据、交互信息的网络&#xff0c;对设备实现智能化自动化感知、识别和控制&#xff0c;给人们带来便利。 人工智能是计算机科学的一个分支&#xff0c;旨在研究和开发能够模拟人类智能的技术和方法。人工智能…

【apifox】如何写一份合格的 API 文档?

要想弄清楚如何开始写出一份合格的 API 文档&#xff0c;我们需要首先了解什么是 API&#xff0c;它的使用场景有哪些&#xff0c;应该具备什么样的能力。 什么是 API&#xff1f; 想象一下&#xff0c;当小 A 购入了一台新的电脑后&#xff0c;希望将显示画面投射至一块色准…