前言

自己在做信息管理系统后台所遇到的一些问题,困扰了我好几天,于是将这个用法记录下来,希望能够大家在学习vue的道路上一路长虹。我想要展示一些照片,展示大学课余生活以及一起参加活动的一些片段。当然,我们百度搜照片他们就是一些瀑布流的布局。首先瀑布流分为等高瀑布流、等宽瀑布流等。而且我们还发现百度搜出来的照片下滑就可以看到更多的照片,这就用到了懒加载,加载更多的照片,来展示。我现在用的是vue来写管理系统后台,自然,我们需要用到Vue-Waterfall-Easy插件,它的优点就在于我们不用去再封装懒加载的部分内容,我们只需要拿到数据,发送axios请求对应的数据就可以了。

安装

npm install vue-waterfall-easy --dev--save

使用插件

<template>
  <div id="content">
  	 <!-- 使用组件 -->
    <vue-waterfall-easy></vue-waterfall-easy>
  </div>
</template>
<script>
// 第一步:导入组件
import vueWaterfallEasy from "vue-waterfall-easy";
export default {
  name:'express',
  // 注册局部组件
  components:{
    vueWaterfallEasy
  }
 }
</script>

重要细节

组件绑定参数

  • imgsArr : 要求内容是一个数组,数组中的元素为一个个对象,对象最起码包含两个键值src、href src代表要展示图片的地址,href代表点击图片将会跳转的路径
  • getData(函数):为scrollReachBottom提供的事件,简单来说就是下拉时加载更多照片,然后对此就行数据的拼接。当然文档中也有说明,有一个是替量更新,有一个是增量更新。当然,官方文档中说我们在开发过程中更多的就是使用增量更新,比较省资源。

布局要求

父级需要设置一些样式,才能显示瀑布流,要不然可能什么都不会显示。当然,你所遇到的可能和我的不太一样,你可以改css样式来达到自己写的网页效果。具体看自己如何写

#content{
  position: absolute;
  top: 80px;
  bottom: 0;
  left: 250px;
  width: 80%;
}

说完了这些,想必觉得都很简单吧,接下来我们看下面的内容,自己边写接口边写网页就觉得还挺难的。我的接口使用nodejs+express+json开发的。我也是一个刚入前端的小白,接口写的马马虎虎。数据全靠json去模拟,没有用数据库。

imgs.json:

很重要,刚开始我一直想着怎么通过api接口返回这些图片,后来一想通过这个可以解决我想要的,然后我就把这些图片放在了本地服务器上面,也就是phpstudy上面,然后这样来完成对图片的请求。当然这个问题困扰了我好久,比较深刻。也算是自己比较愚钝吧。大佬们轻喷

[
  {
    "src": "http://localhost/img/1.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/2.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/3.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/4.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/5.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/6.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/7.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/8.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/9.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/10.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/11.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/12.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/13.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/14.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/15.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/16.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/17.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/18.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/19.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  },
  {
    "src": "http://localhost/img/20.jpg",
    "href": " /test",
    "info": "一些图片描述文字"
  }
]

api接口具体内容

// express 框架
const express = require('express')
// 定义路由
const router = express.Router()
// imgs数据
const score_info = require('../data/imgs.json')
const success_data = {
  data:score_info,
  meta:{
    status:200,
    msg:"请求成功"
  }
}

router.get('/imgs',(req,res)=>{
  res.send(success_data.data)
})
// 导出路由
module.exports = router

app.js

const express = require('express')
// 对post参数进行解析
const bodyParser = require('body-parser')
const app = express()
// 解决跨域问题
const cors = require('cors');
// 导入路由
const imgs = require('./router/imgs')
// 使用路由
app.use('/api',imgs)
const hostname = 'localhost';
const port = 8888
app.listen(port,()=>{
  console.log('Server running at http://'+hostname+':'+port+'/')
})

Express.vue

<template>
  <div id="content">
    <!-- 使用组件 -->
    <vue-waterfall-easy :imgsArr="imgsArr" @scrollReachBottom="getData">
    </vue-waterfall-easy>
  </div>
</template>

<script>
import vueWaterfallEasy from "vue-waterfall-easy";

export default {
  name:'express',
  data(){
    return {
      imgsArr:[]
    }
  },
  components:{
    vueWaterfallEasy
  },
  created(){
    this.getData()
  },
  methods:{
    getData(){
// 上面定义的api接口,直接发起get请求api/imgs,访问成功则会返回我们想要的数据。然后通过增量更新数据。就完成了瀑布流。
// 当然,官方文档说的也比较清楚,一般懒加载就是通过group的数来进行请求更新,我这里并没有用这个。我感觉明白到这个地方就足够了。剩下的就	
//是通过group的值来控制返回的数据就ok
      this.$http.get('api/imgs').then(res=>{
        console.log(res.data);
          this.imgsArr = this.imgsArr.concat(res.data)
      })
    }
  }
}
</script>

<style>
#content{
  position: absolute;
  top: 80px;
  bottom: 0;
  left: 250px;
  width: 80%;
}
</style>

结尾

到这里我们就可以看到vue瀑布流的效果了。下面给大家看看最后的样子吧,是不是比较炫酷啊,我的文章也到了尾声了,大家觉得有错误的可以指出来,我们共同学习,共同进步。谢谢大家的观看

在这里插入图片描述

Logo

前往低代码交流专区

更多推荐