当前位置:网站首页>vant-swipe自适应图片高度+图片预览
vant-swipe自适应图片高度+图片预览
2022-08-02 22:42:00 【GG·bond】
vant-swipe自适应图片高度+图片预览
1.vant-swipe自适应图片高度
当轮播图的图片高度不相同时,如果不设置高度,van-swipe-item则会采取最高的图片的高度作为高度,则其他图片高度低于这个高度,则会底部空白,影响美观
解决办法:利用Swipe Props 的 height(滑块高度) 和change 事件 每次切换图片时,重新获取图片高度,赋值给滑块高度
//获取
async mounted(){
let res= await this.getImgSize(this.imgs[0])
this.height=res.height/(res.width/375)
},
methods:{
// 通过图片的url获取图片尺寸
getImgSize (url) {
return new Promise((resolve, reject) => {
let img = new Image()
img.src = url
img.onload = () => {
resolve({
width: img.width,
height: img.height
})
}
})
}
//swipe的切换监听事件
async onChange(index) {
let res= await this.getImgSize(this.imgs[index])
// 图片固定宽度100vw
this.height=res.height/(res.width/375)
},
}
2.图片预览
使用vant的 ImagePreview函数,需要用到swipe的autoplay,当autoplay=0时,停止播放;当图片进入预览时,关闭自动播放,结束预览时,跳到对应的图片(需要暂时关闭轮播动画,不然会一闪而过),开始自动播放
//预览
showImage(i){
// 预览关闭轮播图滚动
this.autoplay=0
ImagePreview({
images: this.imgs,
//开始的图片位置
startPosition: i,
overlayStyle:{
background: '#000'
},
//关闭预览图时-该图为轮播图起始图
onClose:res=> {
//轮播图的方法,跳到对应的图片
this.$refs.vantSwiper.swipeTo(res.index,{
immediate:true //关闭轮播切换效果
})
this.autoplay=2000
},
});
},
3.全部代码
<template>
<div class="swiper">
<van-swipe class="my-swipe" :autoplay="autoplay" indicator-color="white" :height="height" duration="1000" ref="vantSwiper" @change="onChange">
<van-swipe-item v-for="(item,i) in imgs" :key="i" >
<img :src="item" alt="" @click="showImage(i)">
</van-swipe-item>
</van-swipe>
</div>
</template>
<script>
import { ImagePreview } from 'vant';
export default {
data(){
return{
imgs:[
require('@/assets/swiper/1.jpg'),
require('@/assets/swiper/2.jpg'),
require('@/assets/swiper/3.jpg'),
require('@/assets/swiper/4.jpg'),
require('@/assets/swiper/5.jpg')
],
autoplay:2000,
height:null
}
},
async mounted(){
let res= await this.getImgSize(this.imgs[0])
this.height=res.height/(res.width/375)
},
methods:{
async onChange(index) {
let res= await this.getImgSize(this.imgs[index])
// 图片固定宽度100vw
this.height=res.height/(res.width/375)
},
//预览
showImage(i){
// 预览关闭轮播图滚动
this.autoplay=0
ImagePreview({
images: this.imgs,
//开始的图片位置
startPosition: i,
overlayStyle:{
background: '#000'
},
//关闭预览图时-该图为轮播图起始图
onClose:res=> {
//轮播图的方法,跳到对应的图片
this.$refs.vantSwiper.swipeTo(res.index,{
immediate:true //关闭轮播切换效果
})
this.autoplay=2000
},
});
},
// 获取图片尺寸
getImgSize (url) {
return new Promise((resolve, reject) => {
let img = new Image()
img.src = url
img.onload = () => {
resolve({
width: img.width,
height: img.height
})
}
})
}
}
}
</script>
<style lang="less" scoped>
.van-swipe-item{
img{
width: 100%;
}
}
.my-swipe{
position: relative;
font-size: 0;
}
.custom-indicator {
position: absolute;
right: 5px;
bottom: 5px;
padding: 2px 5px;
font-size: 12px;
background: rgba(0, 0, 0, 0.1);
}
</style>
边栏推荐
猜你喜欢
华为设备配置BFD与接口联动(触发与BFD联动的接口物理状态变为Down)
谷粒商城-day13-es和商品上架
In-depth study TypeScript TypeScript 】 【 class (under)
漫画:怎么证明sleep不释放锁,而wait释放锁?
Swift中的类型相关内容
同一份数据,Redis为什么要存两次?
HCIP(17)
If the watermark according to how to realize the function
脂溶性胆固醇-聚乙二醇-叠氮,Cholesterol-PEG-Azide,CLS-PEG-N3
[TypeScript] Deep Learning of TypeScript Classes (Part 1)
随机推荐
Task 4 Machine Learning Library Scikit-learn
目前为止 DAO靠什么盈利?
CAS:1445723-73-8,DSPE-PEG-NHS,磷脂-聚乙二醇-活性酯两亲性脂质PEG共轭物
Web APIs BOM- 操作浏览器-Window对象
工业元宇宙的价值和发展
思源笔记 本地存储无使用第三方同步盘,突然打不开文件。
了解 NFT 质押:Web3 中赚取被动收益的另一种方式
【UE5 骨骼动画】全形体IK导致Two Bone IK只能斜着移动,不能平移
用于中文文本分类的中文停用词
RuoYi-App Startup Tutorial
APT level comprehensive free kill with Shell
mysql查询表中重复记录
【C语言】带头双向循环链表(list)详解(定义、增、删、查、改)
Swift中的类型相关内容
基于奇异谱分析法和长短时记忆网络组合模型的滑坡位移预测
VMware workstation 程序启动慢
IDO预售代币合约系统开发技术说明及源码分析
IDEA 重复代码的黄色波浪线取消设置
「X」to「Earn」:赛道现状与破局思路
Go语言如何操作文件