Vue实现简单的跑马灯

下面是使用Vue实现简单的跑马灯的完整攻略:

1. 准备工作

首先需要引入Vue库,以及一些基础的CSS样式(可根据需要自行添加):

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Vue跑马灯</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .wrapper {
            overflow: hidden;
            white-space: nowrap;
            width: 100%;
            height: 50px;
        }

        .text {
            display: inline-block;
            margin-right: 50px;
        }

        /* 鼠标移上去时停止滚动 */
        .wrapper:hover {
            animation-play-state: paused;
        }

        /* 动画 */
        @keyframes scroll {
            0% {
                transform: translateX(0);
            }
            100% {
                transform: translateX(-100%);
            }
        }
    </style>
</head>
<body>
    <div id="app">
        <div class="wrapper">
            <div class="text">这是第一条跑马灯内容</div>
            <div class="text">这是第二条跑马灯内容</div>
            <div class="text">这是第三条跑马灯内容</div>
        </div>
    </div>
</body>
</html>

2. Vue实现跑马灯

在HTML结构中,我们已经准备好了跑马灯的内容,接下来需要用Vue来实现滚动效果。

在Vue实例的created钩子中,我们通过setInterval方法每隔一定时间调用一次scroll方法来实现文字的滚动效果。在scroll方法中,我们通过计算文字内容的总长度和每次移动的距离,来更新wrapper元素的transform属性,实现滚动效果。

<div id="app">
    <div class="wrapper" ref="textWrapper">
        <div class="text">这是第一条跑马灯内容</div>
        <div class="text">这是第二条跑马灯内容</div>
        <div class="text">这是第三条跑马灯内容</div>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var app = new Vue({
        el: '#app',
        created: function () {
            var self = this;
            setInterval(function () {
                self.scroll();
            }, 20);
        },
        methods: {
            scroll: function () {
                var wrapper = this.$refs.textWrapper;
                var firstChild = wrapper.children[0];
                var wrapperWidth = wrapper.offsetWidth;
                var firstChildWidth = firstChild.offsetWidth;
                var offset = 1; // 每次滚动的距离

                // 如果当前元素移动到屏幕外面,就重新插入到列表的最后面
                if (wrapperWidth + wrapper.scrollLeft <= firstChildWidth) {
                    wrapper.appendChild(firstChild.cloneNode(true));
                    wrapper.scrollTop = 0;
                } else {
                    wrapper.scrollLeft += offset;
                }
            }
        }
    });
</script>

示例1:https://codepen.io/pen/abyPOmO

在第一个示例中,我们每隔20ms滚动一次文字内容,每次滚动的距离为1px,文字内容滚动到屏幕外时,将其复制一份插入到元素列表的最后面,从而实现无限滚动效果。

3. 参数配置

以上示例的滚动速度和距离是固定的,如果需要动态的配置跑马灯的滚动速度和距离,可以通过props定义组件的属性,并通过props配置来控制这些参数。

<div id="app">
    <div class="wrapper" ref="textWrapper">
        <div class="text" v-for="(item, index) in items" :key="index">{{item}}</div>
    </div>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    Vue.component('marquee', {
        props: {
            distance: {
                type: Number,
                default: 1
            },
            speed: {
                type: Number,
                default: 20
            },
            items: {
                type: Array,
                default: function () {
                    return [];
                }
            }
        },
        template: `
            <div class="wrapper" ref="textWrapper">
                <div class="text" v-for="(item, index) in items" :key="index">{{item}}</div>
            </div>
        `,
        created: function () {
            var self = this;
            setInterval(function () {
                self.scroll();
            }, self.speed);
        },
        methods: {
            scroll: function () {
                var wrapper = this.$refs.textWrapper;
                var firstChild = wrapper.children[0];
                var wrapperWidth = wrapper.offsetWidth;
                var firstChildWidth = firstChild.offsetWidth;
                var offset = this.distance;

                if (wrapperWidth + wrapper.scrollLeft <= firstChildWidth) {
                    wrapper.appendChild(firstChild.cloneNode(true));
                    wrapper.scrollTop = 0;
                } else {
                    wrapper.scrollLeft += offset;
                }
            }
        }
    });

    var app = new Vue({
        el: '#app'
    });
