vue仿携程轮播图效果(滑动轮播,下方高度自适应)


Posted in Vue.js onFebruary 11, 2021

先看案例,使用vue+swiper实现,slide不同高度时,动态计算盒子高度,让其下方高度自适应的效果

vue仿携程轮播图效果(滑动轮播,下方高度自适应)

首先搭建vue项目,这里不做过多说明,然后安装swiper

npm install swiper --save-dev

1. js部分:初始化swiper组件,vue要在mounted生命周期中进行初始化,代码如下:

import Swiper from 'swiper'
import { TweenMax, Power2 } from 'gsap'

vue仿携程轮播图效果(滑动轮播,下方高度自适应)

初始化时调用resize函数,计算屏幕容器的宽高,代码如下

// 重新计算屏幕宽高
resize(swiper) {
	this.clientWidth = document.documentElement.clientWidth||document.body.clientWidth;
	this.clientHeight = document.documentElement.clientHeight||document.body.clientHeight;
	this.draw(swiper)
},

计算完后调用draw函数,根据滑动slide,动态计算轮播容器的高度;注意这里引用了TweenMax框架,使用前需要安装,详细使用方法可参考官网TweenMax

npm install gsap -D

先大概看下TweenMax使用方法

vue仿携程轮播图效果(滑动轮播,下方高度自适应)

// 动态计算swiper-container高度
			draw(swiper) {
				TweenMax.to(this.tweenObj, 0.5, {translate: swiper.translate, ease: Power2.easeOut,
					onUpdate: () => {
						let translate = this.tweenObj.translate
						// 左边slide索引
						let iLeft = Math.floor(-translate / this.clientWidth)
						if (iLeft > this.slidesLength) {
							iLeft = this.slidesLength
						}
						// 右边slide索引
						let iRight = iLeft + 1
						if (iRight > this.slidesLength) {
							iRight = this.slidesLength
						}
						for(let i=0; i< this.swiperSlide.length; i++){
							//图片宽度满屏时,每个图片的高度
							this.swiperSlide[i].fullHeight = this.clientWidth/this.swiperSlide[i].getBoundingClientRect().width * this.swiperSlide[i].getBoundingClientRect().height;
						}
						//移动比例 移动过程中高度变化 0~1~0的变化规律
						let percent = Number((-translate / this.clientWidth).toFixed(5)) - iLeft
						//根据左右图片和移动比例得出相应高度
						let currentHeight = (this.swiperSlide[iRight].fullHeight - this.swiperSlide[iLeft].fullHeight )*percent + this.swiperSlide[iLeft].fullHeight
						// 轮播容器高度
						swiper.el.style.height = currentHeight +'px'
					}
				})
			}

2.html部分

<!--仿携程轮播效果-->
	<div class="swiper-demo">
		<div class="swiper-container">
			<div class="swiper-wrapper">
			<!--这里一定要加高度,不然会出问题!!!-->
				<div class="swiper-slide" style="height: 222px;">
					<div class="wrap" v-for="(item, index) in category1" :key="index">
						<img src="../assets/wish.png" alt="">
						<span>{{item.name}}</span>
					</div>
				</div>
					<!--这里一定要加高度,不然会出问题!!!-->
				<div class="swiper-slide" style="height: 400px;">
					<div class="wrap" v-for="(item, index) in category2" :key="index">
						<img src="../assets/wish.png" alt="">
						<span>{{item.name}}</span>
					</div>
				</div>
			</div>
		</div>

		<div style="background: salmon; height: 80vh">随便写自己的UI</div>
	</div>

注意:swiper-slide一定要加高度,不然会出问题

3.css部分

.swiper-slide {
		width: auto;
		height: 100%;
		display: flex;
		flex-wrap: wrap;
		justify-content: space-between;
	}
	.wrap {
		width: 24%;
		height: 100px;
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}
	img {
		width: 60px;
	}

这样就实现了一个高度自适应的轮播效果了,三个及以上也没问题啦,喜欢点个关注吧,嘻嘻~

vue仿携程轮播图效果(滑动轮播,下方高度自适应)

到此这篇关于vue仿携程轮播图效果(滑动轮播,下方高度自适应)的文章就介绍到这了,更多相关vue轮播图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
浅析VUE防抖与节流
Nov 24 Vue.js
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
Vue router安装及使用方法解析
Dec 02 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
开发一个封装iframe的vue组件
Mar 29 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
vue实现移动端div拖动效果
Mar 03 Vue.js
Vue+Bootstrap实现简易学生管理系统
Feb 09 #Vue.js
详解Vue的七种传值方式
Feb 08 #Vue.js
Vue中使用wangeditor富文本编辑的问题
Feb 07 #Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 #Vue.js
vue如何使用rem适配
Feb 06 #Vue.js
如何管理Vue中的缓存页面
Feb 06 #Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 #Vue.js
You might like
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
基于JQUERY的多级联动代码
2012/01/24 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
django中瀑布流写法实例代码
2019/10/14 Python
python  logging日志打印过程解析
2019/10/22 Python
django框架中间件原理与用法详解
2019/12/10 Python
Pytorch 实现权重初始化
2019/12/31 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
优秀学生自我鉴定范例
2013/12/18 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
高温慰问简报
2015/07/21 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis