[小尾巴 UI 组件库] 全屏响应式轮播背景图(基于 Vue 3 与 Element Plus)

news/2024/7/10 0:35:41 标签: vue.js, ui, 前端, 前端框架, Vue, javascript

文章归档于:https://www.yuque.com/u27599042/row3c6

组件库地址

  • npm:https://www.npmjs.com/package/xwb-ui?activeTab=readme
  • 小尾巴 UI 组件库源码 gitee:https://gitee.com/tongchaowei/xwb-ui
  • 小尾巴 UI 组件库测试代码 gitee:https://gitee.com/tongchaowei/xwb-ui-test

组件的下载与配置

  • [小尾巴 UI 组件库] 组件库配置与使用

组件说明

  • 该组件基于 Vue 3 与 Element Plus 实现
  • 该组件全屏显示背景图片,实现了响应式
  • 该组件使用了粘滞定位,其中 z-index 的值为 -100
  • 当需要显示的背景图片多于一张时,会开启背景图片的轮播,轮播图使用了 Element Plus 组件库中轮播图(走马灯)组件

组件属性说明

属性名属性说明类型默认值
images背景图片地址。注意:背景图片需要放置在 public 目录下,背景图片的路径需要以 / 开头,后面编写图片在 public 目录下的路径Array<string> 由图片地址字符串组成的数组[]
interval背景轮播切换背景图片的时间间隔,单位毫秒(ms)Number5000

组件测试

<script setup lang="ts">javascript">

</script>

<template>
  <div>
    <GoodsCardRowSmall
        class="goods"
        v-for="i in 20"
        :imgSrc="'/img/book-1.png_580x580q90.jpg_.webp'"
    ></GoodsCardRowSmall>
  </div>
  <!-- 使用全屏响应式轮播背景图组件 -->
  <Background
      :images="['/img/background-1.jpg', '/img/background-1.jpg', '/img/background-1.jpg']"
      :interval="5000"
  ></Background>
</template>

<style scoped lang="scss">
div {
  .goods {
    margin-bottom: 1rem;
  }
}
</style>
  • image.png

组件源码

<script setup lang="ts">javascript">
/* 接收参数 */
const props = defineProps({
  // 背景需要展示的图片
  images: {type: Array<string>, default: []},
  // 背景图片有多张时,每个背景图片轮播的事件间隔,单位“毫秒”
  interval: {type: Number, default: 5000}
})

/*
 * 处理图片响应式问题
 * 使用 vueuse 监听容器大小修改图片宽高显示
 * 修改为使用背景图片实现背景响应式
 */
// import { vElementSize } from '@vueuse/components' // 获取元素大小的指令
// // 指令绑定的元素宽度改变时调用函数
// function onResize({ width, height }: { width: number; height: number }) {
//   // 获取所有图片
//   let imgs = document.querySelectorAll('img')
//   let wh = width/height // 宽高比
//   if (
//       wh < 1960/1080 ||
//       wh < 1760/990 ||
//       wh < 1690/1050 ||
//       wh < 1600/900 ||
//       wh < 1366/768 ||
//       wh < 1280/1024 ||
//       wh < 1280/720 ||
//       wh < 1128/634 ||
//       wh < 1024/768 ||
//       wh < 800/600
//   ) {
//     imgs.forEach(img => {
//       img.style.height = '100%'
//       img.style.width = 'auto'
//     })
//   } else {
//     imgs.forEach(img => {
//       img.style.height = 'auto'
//       img.style.width = '100%'
//     })
//   }
// }
/* 动态添加背景 */
import {onMounted} from 'vue'
onMounted(() => {
  document.querySelectorAll('.img').forEach((img, idx) => {
    img.style.backgroundImage = `url(${props.images[idx]})`
  })
})
</script>

<template>
  <div class="background-container">
    <!-- 单个背景图片 -->
    <div
        class="background-img"
        v-if="images.length == 1"
    >
      <!--<img :src="images[0]" alt="背景图片" ref="img">-->
      <div class="img"></div>
    </div>
    <!-- 轮播图组件,展示多个背景图 -->
    <div class="carousel" v-else-if="images.length > 1">
      <el-carousel height="100vh" :interval="interval">
        <el-carousel-item v-for="idx in images.length" :key="idx">
          <div class="img"></div>
        </el-carousel-item>
      </el-carousel>
    </div>
  </div>
