特效展示
制作要领
(1)光标闪烁动画的制作
(2)文字不停变换
(3)循环播放
开始制作
1.网页布局
首先,完成页面的基本结构和布局
1 2 3 4 5 6 7 8 <body > <div > <span class ="text" > </span > <span class ="line" > |</span > </div > </body >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 * { margin : 0 ; padding : 0 ; } body { width : 100vw ; height : 100vh ; display : flex; justify-content : center; align-items : center; background : radial-gradient (rgb (77 , 193 , 197 ), rgb (1 , 141 , 255 )) } .text { font-size : 40px ; color : rgb (231 , 216 , 79 ); } .line { font-size : 40px ; }
2.css实现闪烁的光标
使用CSS3 @keyframes 制作一个不断循环的闪烁动画来实现这个效果。
1 2 3 4 5 6 7 8 9 10 11 @keyframes twinkle { /* 注意不要使用display */ from { opacity: 0; } to { opacity: 1; } }
然后为光标设置该动画
1 2 3 4 .line { font-size : 40px ; animation : twinkle 0.6s linear infinite; }
3.js实现文字变换的基本原理
如何实现文字的变换呢?它的基本原理实际上非常简单,利用定时器,我们让0.1s时出现第一个字,让0.2s时出现第二个字…依次类推~~~
1 2 3 4 5 6 7 8 9 10 11 12 13 var text = document .getElementsByClassName('text' )[0 ];var word = "每个不曾起舞的日子,都是对生命的辜负!---Kxs(误)" ;var t = true ;text.innerHTML = "我" ; setTimeout (function ( ) {text.innerHTML = "我是" ; },300 ); setTimeout (function ( ) {text.innerHTML = "我是一" ; },600 );
4.嵌套循环函数实现
明白了它实现的基本原理后,我们就可以使用循环来实现它了
1 2 3 4 5 for (let i=0 ;i<=word.length;i++){ setTimeout (function ( ) { text.innerHTML=word.substr(0 ,i); },i*100 ) }
以上就已经实现了一个一次性的打字效果了!
5.如何循环播放?
基本效果已经完成了,但是还不够完美,我们想让它实现无限循环!
起初我使用了递归,但却因为造成了无限递归而导致了js栈内存溢出,从而使网页完全无法加载了。因为还没有学视频中的async函数,我决定寻找另一种方法,在思考过后,最终决定使用定时器来解决无限循环播放!
具体思路为:
引入一个temp变量为ture,每调用一次就对temp进行一次取反。
接着将正着的效果代码和反着的效果代码封装到一个函数中,加入if判断,当temp为true时执行正着的代码,当temp为false执行反着的代码。
最后我们需要每隔一定的时间反复调用这个方法!
6.完成升级
了解了如何实现循环播放后,我们使用js将它实现!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 let temp=true ; let setText = function (temp ) { if (temp) { for (let i = 0 ; i <= word.length; i++) { setTimeout (function ( ) { text.innerHTML = word.substr(0 , i); }, i*100 ); } } else { for (let t = word.length ; t >=0 ; t--) { setTimeout (function ( ) { text.innerHTML = word.substr(0 , t); }, (L-t)*100 ); } } } setText(temp); setInterval (function ( ) { setText(temp=!temp); },L*100 +1000 );
引用视频:[『JS特效』15分钟两种方式实现不一样的打字机效果_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili](
如果这篇文章对你有帮助,可以bilibili关注一波 ~ !此外,如果你觉得本人的文章侵犯了你的著作权,请联系我删除~谢谢!