文字渐出效果
一,有次在一个外网上看到了这种文字的,效果,一番查找并没有找到类似的插件,所以动手自己写了一个,先上图,这里没有在样式上做过多的渲染,实现后的效果大概就是这个样子。
下面上代码:(base.css里清除了一些基本的样式,引入了jquery)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="css/base.css"/> <style> .box{ width: 380px; margin: 300px auto; padding: 20px; position: relative; } .box .lineT,.lineL{ position: absolute; top:0; left:0; width: 1px; height: 1px; background-color: #333; } .box .lineB,.lineR{ position: absolute; bottom:0; right:0; width: 1px; height: 1px; background-color: #333; } .describe{ width: 340px; height: 75px; position: relative; } .describe span{ opacity: 0; } </style> </head> <body> <div class="box"> <div class="box"> <div class="describe"> 也许,我们之间的缘份,就是一朵花与一只蝶的轮回 为此,我在心里向佛叩了数久,让我此生遇见了你 可以朝朝暮暮地读你,读你成明媚春阳的温暖,读 你成如水月光的飘逸 </div> <div class="line lineT"></div> <div class="line lineL"></div> <div class="line lineB"></div> <div class="line lineR"></div> </div> </div> </body> </html> <script src="js/jquery-1.7.2.js"></script> <script> //调用函数 textSlipsAway('.describe',800,60,lineAnimate); function textSlipsAway(elementName,runTime,intervalTime,callback){ var str=$(''+elementName+'').text(); //获取原始文字 var strs= new Array(); //定义一数组 var html=''; //定义html strs=str.split("\n"); //以换行分割字符串 for(var i=0;i<strs.length;i++){ strs[i]=strs[i].replace(/\s/g, "");//去掉字符串中的空格 } for(var j=0;j<strs.length;j++){ strs[j]=strs[j].split(""); //进一步分割字符串,将strs数组中的字符串元素分割成单个字符组成的数组 } for(var k=0;k<strs.length;k++) { //重构html结构,每行文字加p标签,class为opa,每个字加span标签 html+="<p class='opa'>"; for(var l=0;l<strs[k].length;l++){ html += "<span>" + strs[k][l] + "</span>"; } } $(''+elementName+'').html(html); //将新的html结构渲染到dom中 var arrayPos=new Array(); //用于存储文字在文档中的位置,也是动画结束时文字的位置 for(var b=0;b<strs.length;b++){ //获取原始文档中每个字符的位置,并存入对应数组 var lis=new Array(); for(var m=0;m<strs[b].length;m++){ var newTop=$(''+elementName+' .opa:eq('+b+') span:eq('+m+')').position().top; //获取该文字位置 var newLeft=$(''+elementName+' .opa:eq('+b+') span:eq('+m+')').position().left; lis[m]={ //以对象形态存储该文字位置 top:newTop, left:newLeft } } arrayPos[b]=lis; //将该文字存储到数组 } for(var n=0;n<strs.length;n++){ //计算文字动画执行前的位置,并设置到每个文字 // console.log(arrayPos[n]); for(var o=0;o<strs[n].length;o++){ $(''+elementName+' .opa:eq('+n+') span:eq('+o+')').css( //为文字设置动画前位置 { position: 'absolute', top:arrayPos[n][o].top+150+'px', left:arrayPos[n][o].left+'px', } ); } } var L=0; for(var p=0;p<strs.length;p++){ //动画效果 L=strs[p].length>L?strs[p].length:L; //strs.length是数组的长度也是文字的行数 for(var q=0;q<strs[p].length;q++){ $(''+elementName+' .opa:eq('+p+') span:eq('+q+')').delay(q*intervalTime).animate({top:arrayPos[p][q].top,opacity:1},runTime); //delay()是动画延迟多久执行,q代表这个文字在该行的第几位, // intervalTime是相邻文字间动画延迟时间 } } if(callback){ //文字动画执行完后触发callback setTimeout(function () { callback(); },L*intervalTime+runTime); } } function lineAnimate(){ $(".lineT").animate({width:"90%"},2000); $(".lineB").animate({width:"90%"},2000); $(".lineL").animate({height:"90%"},2000); $(".lineR").animate({height:"90%"},2000); } </script>