当前位置:首页 > 前端 > 正文内容

uniapp无缝滚动核心代码

Z先生5年前 (2020-02-18)前端765

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();
}


分享给朋友:

相关文章

简易CSS3仿照微信对话框

惯例,直接上代码HTML代码:<div class="say-box say-left"> <div class="s...

Ckeditor踩坑记

说实话,用了很多富文本编辑器,最精益求精的还是Ckeditor! 曾经一度依赖于百度的Ueditor,因为其简单,方便;特别是在图片上传、H5上传、远程文件下载支持这三个方面,表现尤为突出!...

uniapp开发小程序,小程序二维传参与H5、分享页面参数兼容的处理方案。

首先小程序获取二维码接口有三个,2个限制数量,一个不限制数量,但是限制生成频率(5000次/分钟)和参数长度(32位),我使用的是不限数量的接口:getUnlimited,传递的参数为:invite=...

写给即将寿终正寝的Flash,即html5 Flash解决方案

写给即将寿终正寝的Flash,即html5 Flash解决方案

Adobe的Flash将于2020年12月31日正式终止。Adobe公司最近宣布,将会正式宣布停止对Flash的支持,这也变相宣布了Flash的死亡,Flash Player将于2020年12月31日...

js获取指定文件的路径

获取指定js文件的路径var src = '/static/js/demo.js'; var path = src.sub...

记vue/uniapp本地调试以及部署代理服务器设置哪些事

接触vue差不多也一年有余,很多概念性的东西都不懂,逐步已经习惯了npm来安装,之前其他同事做的一些项目,npm自己拿过来也踩了很多坑,比如换个环境再npm就跑不起来了等等之类的,遇到最多的就是scs...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。