vue垂直滚动文字公告效果

Posted 汤米粥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue垂直滚动文字公告效果相关的知识,希望对你有一定的参考价值。

想做一个垂直滚动的公告栏效果,网上找了好久才找到一个靠谱的,有的不滚动,后来才研究清楚几个关键的知识。

1. 只要把第一个div向上滚动,后面的兄弟div不需要代码控制,它们会自动上移。

2.  that.play = false 一定要修改属性,只有修改属性才能触发控件重绘,才会有移动效果。

下面是具体的代码:VerticalScrollText.vue

<template>
    <div id="demo">
        <div class="list">
            <div class ="child" v-for="(item, index) in ulList" :key="item.id" :class="!index && play? 'toUp' : ''">
                  item.msg  !
            </div>
        </div>
    </div>
</template>

<script>
export default 
    mounted() 
        setInterval(this.startPlay, 2000)
    ,
    data() 
        return 
            ulList: [
                 msg: '这是第一条信息' ,
                 msg: '这是第二条信息' ,
                 msg: '这是第三条信息' ,
                 msg: '这是第四条信息' ,
                 msg: '这是第五条信息' ,
                 msg: '这是第六条信息' ,
                 msg: '这是第七条信息' ,
                 msg: '这是第八条信息' ,
                 msg: '这是第九条信息' ,
                 msg: '这是第十条信息' 
            ],
            play: true
        
    ,
    methods: 
        startPlay() 
            let that = this
            that.play = true //开始播放
            setTimeout(() => 
                that.ulList.push(that.ulList[0]) //将第一条数据塞到最后一个
                that.ulList.shift() //删除第一条数据
                that.play = false //暂停播放,此处修改,保证每一次都会有动画显示。 一定要修改属性,只有修改属性这样才能触发控件刷新冲毁!!!!
            , 1000)
        ,


        //只要对第一行进行滚动,下面的自动会跟着往上移动。
        isScroll(index)
            if(index == 0)
                return true
            else
                return false
            
        
    

</script>

<style lang="scss" scoped>


.list 
    list-style: none;
    width: 500px;
    text-align: center;
    overflow: hidden;
    background-color: #ff8833;
    height: 40px;
    color: #ffff00;
    padding: 0;
    margin: 10px 0px 0px 10px;
    padding-left: 10px;


.child 
    text-align: left;   /**覆盖外层设置的水平居中效果**/
    height: 40px;
    line-height: 40px;  /**span 垂直居中需要这一句**/


.toUp 
    margin-top: -40px;  //向上移
    transition: all 0.5s;


</style>

为了加深理解,又写了一个场景示例:

<template>
    

        <!--消息通知效果-->
        <div id="box">
            <ul id="msg-container">
                <li class="child" v-for='(item, index) in msg' :class="!index && animate ? 'toUp' : ''">
             item.name 抽中 item.goods ---------->  item.count == 0 ? randomNum(item) : item.count 人获得优惠券</li>
            </ul>
        </div>


   
</template>

<script>
 
export default 
    name: "hello",

    head: 
        title: "测试网站"
    ,

   

    data() 
        
            animate: false,
            setInTime: '', // 定时器
            msg: [
                
                    name: '张**',
                    goods: '牙膏',
                    count: 0,
                ,
                
                    name: '王**',
                    goods: '牙刷',
                    count: 0,
                ,
                
                    name: '钟**',
                    goods: '肥皂',
                    count: 0,
                
            ]

        
    ,

    mounted() 

        this.setInTime = setInterval(this.showMarquee, 2000);
    ,

    destory() 
        clearInterval(this.setInTime) // 页面销毁时清除定时器
    ,

 

    methods: 

        //生成随机数
        randomNum(item) 
            if (item.count == 0) 
                item.count = Math.ceil(Math.random() * 10000);
            
        ,

        // 滚动栏滚动
        showMarquee() 
            this.animate = true
            setTimeout(() => 
                this.msg.push(this.msg[0])  将第一条数据塞到最后一个
                this.msg.shift() // //删除第一条数据
                this.animate = false
            , 1000)
        ,

    



</script>

<style>

#msg-container 
    width: 500px;
    height: 80px;
    background: #AB2D00;
    color: #ffffff;
    text-align: center;
    border-radius: 18px;
    overflow: hidden;
    padding-left: 10px;


.child 
    height: 40px;
    line-height: 40px; /**有这一句span元素才能垂直居中**/
    text-align: left;


.toUp 
    margin-top: -40px;
    transition: all 1s


</style>

以上是关于vue垂直滚动文字公告效果的主要内容,如果未能解决你的问题,请参考以下文章

marquee|各种文字滚动代码(适用公告)

Flutter 文字上下滚动切换 用于公告消息提示

Flutter 文字上下滚动切换 用于公告消息提示

JS新闻公告文字逐条向上翻滚代码

vue-particles粒子动画插件的使用和爬坑出现垂直滚动条

vue文字跑马灯效果