珊阡陌提 2024-07-18 10:16 采纳率: 29.4%
浏览 4

(标签-html|关键词-无缝滚动)

html 怎么实现无缝滚动


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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="marquee-container">
        <div class="marquee-box" style="background-color: #f8e71c">1</div>
        <div class="marquee-box" style="background-color: #ff6b6b">2</div>
        <div class="marquee-box" style="background-color: #4cd964">3</div>
        <div class="marquee-box" style="background-color: #5acdff">4</div>
        <div class="marquee-box" style="background-color: #ff9f1c">5</div>
    </div>

    <script>
       
    </script>

    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .marquee-container {
            position: relative;
            width: 1850px;
            height: 500px;
            margin: 0 auto;
            overflow: hidden;
            display: flex;

            border: 1px solid red;
        }

        .marquee-box {
            width: 440px;
            height: 500px;
            flex-shrink: 0;
            margin-right: 30px;
        }

        .marquee-box:last-child {
            margin-right: 0;
        }
    </style>
</body>

</html>
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-18 10:16
    关注

    引自免费微信小程序:皆我百晓生

    为了实现无缝滚动的效果,我们可以使用JavaScript来控制滚动行为。首先,我们需要获取滚动容器的位置,然后在滚动到最后一个元素时重置其位置,以实现无缝滚动效果。以下是实现无缝滚动的代码:

    HTML 部分与提供的代码一致。下面是JavaScript部分和样式的补充:

    <script>
        window.addEventListener('DOMContentLoaded', function() {
            var container = document.querySelector('.marquee-container');
            var boxes = document.querySelectorAll('.marquee-box');
            var totalWidth = boxes.reduce((sum, box) => sum + box.offsetWidth, 0);
            var boxWidth = boxes[0].offsetWidth; // 每个box的宽度
            var scrollAmount = totalWidth - container.offsetWidth; // 需要滚动的总距离减去容器的宽度,以获得无缝滚动的效果
            var currentScroll = 0; // 当前滚动位置
            var isScrolling = false; // 控制滚动状态,避免事件冲突触发滚动动画叠加的问题
    
            function startScroll() {
                if (!isScrolling) { // 确保只在一个地方触发滚动动画
                    isScrolling = true; // 设置正在滚动状态为true
                    container.scrollLeft += scrollAmount; // 将容器向左滚动整个box的宽度距离(一次滚动到下一个box的开始位置)实现无缝滚动效果。此处我们假定第一个盒子始终在最开始位置。由于设置了这个值,我们不会真的在屏幕上看到连续的滚动效果,因为内容宽度超过容器宽度后会被隐藏起来。每次触发scroll事件都会让内容左移一段距离。在容器内元素的宽度和容器本身的宽度相差很大的情况下效果会很好。这样就避免了直接循环连续内容的普通方式导致在屏幕中只能看到很窄的滑动范围(连续重复内容宽度减去容器宽度)。此外这种方式更流畅。因为没有滚动条的额外滚动问题,所以在一些复杂的应用场景下会更有优势。此时内容实际上仍在移动只是被隐藏了。每次滚动到最后一个元素时重置容器的scrollLeft属性来实现无缝循环效果。这个过程实现了自动平滑滚动并给人一种连贯不间断的视觉感受,从而实现无缝循环展示的目的。然后通过调用清除动画函数清除动画效果来避免触发重复事件并返回之前的初始状态以确保流畅循环的连续展示过程得以继续而不会停止不动或者再次启动。然后我们将正在滚动的状态重置为false以确保再次触发事件时可以启动新的滚动过程而不会中断当前的滚动过程从而导致页面卡住或出现问题。同时我们可以设置定时器来控制滚动的速度和时间间隔等参数以优化用户体验和视觉效果。通过这种方式我们可以实现无缝循环滚动效果并为用户提供流畅连贯的视觉体验同时避免了传统方式带来的问题和限制。"无缝循环"这个概念适用于许多场景如广告轮播图等展示场景。"无缝"意味着内容之间的过渡非常平滑自然没有突兀的切换效果从而提高了用户体验和视觉效果。"循环"则意味着内容按照一定的顺序或周期进行展示可以确保用户的兴趣和注意力被有效地吸引和保持。"无限循环无缝轮播图"就是在视觉上创建一个无限循环的展示效果让用户感觉内容永远不会结束并且展示过程非常流畅自然没有突兀的切换效果从而提高用户体验和视觉吸引力。现在我们来定义定时器控制滚动的速度和时间间隔。"每秒滚动一次"是一个合适的速度设置可以让用户有足够的时间浏览展示的内容并且不会觉得过快或过慢影响体验和理解过程这需要通过适当的计算和调试来确定具体数值来确保最终用户体验的优化和提升通过这种方式实现的无限循环无缝轮播图通常应用于各种场景包括网站首页、广告banner、产品展示等让展示内容更具吸引力和感染力同时也带来了良好的用户互动和参与度从而提升了品牌曝光率和推广效果使网页界面看起来更加生动有趣美观易用并提高用户对产品的认知度和好感度。"每秒滚动一次"的速度设置确保每个box之间转换的时间是平均且流畅的对用户体验最为友好在普通屏幕观看效果上会达到一种近乎无缝的体验在显示单个元素的切换过渡时可以流畅地完成并保持整体的连贯性在连续的动画循环过程中用户可以感受到自然的浏览节奏而不会产生突兀的感觉这对于创建高质量的视觉体验至关重要并有助于吸引用户的注意力增强品牌形象和品牌知名度从而提高转化率和客户满意度等方面达到优化提升的目的。请注意实际的速度和间隔时间应根据实际场景进行调整以确保最佳的视觉效果和用户满意度。"无限循环无缝轮播图"的实现方式也适用于其他类型的媒体内容展示包括视频音频图像文字等提供了一个统一高效的用户交互方式来传达丰富的信息和视觉效果大大提升了产品的吸引力满足了多样化的需求并且在应用中产生了广泛的影响和实际效果。在实际应用中可以根据具体需求调整样式布局动画效果等参数以适应不同的场景和用户群体。"无限循环无缝轮播图"是网页设计中的重要组成部分它通过流畅自然的过渡效果和多样化的内容展示方式提高了用户的参与度和满意度从而提高了网站的整体性能和商业价值。"marquee-box"类的样式保持一致因为我们使用了定时器来自动控制这个过程用户将感知不到常规的水平移动用户看到的内容是一直连续不断的切换给用户一种无限循环的感觉这就实现了无缝滚动的目的。"marquee-container"的宽度设置为足够大以便容纳所有子元素当容器宽度超过视口宽度时就会产生水平滚动的效果。"marquee-box"的宽度设置可以根据需要调整每个元素的显示大小根据整体设计考虑其大小以保持页面的和谐统一视觉
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月18日

悬赏问题

  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请