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日

相关文章

  • vuex中Getter的用法详解

    Vuex中Getter的用法详解 Vuex是Vue.js中使用的状态管理模式。它建立在Vue.js的基础上,提供了中央数据存储库,使得组件之间共享状态变得非常容易。 getter是Vuex中获取状态的一种方法,它可以访问状态的属性并进行某些计算。本篇文章将详细讲解getter的用法。 Getter的定义 在Vuex中使用getter可以获取状态的值并进行计算…

    Vue 2023年5月28日
    00
  • 浅谈Vue的加载顺序探讨

    浅谈Vue的加载顺序探讨 在使用Vue时,了解其加载顺序是非常重要的。本文将从Vue实例的创建与挂载、组件的异步与同步加载以及动态组件等角度探讨Vue的加载顺序。 Vue实例的创建与挂载 当我们创建并挂载一个Vue实例时,Vue的加载顺序如下: 首先Vue会调用Vue._init()方法进行实例的初始化,此时尚未渲染DOM。 紧接着Vue会调用$mount(…

    Vue 2023年5月29日
    00
  • Vue父子组件通信全面详细介绍

    我来为你详细讲解Vue父子组件通信的攻略。 什么是Vue组件通信 在Vue中,组件是指封装了HTML、CSS和JavaScript的功能单元,用于构建Web应用。组件化开发可以帮助开发者更好地管理和组织复杂的UI,提高代码复用性。 Vue组件通信是指在Vue应用中,不同组件之间进行数据传递和事件触发的过程。由于Vue使用了单向数据流的原则,所以Vue组件通信…

    Vue 2023年5月29日
    00
  • VUE 组件转换为微信小程序组件的方法

    下面是关于VUE组件转换为微信小程序组件的方法的完整攻略。 1. 确认需要转换的组件 首先需要明确需要转换的组件类型和功能,确认需要转换的组件以及该组件的功能是否可以在微信小程序中实现,以及是否需要对样式和布局进行修改。 2. 安装相关依赖 使用 mpvue-loader 和 postcss-mpvue-wxss 进行vue组件转微信小程序组件的开发,需要安…

    Vue 2023年5月27日
    00
  • vue proxy 的优势与使用场景实现

    Vue Proxy是什么? Vue Proxy是Vue.js提供的一种代理服务器。我们可以使用代理服务器来将网络请求转发到其他URL上,同时也可以拦截请求并对其进行一系列的处理。Vue Proxy的原理是使用Webpack Dev Server实现的。 Vue Proxy的配置需要在webpack的配置文件中进行定义。在使用Vue CLI构建Vue.js项目…

    Vue 2023年5月27日
    00
  • vue+axios+promise实际开发用法详解

    vue+axios+promise实际开发用法详解 什么是axios和promise axios axios是一个基于Promise用于浏览器和node.js的HTTP客户端。它具有以下特征: 支持浏览器和 node.js 支持 Promise API 拦截请求和响应 转换请求和响应数据 Promise Promise是一种用于异步编程的语言特性,它可以让我…

    Vue 2023年5月28日
    00
  • vue接口请求加密实例

    我来详细讲解一下“Vue接口请求加密实例”的完整攻略。整个过程可以分为以下几个步骤: 生成密钥 加密请求参数 发送加密后的请求 服务器验证签名并进行解密 下面我会就每一个步骤进行详细讲解,并给出两个示例说明。 步骤一:生成密钥 在前端与后端约定好密钥算法后,前端需要先生成密钥。这里我们以sha256算法为例: const crypto = require(‘…

    Vue 2023年5月28日
    00
  • 简易vuex4核心原理及实现源码分析

    下面就来详细讲解一下“简易vuex4核心原理及实现源码分析”的完整攻略。 一、什么是Vuex? Vuex是Vue.js官方推出的一款状态管理模式。作为一个共享状态管理库,它可以将多个组件之间共享的状态抽离出来形成全局唯一数据源,提供了一种集中式存储和管理应用状态的方案。 二、Vuex核心原理 Vuex的核心原理是响应式数据,也就是说,所有数据的变更都可以被具…

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