探讨JavaScript实现类似弹幕的跑马灯效果

简介: 探讨JavaScript实现类似弹幕的跑马灯效果

在现代网页设计中,类似弹幕的跑马灯效果是一种非常吸引眼球的动态展示方式。它可以用于显示公告、新闻标题、用户评论等不断滚动的信息。本文将详细介绍如何使用JavaScript实现类似弹幕的跑马灯效果,并提供多个实际代码案例。

1. 基本的跑马灯效果

案例1:简单的水平滚动

首先,让我们从一个简单的水平滚动效果开始,这种效果会不断滚动一行文本。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Simple Marquee</title>
    <style>
        .marquee {
            width: 100%;
            overflow: hidden;
            white-space: nowrap;
            box-sizing: border-box;
        }
        .marquee span {
            display: inline-block;
            padding-left: 100%;
            animation: marquee 10s linear infinite;
        }
        @keyframes marquee {
            0%   { transform: translateX(0); }
            100% { transform: translateX(-100%); }
        }
    </style>
</head>
<body>
    <div class="marquee">
        <span>This is a simple marquee effect using CSS and JavaScript.</span>
    </div>
</body>
</html>

在这个示例中,我们使用了CSS动画来实现基本的跑马灯效果。@keyframes定义了一个从右到左滚动的动画。

2. 使用JavaScript控制跑马灯

虽然CSS动画可以实现简单的跑马灯效果,但在某些情况下,我们需要更灵活的控制,如动态添加内容或调整滚动速度。我们可以使用JavaScript来增强功能。

案例2:使用JavaScript动态控制跑马灯

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript Controlled Marquee</title>
    <style>
        .marquee {
            width: 100%;
            overflow: hidden;
            white-space: nowrap;
            box-sizing: border-box;
            border: 1px solid #000;
            padding: 10px;
        }
        .marquee span {
            display: inline-block;
            padding-left: 100%;
        }
    </style>
</head>
<body>
    <div class="marquee" id="marquee">
        <span id="marqueeContent">This is a JavaScript controlled marquee effect.</span>
    </div>
    <button onclick="addContent()">Add Content</button>
    <script>
        var marquee = document.getElementById('marquee');
        var marqueeContent = document.getElementById('marqueeContent');
        function startMarquee() {
            var width = marquee.offsetWidth;
            var contentWidth = marqueeContent.offsetWidth;
            var pos = width;
            function step() {
                if (pos <= -contentWidth) {
                    pos = width;
                } else {
                    pos--;
                }
                marqueeContent.style.transform = 'translateX(' + pos + 'px)';
                requestAnimationFrame(step);
            }
            step();
        }
        function addContent() {
            var newContent = document.createElement('span');
            newContent.textContent = ' New content added!';
            marqueeContent.appendChild(newContent);
        }
        startMarquee();
    </script>
</body>
</html>

在这个示例中,我们使用JavaScript来控制跑马灯的滚动,并提供了一个按钮来动态添加内容。requestAnimationFrame用于创建平滑的动画效果。

3. 基于多个元素的跑马灯

有时,我们需要展示多个元素,而不仅仅是一行文本。这种情况下,我们可以使用JavaScript来创建基于多个元素的跑马灯效果。

案例3:展示多个元素的跑马灯

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Multi-Element Marquee</title>
    <style>
        .marquee {
            width: 100%;
            overflow: hidden;
            white-space: nowrap;
            box-sizing: border-box;
            border: 1px solid #000;
            padding: 10px;
        }
        .marquee div {
            display: inline-block;
            padding-left: 100%;
            margin-right: 20px;
        }
    </style>
</head>
<body>
    <div class="marquee" id="marquee">
        <div>Item 1</div>
        <div>Item 2</div>
        <div>Item 3</div>
        <div>Item 4</div>
    </div>
    <script>
        var marquee = document.getElementById('marquee');
        var items = Array.from(marquee.children);
        function startMarquee() {
            var width = marquee.offsetWidth;
            var totalWidth = items.reduce((sum, item) => sum + item.offsetWidth + 20, 0); // 20 is the margin-right
            var pos = width;
            function step() {
                if (pos <= -totalWidth) {
                    pos = width;
                } else {
                    pos--;
                }
                items.forEach(item => {
                    item.style.transform = 'translateX(' + pos + 'px)';
                });
                requestAnimationFrame(step);
            }
            step();
        }
        startMarquee();
    </script>
