vue3-waterfall-plugin瀑布流

vue3 (vue3-waterfall-plugin)实现瀑布流组件

<script setup>
import {ref} from 'vue'
import { LazyImg, Waterfall } from "vue-waterfall-plugin-next";
import "vue-waterfall-plugin-next/dist/style.css";
import ButtomOpera from '@/components/ButtomOpera/index.vue'
const list =  ref([
  {
    type: '环境传感器',
    name: '环境传感器',
    modelName: 'env_data',
    dateLabel: '环境数据',
    status: 0,
    data: [
      {fieldName: 'temperature', fieldLabel: '温度', unit: '℃'},
      {fieldName: 'humidity', fieldLabel: '湿度', unit: '%'},
      {fieldName: 'co2', fieldLabel: '二氧化碳', unit: 'ppm'},
      {fieldName: 'pm25', fieldLabel: 'PM2.5', unit: 'μg/m3'},
      {fieldName: 'pm10', fieldLabel: 'PM10', unit: 'μg/m3'},
      {fieldName: 'no2', fieldLabel: 'NO2', unit: 'μg/m3'},
      {fieldName: 'so2', fieldLabel: 'SO2', unit: 'μg/m3'},
      {fieldName: 'o3', fieldLabel: 'O3', unit: 'μg/m3'},
    ]
  },
  {
    type: '水表',
    name: '水表',
    modelName: 'water_data',
    dateLabel: '水表数据',
    status: 1,
    data: [
      {fieldName: 'water_flow', fieldLabel: '水流量', unit: 'L/min'},
      {fieldName: 'water_level', fieldLabel: '水位', unit: 'cm'},
    ]
  },
  {
    type: '电表',
    name: '电表',
    modelName: 'electricity_data',
    dateLabel: '电表数据',
    status: 0,
    data: [
      {fieldName: 'electricity_flow', fieldLabel: '电流流量', unit: 'A'},
      {fieldName: 'voltage', fieldLabel: '电压', unit: 'V'},
    ]
  },
  {
    type: '水表',
    name: '水表',
    modelName: 'water_data',
    dateLabel: '水表数据',
    status: 1,
    data: [
      {fieldName: 'water_flow', fieldLabel: '水流量', unit: 'L/min'},
      {fieldName: 'water_level', fieldLabel: '水位', unit: 'cm'},
    ]
  },
  {
    type: '电表',
    name: '电表',
    modelName: 'electricity_data',
    dateLabel: '电表数据',
    status: 0,
    data: [
      {fieldName: 'electricity_flow', fieldLabel: '电流流量', unit: 'A'},
      {fieldName: 'voltage', fieldLabel: '电压', unit: 'V'},
    ]
  },
])
</script>

<template>
  <Waterfall :list="list">
    <template #default="{ item, url, index }">
      <el-card>
        <template #header>
          <div class="card-header">
            <span> {{ item.dateLabel }}</span>
          </div>
        </template>
        <div v-for="gItem in item.data" :key="gItem" class="card">
          <!--        <LazyImg class="card_img" :url="url" />-->

          <span>{{gItem.fieldLabel}}:</span>
          <span>{{gItem.unit}}</span>
        </div>
        <div class="buttom" >
          <buttom-opera :data="item" />
        </div>
      </el-card>
    </template>
  </Waterfall>
</template>


<style scoped lang="scss">
.card-header {
  background-color: #f4f7fa;
  padding: 10px 15px;
  font-size: 14px;
  font-weight: bold;
}

.card-header span {
  display: block;
  margin-bottom: 5px;
  color: #333;
}
.card {
  margin: 6px 0;
  border: 1px solid #b5efed;
  border-radius: 6px;
  padding: 4px 10px ;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  background-color: #f9f9f9;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  transition: background-color 0.3s ease, box-shadow 0.3s ease;

  &:hover {
    background-color: #f0f8ff;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  }
}

.card span {
  display: flex;
  color: #666;
  line-height: 1.5;
}

.card span:first-child {
  font-weight: bold;
  color: #333;
}

.card span:last-child {
  color: #1a73e8;
}
.buttom {
  margin-top: 10px;
  border-top: 1.5px solid #e9e9ec;
}

</style>

下载:

npm install vue-waterfall-plugin-next

示例:

<Waterfall :list="list">
  <!-- v2.6.0之前版本插槽数据获取 -->
  <!-- <template #item="{ item, url, index }"> -->
  <!-- 新版插槽数据获取 -->
  <template #default="{ item, url, index }">
    <div class="card">
      <LazyImg :url="url" />
      <p class="text">这是具体内容</p>
    </div>
  </template>
</Waterfall>

import { LazyImg, Waterfall } from 'vue-waterfall-plugin-next'
import 'vue-waterfall-plugin-next/dist/style.css'

// 数据
data: {
  list: [
    {
      src: "xxxx.jpg",
      ...
    }
    ...
  ]
}

参考网址: GitHub - heikaimu/vue3-waterfall-plugin: vue3 瀑布流插件,支持 PC 和移动端,支持 animate 的所有动画效果,支持图片懒加载

### Vue2 中实现瀑布布局 #### 使用 `vue-waterfall-plugin` 插件 为了在 Vue2 项目中快速集成并使用瀑布布局,可以考虑采用成熟的第三方库来简化开发过程。其中一种推荐的方式是通过安装和配置 `vue-waterfall-plugin` 来完成这一目标[^1]。 首先,在命令行工具里执行 npm 安装指令: ```bash npm install vue-waterfall-plugin --save ``` 接着,在项目的入口文件 main.js 或者相应模块内引入该插件,并注册全局组件: ```javascript import Vue from &#39;vue&#39;; import Waterfall from &#39;vue-waterfall-plugin&#39;; Vue.use(Waterfall); ``` 之后便可以在任何 .vue 文件里面定义如下结构化的模板代码片段用于展示瀑布效果的内容项列表: ```html <template> <waterfall :col="cols" :data="items"> <!-- 单个 item --> <waterfall-slot v-for="(item, index) in items" :width="item.width" :height="item.height" :order="index" :key="index"> <img class="demo-img" :src="item.src"/> </waterfall-slot> </waterfall> </template> <script> export default { data() { return { cols: 4, items: [ { src: &#39;/path/to/image.jpg&#39;, width: 200, height: 300 }, // 更多的数据... ] }; } }; </script> <style scoped> .demo-img { display: block; max-width: 100%; } </style> ``` 上述例子展示了如何利用 `vue-waterfall-plugin` 创建一个多列式的图像瀑布视图,每张图片都按照指定宽度和高度自动调整位置以填充空白区域。 另外还有其他优秀的开源解决方案可供选择,比如 `vue-waterfall2`, 这是一个专门为现代浏览器设计的轻量级瀑布方案[^2];或者是更简单的 `vue-stick` 组件,它提供了基础功能的同时保持了较低的学习曲线[^4]。 对于希望进一步探索不同选项的人来说,也可以访问这些项目的在线演示页面获取灵感或参考实际案例[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值