这是我参与更文挑战的第25天,活动详情查看: 更文挑战
前言
大家好哇,又到了夜深人静更文的时候啦!周五加班的我,准备开始更文就已经十一点了,但是更文大业不能停哇~做一件事无论成败,贵在过程,贵在坚持不是吗?
今天我们来用实现多行文字文字被颜色逐渐填满的特效。
前几天我写了一篇《纯css实现:文字被颜色逐渐填满的特效》,有这么一条评论:
嗐~ 学习就学习,干嘛要举一反三呢?
明明是禁止换行才能实现的效果,你问我多行文字怎么处理?
想当年我手拿一把西瓜刀,从南天门砍到玉皇殿,我说我杀人不眨眼,你问我眼睛干不干?
好吧,今天也顺便解决一下这个多行文字逐渐被填充的效果~
那么一起来开始吧!
过程
按照我原先的想法,是JS动态判断有多少行,然后根据行数来分割,给每一行应用文字填充的动画效果即可。但是今天我突发奇想,如果把文字切割出来是不是更方便一些呢?思路如下:
- 两个文字层要重叠,也就是说样式一样。
- 提取底部文字盒子的文字,遍历它,用
span
标签包裹,然后每隔0.3秒向上层盒子添加它。 - 把渐渐填满文字的动画加给
span
标签即可,这样当前文字动画结束之后,下个文字被添加进来,动画又开始。
于是我敲出了如下代码:
<style>
.box{
width: 888px;
height: 300px;
margin: 200px auto;
position: relative;
}
p{
position: absolute;
top: 0;
left: 0;
font-size: 36px;
font-weight: 600;
}
#text{
color: #666;
}
#copyText{
color: rgb(253, 145, 145);
}
span {
display: inline-block;
white-space: nowrap;
background: linear-gradient(to right, #ABDCFF, #0396FF);
-webkit-background-clip: text;
color: transparent;
animation: landIn 1s linear;
}
@keyframes landIn {
0% {
width: 0;
}
100% {
width: 1em;
}
}
</style>
<div class="box">
<p id="text">你好呀,我是南极大冰块~目前是一名在线掘金高级摸鱼师,精通摸鱼、划水、坐着睡觉、拍马屁、吹牛、甩锅、吵架等前端开发必备技能~关注我,一起学习好玩的前端知识吧!</p>
<p id="copyText"></p>
</div>
<script>
let text = document.querySelector("#text")
let copyText = document.querySelector("#copyText")
// textContent 属性设置或返回指定节点的文本内容,以及它的所有后代。
let letters = text.textContent.split("")
console.log(letters)
for (let i = 0; i < letters.length; i++) {
let span = document.createElement("span")
span.textContent = letters[i]
setTimeout(() => {
copyText.append(span)
}, 1000*i)
}
</script>
复制代码
运行效果如下:
看起来似乎没什么问题?其实不然,最右边动画的时候会出现没有底层文字,只有上层文字的情况,虽然一闪而过,但也是问题:
为什么会这样呢?因为p
标签的宽度是确定的,当span
标签由0
变为1em
的时候,它并不知道剩余的宽度是否能容下自身,当它发现剩余的空间容不下自身,于是就会换行,就出现了一闪而过的情况。
怎么解决这个问题呢?我想到了两端对其,于是我给p
标签加了text-align: justify;
,我满心欢喜的以为解决了这个小问题,结果发现运行效果如下:
这这这。。。布局都乱掉了啊喂!
这是因为我给span
设置了宽度1em
,相当于是36px
,它并不会跟着p
标签变得两端对齐,那么怎么做呢?
很简单,给p
标签应用设置等宽字体,然后p标签就会被占满,即使它的宽度不设置text-align: justify;
,看起来也是两端对其的,同时span
标签的每一个字符也能完美重叠上去。
但是中文的等宽字体下载都要收费,暂时没找到的合适的字体来验证。不过也算多了一种思路实现多行文字被颜色填充的效果,毕竟JS去获取行数的变化实在不够优雅~
后记
希望大冰块今天分享的内容能对你有所帮助,多行文字被颜色逐渐填满的特效可以用在首页,介绍页等吸引人注意的地方。实现起来其实也没那么难以实现,比如这篇文章加上代码,也就一小时左右搞定了~ 说起来今天的更文还是蛮顺利的~
今天是我坚持日更的第二十五天,每天输出一点点,进步一点点。有志者,事竟成。大家一起加油呀~
如果本文对你有帮助,别再是悄悄收藏啦!比如点个赞呀,关注大冰块呀,一起和大冰块学习更多好玩的技术博客吧~
更文挑战的文章目录如下:
- 2021.06.01 《多图预警!详细谈谈Flex布局的容器元素和项目元素的属性~》
- 2021.06.02 《如何把css渐变背景玩出花样来》
- 2021.06.03 《如何使用SVG制作沿任意路径排布的文字效果》
- 2021.06.04 《3大类15小类前端代码规范,让团队代码统一规范起来!》
- 2021.06.05 《团队管理之git提交规范:大家竟然都不会写commit记录?| 周末学习》
- 2021.06.06 《如何控制css鼠标样式以及扩大鼠标点击区域 | 周末学习》
- 2021.06.07 《纯css实现:仿掘金账户密码登录时,小熊猫捂眼动作切换的小彩蛋》
- 2021.06.08 《从11个方面详细谈谈原型和原型链》
- 2021.06.09 《深入谈谈JavaScript的作用域及作用域链》
- 2021.06.10 《JavaScript中的闭包究竟是什么》
- 2021.06.11 《纯css实现:炫酷的视频文本蒙版效果》
- 2021.06.12 《申请一个免费的毒鸡汤api,并且用原生JS实现竖行文本的打字机效果》
- 2021.06.13 《纯css实现:多行文本框内的斑马条纹效果》
- 2021.06.14 《原生JS实现触摸滑动监听事件》
- 2021.06.15 《原生JS实现鼠标滚轮触发页面横向滚动》
- 2021.06.16 《原生JS实现跳转或刷新页面时,浏览器提示当前页面未保存》
- 2021.06.17 《原生JS的三大基础弹框探究》
- 2021.06.18 《纯css实现:固定在页面底部的按钮》
- 2021.06.19 《纯css实现:单行文本的打字机动画效果》
- 2021.06.20 《纯css实现:如何做个完美的平行四边形》
- 2021.06.21 《谈谈基于JS实现阻止别人调试通过控制台调试网站的问题》
- 2021.06.22 《纯css实现:文字被颜色逐渐填满的特效》
- 2021.06.23 《h5实现一个刮刮卡的动画效果》
- 2021.06.24 《纯css实现:文字可换行的下划线、波浪线等效果》