本文已参与「新人创作礼」活动,一起开启编程创作之路。
前言
文字超出一般都是换行或者截断隐藏改成省略号,但是类似公告的文字提示必须完整的展示出来。这种一般会让文字滚动起来,以便用户看到完整的信息。本文记叙了一种比较简单的实现方法。
效果
基本思路
实现文字滚动的难点在于,无论使用何种方式,都绕不开判定文字的实际宽度。
虽然使用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
表示展示的区域,确定了展示文字的区域,.content
的innerText
是需要滚动的文字。
基本样式
.box
需要确定展示区域的宽度width
,%20同时禁止子元素超出区域,%20用于隐藏超出的文本;- ①
.content
中设置文字超出不换行,%20让所有文字都在同一行上;%20②同时因为.content
是div
,%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为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!