vue 跑马灯顶部显示轮播效果

vue 跑马灯顶部显示轮播效果

gif动画展示

在这里插入图片描述

在线预览

在线预览demo

实现原理

使用定时器setInterval对元素的left进行间隔操作,逐渐减小,实现从右到左的移动。
mouseover时对定时器停止,mouseout时重新启动定时器。
由于移动元素需要加点击事件,所以使用了v-html指令,如不需要,请换成v-text

demo代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>跑马灯效果</title>
    <script src="https://cdn.bootcss.com/vue/2.5.15/vue.min.js"></script>
    <style>
        body,
        p {
            margin: 0;
        }

        .marBox {
            background-color: antiquewhite;
            width: 100%;
            height: 30px;
            line-height: 30px;
        }

        .marBox__child {
            width: 100%;
            height: 30px;
            line-height: 30px;
            position: absolute;
            top: 0;
        }
    </style>
</head>

<body>
    <!--容器-->
    <div id="app">
        <div @mouseover="stop" @mouseout="start" class="marBox">
            <p class="marBox__child" :style="styles" v-html="msgStr"></p>
        </div>
    </div>
    <script>
        // 创建一个vue实例
        var vm = new Vue({
            el: '#app', // 绑定id为appid容器
            data: {
                // 通知信息
                msg: [
                    {
                        txt:"获取浏览器的宽度",
                        link:"https://haley1688.gitee.io/toolshaley/pages/checkBrowser.html"
                    },
                    {
                        txt:"Haley的博客",
                        link:"https://blog.csdn.net/weixin_42708208"
                    },
                    {
                        txt:"百度",
                        link:"http://www.baidu.com"
                    },
                    {
                        txt:"颜色模式转换",
                        link:"https://haley1688.gitee.io/toolshaley/pages/colorTransformation.html"
                    },
                ],
                timer: null,
                speed: 100, //速度,数字越大,速度越慢
                left: 2000, //默认起始位置
                step: 5, //每步移动的距离
            },
            mounted() {
                this.start();
            },
            methods: {
                // 启动
                start() {
                    this.timer = setInterval(() => { //定时任务
                        // console.log(this.left, -this.msgStr.length * 10)
                        if (this.left < -this.msgStr.length * 10) {
                            this.left = this.screenWidth
                        } else {
                            this.left -= this.step
                        }
                        // console.log(this.left)
                    }, this.speed);
                },
                // 停止
                stop() {
                    clearInterval(this.timer);
                }

            },
            computed: {
                // 获取屏幕宽度
                screenWidth() {
                    return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth
                },
                // 将通知数组拼接为字符串,
                msgStr() {
                    let arr=this.msg.map(item=>{
                        return `<a href="${item.link}">${item.txt}</a>`
                    })
                    return "<b>通告:</b>" + arr.join(Array(30).join('&nbsp;'))
                },
                // 移动left值
                styles() {
                    return {
                        'left': this.left + 'px'
                    }
                }
            },
            beforeDestroy() {
                this.stop()
            }
        })
    </script>
</body>

</html>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3是一种流行的JavaScript框架,用于构建用户界面。它具有响应式数据绑定和组件化的特性,使得开发者可以更轻松地构建交互式的Web应用程序。 CSS跑马灯轮播图是一种常见的网页元素,用于展示多张图片或内容,并以动画的方式进行切换。在Vue3中,可以通过以下步骤来实现CSS跑马灯轮播图: 1. 创建一个Vue组件,命名为Carousel。 2. 在组件中定义一个data属性,用于存储轮播图的数据,例如图片的URL或者内容。 3. 在组件的模板中使用v-for指令,遍历轮播图数据,并生成对应的DOM元素。 4. 使用CSS样式设置轮播图容器的宽度和高度,并设置overflow属性为hidden,以隐藏超出容器范围的内容。 5. 使用CSS动画或过渡效果,实现轮播图的切换效果。可以使用@keyframes定义动画序列,或者使用transition属性设置过渡效果。 6. 在组件的生命周期钩子函数中,使用定时器或其他方式,控制轮播图的自动切换。 下面是一个简单的示例代码: ```html <template> <div class="carousel"> <div class="slide" v-for="(item, index) in carouselData" :key="index"> <!-- 轮播图内容 --> <img :src="item.image" alt="carousel image" /> </div> </div> </template> <script> export default { data() { return { carouselData: [ { image: 'image1.jpg' }, { image: 'image2.jpg' }, { image: 'image3.jpg' }, ], }; }, }; </script> <style> .carousel { width: 100%; height: 300px; overflow: hidden; } .slide { width: 100%; height: 100%; animation: carouselAnimation 10s infinite; } @keyframes carouselAnimation { 0% { transform: translateX(0); } 33% { transform: translateX(-100%); } 66% { transform: translateX(-200%); } 100% { transform: translateX(0); } } </style> ``` 这是一个简单的Vue3 CSS跑马灯轮播图的实现示例。你可以根据自己的需求进行样式和动画的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值