• vue 实现走马灯效果


    Part.1  问题 

    在写一个H5页面时遇到一个需求,头部公告需要滚动变换,需要实现一个走马灯效果

    Part.2  实现

    我的做法:利用 定时器 + CSS3 变换公告数组的顺序 从而实现走马灯效果

    Part.3  代码

    HTML

    <template>
      <div class="home">
           <div class="home-box">
               <div style="background: #fdfbde">
                   <div class="marquee">
                       <div class="marquee_box">
                           <ul class="marquee_list" :class="{marquee_top:animate}">
                               <li v-for="(item, index) in announcementArr" :key="index">
                                   <span>{{item}}</span>
                               </li>
                           </ul>
                       </div>
                   </div>
               </div>
           </div>
      </div>
    </template>

    CSS

    <style type="text/css">
    .home {
        height: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .home-box {
        width: 200px;
        height: 200px;
    }
    .marquee {
        width: 100%;
        height: 30px;
        align-items: center;
        color: #3A3A3A;
        background-color: #fdfbde;
        display: flex;
        box-sizing: border-box;
    }
    
    .marquee_box {
        display: block;
        position: relative;
        width: 60%;
        height: 30px;
        overflow: hidden;
    }
    
    .marquee_list {
        display: block;
        position: absolute;
        top: 0;
        left: 0;
    }
    
    .marquee_top {
        transition: all 0.5s;
        margin-top: -30px
    }
    
    .marquee_list li {
        height: 30px;
        line-height: 30px;
        font-size: 12px;
        padding-left: 20px;
    }
    
    .marquee_list li span {
        padding: 0 2px;
        color: #f1543a;
    }
    </style>

    JS

    <script>
    export default {
        name: 'Home',
        data() {
            return {
                announcementArr: [],
                animate: false
            }
        },
        mounted() {
            this.addAnnouncement();
    
            setInterval(this.showMarquee, 2000);
        },
        methods: {
            addAnnouncement: function() {
               this.announcementArr = ['测试滚动001','测试滚动002','测试滚动003','测试滚动004']
            },
            showMarquee: function() {
                this.animate = true;
                setTimeout(() => {
                    this.announcementArr.push(this.announcementArr[0]);
                    this.announcementArr.shift();
                    this.animate = false
                }, 1000)
            }
        }
    }
    </script>

    Part.4  注意点

    在 js 中我使用的是  setInterval 中 利用 setTimeout 来调用方法

    方法详解:

               setInterval  —— 会不停的调用函数

               setTimeout —— 只会执行函数一次

    这么写的原因:

                  如果单纯的使用 setInterval 会导致页面卡死,原因与JS引擎线程有关(有兴趣的童鞋可以研究一下),setInterval  不会清除定时器队列,每次重复执行会导致定时器叠加,最终卡死网页。而 setTimeout 是自带清除定时器的

    Part.5  效果

  • 相关阅读:
    Java.util.Timer的灵活配置与使用
    js字符变量判空
    js获取当前时间格式化字符串
    Java快速获取格式化的日期字符串
    img标签显示图片方法总结
    Java获取给定日期的月初和月末两个日期
    SpringBoot学习--07配置Druid数据库连接池
    SpringBoot学习--06使用jackson返回json数据
    SpringBoot学习--05SpringBoot整合Mybatis(下)(mybatis中踩过的坑)--不定时更新
    SpringBoot学习--04SpringBoot整合Mybatis(上)(配置mybatis generator)
  • 原文地址:https://www.cnblogs.com/langxiyu/p/11083708.html
Copyright © 2020-2023  润新知