如何使用Javascript无限滚动水平文本?

如何使用Javascript无限滚动水平文本?,javascript,html,css,text,scroll,Javascript,Html,Css,Text,Scroll,我想在一个框中水平滚动歌曲的标题。我重复了歌曲的标题,并隐藏了溢出的内容,因此它给人一种无限卷轴的错觉,但结果真的很不稳定 这就像是在汽车仪表板上,如果该区域无法容纳整个文本,歌曲标题/艺术家就会循环 [Codepen](https://codepen.io/safiajeff/pen/MWJQOPv) 我怎样才能使它更平滑/无限?html标记就可以做到这一点 这是文件: 编辑:对于那些抱怨不赞成的人,然后在CSS中实现它。 到目前为止,唯一放弃对marquee支持的是firefox,而现在

我想在一个框中水平滚动歌曲的标题。我重复了歌曲的标题,并隐藏了溢出的内容,因此它给人一种无限卷轴的错觉,但结果真的很不稳定

这就像是在汽车仪表板上,如果该区域无法容纳整个文本,歌曲标题/艺术家就会循环

[Codepen](https://codepen.io/safiajeff/pen/MWJQOPv)
我怎样才能使它更平滑/无限?

html标记就可以做到这一点

这是文件:

编辑:对于那些抱怨不赞成的人,然后在CSS中实现它。 到目前为止,唯一放弃对marquee支持的是firefox,而现在它在大多数浏览器上都起到了作用,那么为什么要重新发明轮子呢

<html>

<body>
    <style style="text/css">
        .marquee {
            height: 50px;
            overflow: hidden;
            position: relative;
            background: #fefefe;
            color: #333;
            border: 1px solid #4a4a4a;
        }
        
        .marquee p {
            position: absolute;
            width: 100%;
            height: 100%;
            margin: 0;
            line-height: 50px;
            text-align: center;
            -moz-transform: translateX(100%);
            -webkit-transform: translateX(100%);
            transform: translateX(100%);
            -moz-animation: scroll-left 2s linear infinite;
            -webkit-animation: scroll-left 2s linear infinite;
            animation: scroll-left 20s linear infinite;
        }
        
        @-moz-keyframes scroll-left {
            0% {
                -moz-transform: translateX(100%);
            }
            100% {
                -moz-transform: translateX(-100%);
            }
        }
        
        @-webkit-keyframes scroll-left {
            0% {
                -webkit-transform: translateX(100%);
            }
            100% {
                -webkit-transform: translateX(-100%);
            }
        }
        
        @keyframes scroll-left {
            0% {
                -moz-transform: translateX(100%);
                -webkit-transform: translateX(100%);
                transform: translateX(100%);
            }
            100% {
                -moz-transform: translateX(-100%);
                -webkit-transform: translateX(-100%);
                transform: translateX(-100%);
            }
        }
    </style>

    <div class="marquee">
        <p> Marquee in CSS </p>
    </div>
</body>

</html>

马奎尔先生{
高度:50px;
溢出:隐藏;
位置:相对位置;
背景:#fefefe;
颜色:#333;
边框:1px实心#4a4a4a;
}
.marquee p{
位置:绝对位置;
宽度:100%;
身高:100%;
保证金:0;
线高:50px;
文本对齐:居中;
-moz变换:translateX(100%);
-webkit转换:translateX(100%);
转化:translateX(100%);
-moz动画:向左滚动2s线性无限;
-webkit动画:向左滚动2s线性无限;
动画:向左滚动20秒线性无限;
}
@-moz关键帧向左滚动{
0% {
-moz变换:translateX(100%);
}
100% {
-moz变换:translateX(-100%);
}
}
@-webkit关键帧向左滚动{
0% {
-webkit转换:translateX(100%);
}
100% {
-webkit转换:translateX(-100%);
}
}
@关键帧向左滚动{
0% {
-moz变换:translateX(100%);
-webkit转换:translateX(100%);
转化:translateX(100%);
}
100% {
-moz变换:translateX(-100%);
-webkit转换:translateX(-100%);
转化:translateX(-100%);
}
}
CSS中的字幕


如果您已经有两份标题副本,您可以使用CSS而不是JS来滚动

这两个标题在同一行上一个接一个。如果将其容器向左变换50%,则第二个版本将位于左侧:0。然后,第一个版本立即转到同一个地方,你看不到任何抖动

这不仅相当简单,只是添加了CSS关键帧定义,没有JS,而且CPU和GPU的使用量都比较轻,从而节省了用户的电池

部分{
溢出:隐藏;
宽度:150px;
显示:内联块;
边框:1px纯红;
高度:50px;
空白:nowrap;
}
div{
宽度:566px;
显示器:flex;
柔性包装:nowrap;
动画:移动2s无限线性;/*当然,将时间设置为您想要的时间*/
}
@关键帧移动{
到{
转化:translateX(-50%);
}
}
h1{
字体大小:20px;
保证金:0;
左侧填充:0px;
边框:1px纯蓝色;
宽度:283px;
}

西蒙·多米尼克-晚上
西蒙·多米尼克-晚上

html的此功能已被弃用。它不应该继续使用。为什么你会建议使用已经被弃用多年的html功能呢?这些功能已经运行多年了吗?是的,除了firefox之外,其他的都有。到底谁在使用firefox。因此,尽管它已被弃用,但您可能并不在意。这就是我建议的原因。您可以使用marquee标记,直到您选择的浏览器不再支持它,而不是编写100行css。谁知道申请是为了什么,一个建议只是一个建议看看,请-如果你的文字不够长,无法填满容器,你希望发生什么?