Vue 通过对列表的push实现无限滚动

vue有很多滚动插件,但是目前找不到通过修改数据实现滚动的插件,大部分的插件都是通过dom元素的滚动实现的,这种插件滚动起来更加平滑,但是有个问题:

如果要区别第一条数据,就需要通过对列表进行push操作了
注:单纯的滚动可以用vue-seamless-scroll插件


<template>

    <div class="box">

        <ul ref="container">

            <li v-for="(item,index) in list" :key="item.id"> {{ item.text }}</li>

        </ul>

    </div>

</template>

<script>

    export default {

        name: 'ScrollList',

        data() {

            return {

                list: [ 

                    {id: 1, text: '列表1'},

                    {id: 2, text: '列表2'},

                    {id: 3, text: '列表3'},

                    {id: 4, text: '列表4'},

                    {id: 5, text: '列表5'}

                ]

            }

        },

        mounted() {

            this.scrollList()

        },

        methods: {

            scrollList() {

                const oUl = this.$refs['container']

                const oli = document.getElementsByTagName('li')

                const maxL = oli[0].offsetHeight

                let timer = 0

                const moveLi = () => {

                    timer++

                    if (timer >= maxL) {

                        timer = 0

                        this.list.push(...this.list.splice(0, 1))

                    }

                    oUl.style.top = '-' + timer + 'px'

                }

                setInterval(moveLi, 30)

            }

        },

    }

</script>

<style lang="less" scoped>

    .box {

        width: 100%;

        height: 300px;

        overflow: hidden;

        ul {

            position: absolute;

            top: 0;

            left: 0;

            padding: 0;

            margin: 0;

            width: 100%;

            li {

                width: 100%;

                height: 30px;

                line-height: 30px;

                text-align: center;

                font-size: 16px;

                list-style: none;

            }

        }

    }

</style>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Vue Vue是一个前端js框架,由尤雨溪开发,是个人项目 Vue近几年来特别的受关注,三年前的时候angular...
    hcySam阅读 301评论 0 0
  • client,page和screen的区别? clientX,clientY是触摸点相对于viewport视口x,...
    change_22fa阅读 1,719评论 1 1
  • cors中间件解决跨域问题的三个步骤 1、 npm install cors 安装中间件 2、使用con...
    黑云阅读 269评论 0 2
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,049评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,104评论 0 4