</body>
</html>

在这个示例中,我们使用多个<div>元素来展示不同的内容,并使用JavaScript进行滚动控制。所有元素一起滚动,实现类似弹幕的效果。

4. 支持暂停和恢复的跑马灯

在某些情况下,我们可能需要让用户暂停和恢复跑马灯。我们可以使用JavaScript来实现这些功能。

案例4:支持暂停和恢复的跑马灯

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Pause and Resume Marquee</title>
    <style>
        .marquee {
            width: 100%;
            overflow: hidden;
            white-space: nowrap;
            box-sizing: border-box;
            border: 1px solid #000;
            padding: 10px;
        }
        .marquee span {
            display: inline-block;
            padding-left: 100%;
        }
    </style>
</head>
<body>
    <div class="marquee" id="marquee">
        <span id="marqueeContent">This marquee effect supports pause and resume.</span>
    </div>
    <button onclick="toggleMarquee()">Pause/Resume</button>
    <script>
        var marquee = document.getElementById('marquee');
        var marqueeContent = document.getElementById('marqueeContent');
        var animationId;
        var pos = 0;
        var running = true;
        function startMarquee() {
            var width = marquee.offsetWidth;
            var contentWidth = marqueeContent.offsetWidth;
            function step() {
                if (running) {
                    if (pos <= -contentWidth) {
                        pos = width;
                    } else {
                        pos--;
                    }
                    marqueeContent.style.transform = 'translateX(' + pos + 'px)';
                }
                animationId = requestAnimationFrame(step);
            }
            step();
        }
        function toggleMarquee() {
            running = !running;
            if (running) {
                startMarquee();
            } else {
                cancelAnimationFrame(animationId);
            }
        }
        startMarquee();
    </script>
</body>
</html>

在这个示例中,我们添加了一个按钮用于暂停和恢复跑马灯。通过设置running变量,我们可以控制动画的暂停和恢复。

结语

本文介绍了如何使用JavaScript实现类似弹幕的跑马灯效果。我们通过多个实际代码案例,展示了不同场景下的解决方案,包括基本的水平滚动、动态控制、展示多个元素以及支持暂停和恢复的跑马灯。希望这些示例能帮助你更好地理解和应用JavaScript中的跑马灯效果。

目录
相关文章
|
10天前
|
前端开发 JavaScript
杨校老师课堂之JavaScript案例之跑马灯左右无缝连接图片自动轮播
杨校老师课堂之JavaScript案例之跑马灯左右无缝连接图片自动轮播
9 2
|
11月前
|
JavaScript 前端开发
JS实现无缝隙跑马灯
JS实现无缝隙跑马灯
72 0
|
JavaScript
如何用原生JS实现跑马灯效果
如何用原生JS实现跑马灯效果
150 0
如何用原生JS实现跑马灯效果
|
12月前
|
JavaScript
html+css+js实现无缝隙跑马灯
html+css+js实现无缝隙跑马灯
128 0
|
JavaScript 前端开发
vue js文字跑马灯基础版本
提供两种解决思路
263 1
|
JavaScript 前端开发
杨校老师课堂之JavaScript案例之跑马灯左右无缝连接图片自动轮播
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/80177295  JavaScript案例之跑马灯左右无缝连接 效果图: 思路:     1.
891 0
|
JavaScript 前端开发
|
4天前
|
XML 缓存 JavaScript
一篇文章讲明白JS模板引擎之JST模板
一篇文章讲明白JS模板引擎之JST模板
|
17天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园食堂订餐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园食堂订餐系统附带文章源码部署视频讲解等
50 10
|
17天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园失物招领网站附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园失物招领网站附带文章源码部署视频讲解等
28 9