热搜:前端 nest neovim nvim

简单的实现文字滚动效果

lxf2023-06-08 03:30:56

本文已参与「新人创作礼」活动,一起开启编程创作之路。

前言

文字超出一般都是换行或者截断隐藏改成省略号,但是类似公告的文字提示必须完整的展示出来。这种一般会让文字滚动起来,以便用户看到完整的信息。本文记叙了一种比较简单的实现方法。

效果

基本思路

实现文字滚动的难点在于,无论使用何种方式,都绕不开判定文字的实际宽度。
虽然使用transform:%20translateX可以绕过确定文字区域宽度的步骤,因为translateX可以接受百分比数值,如果设置translateX(-100%)就是意味着把整个元素向左移动整个元素本身宽度的距离;结合animation,可以使用循环滚动。
但是动画执行时间的确定还是需要获取文字的实际宽度,因为实际应用中,滚动的文字不是一尘不变的,因此动画的执行时间不能固定成一个值;真正的执行时间应该是文字长度%20/%20滚动速度

代码 HTML布局

基本上需要两个元素,一个确定展示区域,一个确定需要滚动的位置:

<div%20class="box">
%20%20<div%20class="content">
%20%20%20%20滚动内容.....
%20%20</div>
</div>

其中.box表示展示的区域,确定了展示文字的区域,.contentinnerText是需要滚动的文字。

基本样式
  1. .box需要确定展示区域的宽度width,%20同时禁止子元素超出区域,%20用于隐藏超出的文本;
  2. .content中设置文字超出不换行,%20让所有文字都在同一行上;%20同时因为.contentdiv,%20所以会自动继承父级元素的宽度,%20在这种情况下设定translateX(-100%)自会向左移动父级元素宽度的距离,%20而不是文本长度的距离,%20所以需要将.content的宽度设置为内容的最大宽度max-content,%20或者让.content通过浮动float或绝对定位position:%20absolute来脱离文本流,%20不继承父级宽度,%20让内容撑开宽度。 样式如下:
.box%20{
%20%20width:%20398px;
%20%20height:%2040px;
%20%20line-height:%2040px;
%20%20background:%20#a5b4fc;
%20%20color:%20#fff;
%20%20overflow:%20hidden;
}

.content%20{
%20%20white-space:%20nowrap;
%20%20width:%20max-content;
}

效果: 可以看到基本的摆放效果已经没问题了。

添加动画

定义一个动画, 使用transform: translateX来设定.content的移动, 动画如下:

@keyframes roll {
  0% {
    transform: translateX(380px);
  }
  100% {
    transform: translateX(-100%);
  }
}

注意: 动画在开始的时候, 让.content向右移动.box宽度的距离, 这样所有的文字都在展示区域的右侧, 用户看不到文字, 最后执行到transform: translateX(-100%)时, 所有文字都在展示区域的左侧, 用户同样看不到文字; 这样重复执行动画时, 用户看上去像是无缝滚动。 最后将动画效果添加到.content, 就可以看到效果了: 简单的实现文字滚动效果

计算动画执行时间

这个比较简单,获取文字元素,用于获取文本的实际宽度和设定动画执行时间:

const contentEl = document.querySelector('.content')

设定速度,经过多次调整,个人觉得比较适合的速度是110px/s,这个因人而异:

const speed = 110

随后就是给文本元素添加动画执行时间:

contentEl.style.animationDuration = contentEl.clientWidth / speed + 's'

至此,一个完整的文字滚动效果就完成了。

本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!