基于CSS3和jQuery实现打字机动画效果

作者:小圆点

时间:2026-10-30

浏览:394

本文介绍如何利用CSS3的clip属性配合动画实现边框循环显示,并结合jQuery定时器逐字替换文本,打造流畅的打字机特效。通过封装类管理参数,解决延迟导致的边框显示异常,提供完整的代码实现方案。

文章目录

首先展示最终实现的视觉效果。

CSS3动态边框实现原理

CSS3动态边框实现原理

在近期项目开发中,需要实现字符逐个出现的打字机效果。这里采用CSS的clip属性结合CSS动画来绘制动态边框,并将其与自定义的打字机逻辑相结合,整体效果非常出色。

整合后的方案运行稳定且视觉表现良好。

首先分析边框线条的实现原理。我们看到的线条实际上是通过有规律地显示和隐藏四周的border实现的,这自然让人联想到使用::after伪元素。

此处暂时仅考虑使用::after伪元素进行处理。

首先创建一个名为box的容器,并为其添加::after伪元素以生成边框。


 <div class="box"></div>
 .box:before{
 content: '';
 position: absolute;
 width:px;height: px;border:px red solid;
 left:-px;top:-px;
 z-index: ;
 }

接下来需要让边框按照特定规律进行显示和隐藏,这里核心用到的是clip属性,相关原理可参考关于CSS圆形百分比进度条实现的文章。

具体实现思路是:让边框依次显示上边框、左边框、下边框、右边框,从而形成一个循环动画。根据clip属性定义的rect(上, 右, 底, 左)参数,当需要显示上边框时,设置相应的rect值。

例如,要控制上边框的显示,需要配置rect参数。

使用clip: rect(px, px, px, px);来定义裁剪区域。

只需利用animation属性让边框依次显示即可达成效果。


@-webkit-keyframes clipMe{
%{ clip: rect(px, px, px, px); }
%{ clip: rect(px, px, px, px); }
%{ clip: rect(px, px, px, px); }
%{ clip: rect(px, px, px, px); }
%{ clip: rect(px, px, px, px); }
}

在::after伪元素中调用该动画样式。


.box:after{
-webkit-animation:clipMe s linear infinite;
}

此外,为了增强视觉效果,可以添加一个完全相同的::before伪元素。两者的动画时间间隔设置为s。需要注意的是,如果直接设置延迟s,会导致在s时间内看到完整的边框出现,因此应将延迟改为-s,这样即可完美解决视觉瑕疵。

通过调整负延迟,消除了边框显示时的闪烁问题。


.box:before{
-webkit-animation:clipMe s -s linear infinite;
}

jQuery打字机效果封装

/***************************************************************/ 接下来讨论打字机效果的核心逻辑。打字机本质是不断替换并显示字符。首先获取box内的内容,然后将其逐个替换显示在屏幕上。


<div class="box">
<span>/**仅共娱乐,然并卵**/</span>
<p>Login : Jmingzi</p>
<p>password : ******</p>
<p>Access is granted</p>
<span>Welcome ymblog.net !</span>
</div>

获取内容后,通过脚本逐字替换显示。


var t = setInterval(function(){
str = con.substr(, strlen) + "_";
me.obj.html(str);
//内容打印完毕
if(strlen == con.length){
clearInterval(t);
}
strlen = strlen + ;
}, me.speed);

这里将逻辑封装为一个类,以便于初始化相关参数。完整代码实现如下。


//初始化工作,获取几段文字内容,将它们隐藏后逐个显示即可
$(function(){
function Type(obj, speed, welcome){
this.obj = obj;
this.speed = speed;
this.welcome = welcome;
}
Type.prototype = {
init : function(){
var str = this.obj.html();
this.obj.html(this.welcome);
this.add(str);
},
add : function(con){
var me = this;
var str;
var strlen = ;
var t = setInterval(function(){
str = con.substr(, strlen) + "_";
me.obj.html(str);
//内容打印完毕
if(strlen == con.length){
clearInterval(t);
}
strlen = strlen + ;
}, me.speed);
}
}
var a = new Type($('.box'), , '正在初始化...');
a.init();
});

以上即为本文的全部内容,希望能为读者提供实用的参考。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章