</script>

示例2:https://codepen.io/pen/KKWvvza

在第二个示例中,我们将实现跑马灯的逻辑封装为一个Vue组件,通过props定义组件的参数,然后通过在组件的实例中访问这些参数来控制跑马灯的滚动。在该示例中,我们新增了两个props,分别用于配置跑马灯滚动的速度和距离。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue实现简单的跑马灯 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue2 使用@vue/composition-api依赖包 编译、打包各种报错问题分析

    “@vue/composition-api”是Vue官方推出的、用于支持Vue2使用Composition API的依赖包。使用该依赖包,可以方便地在Vue2中使用Vue3的Composition API特性来进行组合式开发。 但是,在编译、打包时可能会出现各种问题。下面是使用“@vue/composition-api”依赖包时的一些常见报错问题分析。 问题…

    Vue 2023年5月28日
    00
  • vue项目中实现多文件上传功能实例代码

    下面是“vue项目中实现多文件上传功能实例代码”的完整攻略: 实现思路 在 Vue 项目中实现多文件上传功能,需要联合使用 HTML5 的 FileReader API 和 axios 来实现。实现思路如下: 通过 input 标签接收用户上传的文件。 把文件列表存储到 vue 组件的 data 中,通过 v-for 循环来渲染上传列表。 使用 FileRe…

    Vue 2023年5月28日
    00
  • vue3通过render函数实现菜单下拉框的示例

    关于vue3通过render函数实现菜单下拉框的攻略,下面给出详细的步骤: 1. 创建下拉菜单组件 首先,我们需要创建一个下拉菜单组件,命名为DropdownMenu。这个组件包括一个展开/收起菜单的按钮和一个菜单列表。这个组件的模板代码可以如下编写: <template> <div> <button @click="…

    Vue 2023年5月28日
    00
  • vue.js 实现v-model与{{}}指令方法

    下面我来详细讲解一下“vue.js 实现v-model与{{}}指令方法”的完整攻略。 什么是v-model指令? 在vue.js中,v-model指令用于在用户表单输入和应用程序之间创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素,包括input、textarea、select等。 v-model指令的用法: v-model指令需要和表单元素…

    Vue 2023年5月28日
    00
  • vue生成文件本地打开查看效果的实例

    让我来详细讲解一下“Vue生成文件本地打开查看效果的实例”的完整攻略。整个过程分为以下几个步骤: 1. 安装Vue Cli 首先,我们需要全局安装Vue的脚手架工具Vue Cli。可以使用以下命令进行安装: npm install -g @vue/cli 2. 创建Vue项目 使用Vue Cli创建一个新的Vue项目。 vue create my-proje…

    Vue 2023年5月28日
    00
  • vue实现搜索关键词高亮的详细教程

    下面是“vue实现搜索关键词高亮的详细教程”的完整攻略。 一、需求分析 我们需要实现一个搜索功能,在用户搜索关键词后,将页面中匹配到的关键词高亮显示。 二、实现过程 1. HTML结构 首先,我们需要在HTML中准备好需要搜索的容器,并且将搜索结果渲染到容器中。 <div class="search-container"> &…

    Vue 2023年5月27日
    00
  • Vue组件实现卡片动画倒计时示例详解

    下面是“Vue组件实现卡片动画倒计时示例详解”的完整攻略: 标题 一、项目介绍 介绍该项目的背景和目的,如:Vue组件实现卡片动画倒计时,可以应用在各类网页和手机应用中,方便用户知晓某个活动、限时促销等的剩余时间。 二、技术栈 列举使用的技术,如:Vue.js框架、CSS3动画等。 三、项目实现 1.基础HTML、CSS实现 通过HTML和CSS实现基本的卡…

    Vue 2023年5月29日
    00
  • Vue项目中数据的深度监听或对象属性的监听实例

    在Vue项目中,如果需要监听数据的变化,可以使用Vue提供的语法糖——$watch来实现。$watch支持监听某个具体的数据对象以及数据对象中的属性。 监听某个具体的数据对象 监听某个具体的数据对象可以通过在Vue实例中使用$watch方法来实现。下面是一个示例: // 假设我们有一个Vue实例,并且其中有一个name属性 var vm = new Vue(…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部