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

Vue3技术开发,使用纯CSS3动手制作一个3D环绕的相册展示效果,支持传入任意图片.3D轮播相册的组件

主要讲述封装一个3D轮播相册的组件,效果图如下,仅仅传入一个图片的数组即可,效果如下:

在这里插入图片描述
使用Vue3技术开发,支持传入任意张数的图片。

使用方法

<template><Swiper :list="list" />
</template><script setup>
import Swiper from '@/components/Swiper.vue'let list = ['https://gd-hbimg.huaban.com/0c89e8d8eebbd8b3168051c9c32dda927b11041544c27-7h2Nuu_fw658webp','https://gd-hbimg.huaban.com/d8ab30b96c90ef2c0428376d1df6e86df379ddc33b598-XfLbgw_fw658webp','https://gd-hbimg.huaban.com/617a23ff457a8e7f403560601ee1986f0be521ce31262-yudWdl_fw658webp','https://gd-hbimg.huaban.com/02381538312ca44802a7fb6140fdf79711d046d01e256-bGN4Hq_fw658webp','https://gd-hbimg.huaban.com/2f625b869a53f799fdaf79c20ca7e0d96277767b39594-OQN9F9_fw658webp',
]
</script>

swiper组件

<template><section><div class="green-circle"><div class="pink-circle"><imgclass="bottom-circle"src="https://gd-hbimg.huaban.com/1784343fe17d90f4de4bccf96594d0965c616f5947463-umfPH3_fw658webp"alt=""/></div></div><div class="swiper-box" id="swiperBox"><divv-for="(item, index) in list":key="'img-' + index"class="loop-item":style="{transform: `translate(-50%, -50%) rotate(${(360 / list.length) * index}deg) translateY(-17.5vh) rotateX(90deg)`,}"><img class="alarm-img" :src="item" /></div></div></section>
</template><script setup>
const props = defineProps({list: {type: Array,default: () => [],},
})
</script><style lang="scss" scoped>
section {width: 100%;height: 100%;position: relative;display: flex;align-items: center;justify-content: center;.green-circle {margin-top: 126px;position: absolute;display: flex;align-items: center;justify-content: center;width: 800px;height: 800px;transform-style: preserve-3d;transform: rotateX(60deg) rotate(18deg);background-color: #aee6b4;box-shadow: 19px 48px 27px #c5e3dd;border-radius: 50%;.pink-circle {display: flex;align-items: center;justify-content: center;width: 300px;height: 300px;background-color: rgba(255, 9, 9, 0.6);border-radius: 50%;box-shadow: 2px 2px 30px #c82d2d;.bottom-circle {width: 300px;object-fit: contain;}}}.swiper-box {position: relative;z-index: 200;width: 100%;transform-style: preserve-3d;animation: three-dimensions-circle 30s linear infinite;.loop-item {object-fit: cover;position: absolute;top: 50%;left: 50%;cursor: pointer;text-align: center;.loop-name {font-size: 14px;color: #ffffff;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}img,.alarm-img {margin-top: 4px;width: 150px;height: 9.2vh;}}}
}@keyframes three-dimensions-circle {0% {transform: rotateX(-108deg) rotate(0);}100% {transform: rotateX(-108deg) rotate(-360deg);}
}
</style>

1. 大致思路
通过 :style=“{transform: translate(-50%, -50%) rotate(${(360 / list.length) * index}deg) translateY(-17.5vh) rotateX(90deg)}” 来先实现静态的图片摆放,然后通过旋转 swiper-box 来达到整体旋转的效果。
通过 360 / list.length 来计算出每张图片的左右间距,以保证占满一个圈。

2. 3D效果
3D效果主要通过 css3 的 transform-style: preserve-3d; 配合 transform: rotate; 来实现

http://www.lryc.cn/news/498157.html

相关文章:

  • LeetCode 力扣 热题 100道(十五)搜索插入位置(C++)
  • 【035】基于51单片机俄罗斯方块游戏机【Proteus仿真+Keil程序+报告+原理图】
  • NAT traversal 原理 | TCP / UDP/ P2P
  • 如何成长为一名工程技术经理
  • GEE开发之下载海拔、坡度、坡向数据
  • gozero项目迁移与新服务器环境配置,包含服务器安装包括go版本,Nginx,项目配置包括Mysql,redis,rabbit,域名
  • Scala正则表达式全面教程
  • 伺服电机为什么会变慢?
  • 61 基于单片机的小车雷达避障及阈值可调
  • 微信小程序之手机归属地查询
  • ElementUI 问题清单
  • DVWA靶场——XSS(Stored)
  • Spring框架中的Bean是线程安全的吗?
  • uniapp远程摄像头流界面上显示
  • elasticSearch(一):elasticSearch介绍
  • 基于 RWKV 的视觉语言模型 VisualRWKV 被 COLING 2025 接收!
  • 输出九九乘法表:JAVA
  • kube-proxy的iptables工作模式分析
  • xiaolin coding 图解 MySQL笔记——锁篇
  • 11-SpringCloud Alibaba-Seata处理分布式事务
  • 更换 Git 项目的远程仓库地址(五种方法)
  • 3大模块助力学生会视频自动评审系统升级
  • 鸿蒙开发——使用ArkTs处理XML文本
  • 【Linux】文件查找 find grep
  • Go学习笔记之运算符号
  • npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-torch_utils.py
  • Java中的数据存储结构解析与应用
  • 【链表】力扣 141. 环形链表
  • Hbase整合Mapreduce案例2 hbase数据下载至hdfs中——wordcount