首页 > 其他分享 >vue项目实战之图片画廊组件的实现

vue项目实战之图片画廊组件的实现

时间:2023-09-09 10:01:37浏览次数:33  
标签:... 插件 vue pagination 组件 画廊 swiper

前言 笔者曾经写过不少或原生的、或封装的第三方插件的组件,总结来说,并不是所有东西都用原生,自定义的才是好的。很多插件做的也是不错的。就比如笔者今天所用的这个插件:vue-awesome-swiper ——这个还是很强的【轮播图】/【滚动】插件。非常的好用、方便。需要详细了解的可以去GitHub上搜索。


我们先来看下在项目中的实现效果:(将此组件引用到项目中即可)

vue项目实战之图片画廊组件的实现_数据

->

vue项目实战之图片画廊组件的实现_数据_02


在项目中引入:

控制台:

cnpm install vue-awesome-swiper --save

在项目目录下的 main.js中

//...
import VueAwesomeSwiper from 'vue-awesome-swiper'
//...
import 'swiper/dist/css/swiper.css'

//...
Vue.use(VueAwesomeSwiper)

如何使用:

在项目src目录下新创建一个common文件夹——用于存放全局公用组件,在其下创建画廊组件文件夹gallay —— 存放组件Gallay.vue:

<template>
  <div class="container" @click="handleGallaryClick">
    <div class="wrapper">
      <swiper :options="swiperOptions">
        <swiper-slide
          v-for="(item, index) in imgs"
          :key="index"
        >
          <img class="gallary-img" :src="item" />
        </swiper-slide>

        <!-- 这是底部的数字显示 -->
        <div class="swiper-pagination" slot="pagination"></div>

      </swiper>
    </div>
  </div>
</template>

<script>
export default {
  name: 'CommonGallary',
  props: {
    imgs: {
      type: Array,
      default () {
        return []
      }
    }
  },
  data () {
    return {
      swiperOptions: {
        pagination: '.swiper-pagination',
        paginationType: 'fraction',   //分式表达
        observeParents: true,
        observer: true
      }
    }
  },
  methods: {
    handleGallaryClick () {
      this.$emit('close')
    }
  }
}
</script>

<style lang="stylus" scoped>
  .container >>> .swiper-container   /* 样式穿透——可以影响不同组件的元素 */
    overflow: inherit
  .container
    display: flex
    flex-direction: column
    justify-content: center
    z-index: 99
    position: fixed
    left: 0
    right: 0
    top: 0
    bottom: 0
    background: #000
    .wrapper
      height: 0
      width: 100%
      padding-bottom: 100%
      .gallary-img
        width: 100%
      .swiper-pagination
        color: #fff
        bottom: -1rem
</style>

上面data中不能有数据 —— 一个组件初始是不能有默认数据的,所以即使是怕ajax发送有误,也应将“默认数据”放到“主组件”中去。我们一般采用“外部传递”的方式,如 在页面组件中(引用):

<template>
	<div @click="handleBannerClick">此处是模拟点击窗口图标div</div>
	<common-gallary :imgs="imgs" v-show="showGallary"></common-gallary>
</template>

<script>
	import CommonGallary from './common/gallay/Gallary.vue';
	export default {
		data () {
			return {
				showGallary:false,
				imgs:['xxx','xxx']
			}
		},
		components: {
			CommonGallary
		},
		methods: {
			handleBannerClick () {
				this.showGallary=true;
			},
			close () {
				this.showGallary=false;
			}
		},
		//...
	}
</script>

让我们再来看下代码: 组件底部是显示页码 —— swiperOptions部分 怎么配置的呢? 我们在swiper标签中加了一个options动态属性:options="swiperOptions" ,在data(){}中,给它配置一个选项,就是slot -> pagination,它指向了所在div!

标签:...,插件,vue,pagination,组件,画廊,swiper
From: https://blog.51cto.com/u_15296224/7417653

相关文章

  • vue常见面试题
    1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文文档,不存在语言障碍,易于理解和学习;双向数据绑定:保留了angular的特点,在数据操作方面更为简单;组件化:保留了react的优点,实现了html的封装和重用,在构建单页面应用方面有着独特的优......
  • 浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程
    浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,Controller(控制器)将View(视图、用户客户端)与Model(javaBean:封装数据)分开构成了MVC,今天我们浅聊一下SpringMVC的相关组件以及通过源码了解器执行流程SpringMVC的核心组......
  • Vue源码学习(三):<templete>渲染第二步,创建ast语法树
    好家伙,书接上回 在上一篇Vue源码学习(二):<templete>渲染第一步,模板解析中,我们完成了模板解析现在我们继续,将模板解析的转换为ast语法树 1.前情提要代码已开源https://github.com/Fattiger4399/analytic-vue.git手动调试一遍,胜过我解释给你听一万遍functionstart......
  • Swing中的组件
    1.顶级容器JFrame(框架):表示主程序窗口JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口JApplet(小程序):在浏览器内显示一个小程序界面2.布局方式1、边界布局(BorderLayout)2、流式布局(FlowLayout)3、网格布局(GridLayout)4、盒子布局(BoxLaYout)5、空布局(null)3.......
  • vue 项目改为微应用后,原本的项目地址打不开为什么?
    当将Vue项目改为微应用之后,需要进行一些配置才能正常运行。首先,确保微应用项目的依赖中已经添加了qiankun,并在主应用的main.js中进行了相关配置。可以参考qiankun官方文档来配置主应用。在进行部署时,需要注意以下几点:跨域配置:微应用可能会存在跨域请求的问题。在部署时,需确保主应用......
  • 2023-09-08 小程序之启用组件按需注入 ==》 添加一行代码:"lazyCodeLoading": "require
    在manifest.json文件里面的mp-weix对象添加代码:"lazyCodeLoading":"requiredComponents"可实现组件按需注入,引用官方说法就是:启用按需注入后,小程序仅注入当前访问页面所需的自定义组件和页面代码。未访问的页面、当前页面未声明的自定义组件不会被加载和初始化,对应代码文件将不被......
  • vue中,每一秒一个data,如何保存所有data,并一次只要8条数据?
    你可以通过在Vue组件中定义一个数组来保存所有的数据,然后在监听事件中实时截取需要显示的数据。可以借助Vue的生命周期钩子函数和计算属性来实现。首先,在Vue组件的data中定义一个数组allData来保存所有的数据,并定义一个变量currentIndex来记录当前截取的位置:data(){return{......
  • vue3+PHP实战手册(16)
    目录通讯录管理系统登录通讯录管理系统登录使用v-model进行双向绑定,将表单输入框的内容同步给JavaScript中相应的变量,设置了相应的事件监听器。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>通讯录管理系统</title></head>......
  • 【疑难解决】运行EasyRTSPSever组件提示程序无法启动问题解决
    RTSP协议以客户服务器方式工作,它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制,如:暂停/继续、后退、前进等。因此RTSP又称为“因特网录像机遥控协议”。我们的RTSP-Sever组件EasyRTSPSever就是一款比较便捷的组件。我们有开发者在测试EasyRTSPS......
  • 安防教育直播项目应用中RTSPSever组件libEasyRTSPServer编译arm版本报undefined refer
    大家知道我们团队编译过很多产品的ARM版本,对用户来说,多一种编译方式也是多一种选择,所以我们一直在拓宽TSINGSEE青犀视频全线产品的运用范围。近期TSINGSEE青犀视频研发团队编译了libEasyRTSPServer的ARM版本,在此过程中,我们遇到了编译错误undefinedreferenceto`uselocale’。libE......