You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
3.4 KiB
194 lines
3.4 KiB
<template> |
|
<view class="uni-load-more"> |
|
<view class="uni-load-more__img" v-show="status === 'loading' && showIcon"> |
|
<view class="load1"> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
</view> |
|
<view class="load2"> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
</view> |
|
<view class="load3"> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
<view :style="{background:color}"></view> |
|
</view> |
|
</view> |
|
<text class="uni-load-more__text" :style="{color:color}">{{status === 'more' ? contentText.contentdown : (status === 'loading' ? contentText.contentrefresh : contentText.contentnomore)}}</text> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
export default { |
|
name: "uni-load-more", |
|
props: { |
|
status: { |
|
//上拉的状态:more-loading前;loading-loading中;noMore-没有更多了 |
|
type: String, |
|
default: 'more' |
|
}, |
|
showIcon: { |
|
type: Boolean, |
|
default: true |
|
}, |
|
color: { |
|
type: String, |
|
default: "#777777" |
|
}, |
|
contentText: { |
|
type: Object, |
|
default () { |
|
return { |
|
contentdown: "上拉显示更多", |
|
contentrefresh: "正在加载...", |
|
contentnomore: "没有更多数据了" |
|
}; |
|
} |
|
} |
|
}, |
|
data() { |
|
return {} |
|
} |
|
} |
|
</script> |
|
|
|
<style> |
|
@charset "UTF-8"; |
|
|
|
.uni-load-more { |
|
display: flex; |
|
flex-direction: row; |
|
height: 80upx; |
|
align-items: center; |
|
justify-content: center |
|
} |
|
|
|
.uni-load-more__text { |
|
font-size: 28upx; |
|
color: #999 |
|
} |
|
|
|
.uni-load-more__img { |
|
height: 24px; |
|
width: 24px; |
|
margin-right: 10px |
|
} |
|
|
|
.uni-load-more__img>view { |
|
position: absolute |
|
} |
|
|
|
.uni-load-more__img>view view { |
|
width: 6px; |
|
height: 2px; |
|
border-top-left-radius: 1px; |
|
border-bottom-left-radius: 1px; |
|
background: #999; |
|
position: absolute; |
|
opacity: .2; |
|
transform-origin: 50%; |
|
animation: load 1.56s ease infinite |
|
} |
|
|
|
.uni-load-more__img>view view:nth-child(1) { |
|
transform: rotate(90deg); |
|
top: 2px; |
|
left: 9px |
|
} |
|
|
|
.uni-load-more__img>view view:nth-child(2) { |
|
transform: rotate(180deg); |
|
top: 11px; |
|
right: 0 |
|
} |
|
|
|
.uni-load-more__img>view view:nth-child(3) { |
|
transform: rotate(270deg); |
|
bottom: 2px; |
|
left: 9px |
|
} |
|
|
|
.uni-load-more__img>view view:nth-child(4) { |
|
top: 11px; |
|
left: 0 |
|
} |
|
|
|
.load1, |
|
.load2, |
|
.load3 { |
|
height: 24px; |
|
width: 24px |
|
} |
|
|
|
.load2 { |
|
transform: rotate(30deg) |
|
} |
|
|
|
.load3 { |
|
transform: rotate(60deg) |
|
} |
|
|
|
.load1 view:nth-child(1) { |
|
animation-delay: 0s |
|
} |
|
|
|
.load2 view:nth-child(1) { |
|
animation-delay: .13s |
|
} |
|
|
|
.load3 view:nth-child(1) { |
|
animation-delay: .26s |
|
} |
|
|
|
.load1 view:nth-child(2) { |
|
animation-delay: .39s |
|
} |
|
|
|
.load2 view:nth-child(2) { |
|
animation-delay: .52s |
|
} |
|
|
|
.load3 view:nth-child(2) { |
|
animation-delay: .65s |
|
} |
|
|
|
.load1 view:nth-child(3) { |
|
animation-delay: .78s |
|
} |
|
|
|
.load2 view:nth-child(3) { |
|
animation-delay: .91s |
|
} |
|
|
|
.load3 view:nth-child(3) { |
|
animation-delay: 1.04s |
|
} |
|
|
|
.load1 view:nth-child(4) { |
|
animation-delay: 1.17s |
|
} |
|
|
|
.load2 view:nth-child(4) { |
|
animation-delay: 1.3s |
|
} |
|
|
|
.load3 view:nth-child(4) { |
|
animation-delay: 1.43s |
|
} |
|
|
|
@-webkit-keyframes load { |
|
0% { |
|
opacity: 1 |
|
} |
|
|
|
100% { |
|
opacity: .2 |
|
} |
|
} |
|
</style> |