uniapp无缝滚动核心代码
1、页面代码核心代码
<scroll-view class="scoll-warp">
<view id="scoll-wrapper" class="scoll-wrapper" :animation="animation.animationData">
<view v-for="(item, index) in listData" :key="index" class="floor-item gaokong-item">
<image :src="item.thumb" mode="aspectFill"></image>
<text class="title clamp">{{ item.name }}</text>
</view>
</view>
</scroll-view>2、css核心样式
.scoll-warp {
white-space: nowrap;
}
.scoll-wrapper {
display: flex;
align-items: flex-start;
}
.floor-item {
width: 150upx;
margin-right: 20upx;
font-size: 26upx;
color: #333;
line-height: 1.8;
image {
width: 150upx;
height: 150upx;
border-radius: 6upx;
}
}3、系统变量
data() {
return {
listData: [], //数据
animation: {
scrollWidth: 0,
width: 0,
itemWidth: 0,
animationData: {}
}
};
}4、动画核心
readyScroll() {
let that = this,
query = uni.createSelectorQuery().in(this);
this.$nextTick(function() {
//不加延时,取得不到数据
setTimeout(function() {
query
.selectAll('.gaokong-item')
.boundingClientRect(res => {
if (res.length > 0) {
//宽度减去屏幕宽度that.systmInfo.windowWidth,that.systmInfo.windowWidth需要实际计算
that.animation.width = res[0].right * res.length - that.systmInfo.windowWidth;
that.animation.itemWidth = res[0].right;
console.log(that.animation);
if (that.animation.width > 10) {
that.doScroll();
}
}
})
.exec();
});
}, 500);
},
doScroll() {
let that = this,
speed = 3000;
let animation = uni.createAnimation({
timingFunction: 'linear',
delay: 0
});
let width = 0 - that.animation.width;
setInterval(() => {
if (that.animation.scrollWidth <= width) {
animation.translateX(0).step();
that.animation.scrollWidth = 0;
that.animation.animationData = animation.export();
} else {
that.animation.scrollWidth = that.animation.scrollWidth - that.animation.itemWidth;
animation.translateX(that.animation.scrollWidth).step();
that.animation.animationData = animation.export();
}
}, speed);
}5、调用
onReady() {
this.readyScroll();
}