</template>

<style scoped lang="scss">
// 图片变化过度
img {
  transition: all 0.5s;
}
// 背景组件容器
.background-container {
  // 粘滞定位
  position: fixed;
  top: 0;
  left: 0;
  z-index: -100;
  width: 100%;
  height: 100vh;

  // 单个背景图片
  .background-img {
    width: 100%;
    height: 100%;
  }

  // 轮播图展示多个背景图片
  .carousel {
    height: 100%;
    width: 100%;
  }

  // 图片盒子样式
  .img {
    width: 100%;
    height: 100%;
    background-size: cover;
    background-position: center;
    background-attachment: fixed; // 背景图片粘滞
  }
}
</style>

http://www.niftyadmin.cn/n/5011874.html

相关文章

Java多线程(四)锁策略(CAS,死锁)和多线程对集合类的使用

锁策略&#xff08;CAS&#xff0c;死锁&#xff09;和多线程对集合类的使用 锁策略 1.乐观锁VS悲观锁 2.轻量级锁VS重量级锁 3.自旋锁VS挂起等待锁 4.互斥锁VS读写锁 5.可重入锁vs不可重入锁 死锁的第一种情况 死锁的第二种情况 死锁的第三种情况 CAS 1.实现原子类 …

【动手学深度学习】--语言模型

文章目录 语言模型1.学习语言模型2.马尔可夫模型与N元语法3.自然语言统计4.读取长序列数据4.1随机采样4.2顺序分区 语言模型 学习视频&#xff1a;语言模型【动手学深度学习v2】 官方笔记&#xff1a;语言模型和数据集 在【文本预处理】中了解了如何将文本数据映射为词元&…

提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除

文章目录 探索最新AR/VR应用在教育、游戏、医疗等领域的应用教育领域游戏领域医疗领域 深入了解Android内存管理与性能优化的方法与技巧垃圾回收机制内存泄漏使用弱引用避免过度渲染内存优化图像优化延迟加载Android中的调试技术应用程序分析 分享如何提高Android应用的易用性和…

mac如何创建mysql数据库

使用mac创建mysql数据库十分简单&#xff0c;我们只需要按照以下步骤即可完成。 首先&#xff0c;我们需要安装mysql&#xff0c;我们可以通过官网下载对应的安装包&#xff0c;或者通过Homebrew进行安装。 接下来&#xff0c;我们需要启动mysql服务&#xff0c;在终端中输入以…

企业架构LNMP学习笔记21

URL重写&#xff1a; ngx_http_rewrite_module 模块用于使用PCRE正则表达式更改请求URI&#xff0c;返回重定向&#xff0c;以及有条件地选择配置。 return 该指令用于结束结束规则的执行并返回状态码给客户端。 403 Forbidden.服务器已经理解请求,但是拒绝执行它 404 Not…

Go语言网络编程(socket编程)UDP

1、UDP编程 1.1.1. Go语言实现UDP通信 UDP协议 UDP协议&#xff08;User Datagram Protocol&#xff09;中文名称是用户数据报协议&#xff0c;是OSI&#xff08;Open System Interconnection&#xff0c;开放式系统互联&#xff09;参考模型中一种无连接的传输层协议&#x…

百度地图3D棱柱鼠标事件

百度地图2D API JavaScript API | 百度地图API SDK 百度地图3D API jspopularGL | 百度地图API SDK 3D棱柱效果如下 一. 渲染地图 var map new BMapGL.Map(container, {style: {styleJson: styleJson2} }) map.centerAndZoom(new BMapGL.Point(116.404, 39.925), 9); map…

微服务模式:服务发现模式

由于微服务应用的动态性&#xff0c;很难调用具有固定 IP 地址的服务。这就是服务发现的概念出现的背景。服务发现有助于客户端了解服务实例的位置。在这种情况下&#xff0c;服务发现组件将充当服务注册表。 服务注册表是一个包含服务实例位置的集中式服务器/数据库。在微服务…