173 lines
5.1 KiB
Vue
173 lines
5.1 KiB
Vue
<template>
|
||
<view class="posir">
|
||
<swiper class="bacf width100"
|
||
:current="currentIndex"
|
||
:indicator-dots="ifAutoplay"
|
||
:autoplay="false"
|
||
:duration="500"
|
||
:style="{paddingBottom:itemTop,height: swiperHeight+'px'}"
|
||
@change="changeEv">
|
||
<swiper-item v-for="(items,indexs) in list" :key="indexs">
|
||
<view class="disac fw">
|
||
<block v-for="(item,index) in items" :key="index">
|
||
<view @tap="chooseGe(item.url,index)" class="disjcac fc swiper-item-box" :style="{width:['50%','50%','50%','33.3%','25%','20%'][rowNum],paddingTop:itemTop}">
|
||
<view class="disjcac" :style="{height: maxHeight+'rpx'}">
|
||
<!-- 图片 -->
|
||
<image :src="item.iconsrc" mode="widthFix" :style="{width: item.iconWidth +'rpx',height: item.iconHeight +'rpx'}"></image>
|
||
</view>
|
||
<!-- 标题 -->
|
||
<view class="clips1" :style="{color:titlec,fontSize:fonts,marginTop:titleTop}">{{item.title}}</view>
|
||
</view>
|
||
</block>
|
||
</view>
|
||
</swiper-item>
|
||
</swiper>
|
||
<!-- 指示点 -->
|
||
<view class="posia disjcac width100" style="bottom: 20rpx;">
|
||
<view class="mar-y10 gong-ge-spot"
|
||
:class="currentIndex==index ? 'active-spot' : ''"
|
||
v-for="(item,index) in list.length" :key="index"
|
||
:style="{backgroundColor:currentIndex==index ? activeStop : moStop}"></view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
<script>
|
||
import imgTools from '@/jsFile/img/yy-img.js';
|
||
export default {
|
||
name:'column-function',
|
||
props:{
|
||
list:{
|
||
type:Array,
|
||
default:()=>{
|
||
return [
|
||
[
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-person.png',iconWidth:60,iconHeight:60,title:'标题一'},
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-fun.png',iconWidth:60,iconHeight:60,title:'标题二'},
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-home.png',iconWidth:60,iconHeight:60,title:'标题三'},
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-news.png',iconWidth:60,iconHeight:60,title:'标题四'},
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-news.png',iconWidth:60,iconHeight:60,title:'标题四'},
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-news.png',iconWidth:60,iconHeight:60,title:'标题四'},
|
||
],
|
||
[
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-person.png',iconWidth:60,iconHeight:60,title:'标题一'},
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-fun.png',iconWidth:60,iconHeight:60,title:'标题二'},
|
||
{url:'',iconsrc:'/static/tabbar/icon-select-home.png',iconWidth:60,iconHeight:60,title:'标题三'},
|
||
{url:'',iconsrc:'/static/tabbar/icon-scan.png',iconWidth:60,iconHeight:60,title:'标题五'},
|
||
]
|
||
]
|
||
}
|
||
},
|
||
// 是否自动轮播
|
||
ifAutoplay:{
|
||
type:Boolean,
|
||
default:false
|
||
},
|
||
// 一排显示数量
|
||
rowNum:{
|
||
type:String,
|
||
default:'5'
|
||
},
|
||
// 标题颜色
|
||
titlec:{
|
||
type:String,
|
||
default:'#000000'
|
||
},
|
||
// 字体大小
|
||
fonts:{
|
||
type:String,
|
||
default:'28rpx'
|
||
},
|
||
// 字体距离图标的距离
|
||
titleTop:{
|
||
type:String,
|
||
default:'20rpx'
|
||
},
|
||
// item的顶部距离
|
||
itemTop:{
|
||
type:String,
|
||
default:'50rpx'
|
||
},
|
||
// 选中时指示点的颜色
|
||
activeStop:{
|
||
type:String,
|
||
default:'rgba(0,0,0,1)'
|
||
},
|
||
// 未选中时指示点的颜色
|
||
moStop: {
|
||
type:String,
|
||
default:'rgba(0,0,0,.2)'
|
||
}
|
||
},
|
||
data(){
|
||
return {
|
||
currentIndex:0,
|
||
swiperHeight:0,
|
||
}
|
||
},
|
||
mounted() {
|
||
this.changeHeight();
|
||
},
|
||
computed:{
|
||
// 找图标高度最大值
|
||
maxHeight() {
|
||
let arr = [];
|
||
this.list.forEach(item=>{arr.push(item.iconHeight);})
|
||
let max = arr.reduce((a,b)=>{return b > a ? b : a})
|
||
return max;
|
||
}
|
||
},
|
||
methods:{
|
||
// 改变swiper的高度
|
||
changeHeight() {
|
||
const query = uni.createSelectorQuery().in(this)
|
||
query.select('.swiper-item-box').boundingClientRect((rect) => {
|
||
// 查询单个格子的高度,并设置swiper的高
|
||
if(this.list[this.currentIndex].length <= this.rowNum) {
|
||
// 如果每轮的数组长度,小于等于一排显示的个数,那么设置一个格子的高度
|
||
this.swiperHeight = rect.height*1 + 10;
|
||
} else {
|
||
// 如果每轮的数组长度,大于一排显示的个数,那么设置两个个格子的高度
|
||
this.swiperHeight = rect.height*2 + 10;
|
||
}
|
||
|
||
}).exec()
|
||
},
|
||
// 列表选择事件
|
||
chooseGe(url,index) {
|
||
// console.log(imgTools.uploadImg(),137);
|
||
// imgTools.chooseCompressImg();
|
||
imgTools.chooseCompressImg().then(res=>{
|
||
console.log(imgTools.getImgInfo(res));
|
||
})
|
||
// 抛出事件
|
||
// this.$emit('chooseGe',{url,index})
|
||
// if(url) {
|
||
// uni.navigateTo({url})
|
||
// }
|
||
},
|
||
changeEv(e) {
|
||
this.currentIndex = e.detail.current;
|
||
this.changeHeight();
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
.gong-ge-spot{
|
||
width: 20rpx;height: 20rpx;
|
||
border-radius: 100%;
|
||
background-color: rgba(0, 0, 0, .2);
|
||
}
|
||
.active-spot{
|
||
background-color: rgba(0, 0, 0, .5);
|
||
animation: gongspot 3s linear alternate infinite;
|
||
}
|
||
@keyframes gongspot{
|
||
0%{background-color: rgba(0, 0, 0, 1);}
|
||
25%{background-color: rgba(255, 0, 0, 1);}
|
||
50%{background-color: rgba(0, 255, 0, 1);}
|
||
75%{background-color: rgba(0, 0, 255, 1);}
|
||
100%{background-color: rgba(0, 0, 0, 1);}
|
||
}
|
||
</style> |