免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2116 | 回复: 1
打印 上一主题 下一主题

JS特效文字逐个显示 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-23 17:25 |只看该作者 |倒序浏览
JS特效文字逐个显示




最近上网看到一个JS特效,让文字逐个在网页上显示,就像手动一个一个输入这些文字一样.把相关的代码copy过来,在本地运行,发现这些JS只在IE在有效,其它浏览器都没有效果,于是本人在此基础上作些改进,让此效果在所有浏览器都有此效果.

以下是网上JS特效源码:
  1. <script language="JavaScript1.2">  

  2. var it=0  

  3. function initialize(){  

  4. mytext=typing.innerText  

  5. var myheight=typing.offsetHeight  

  6. typing.innerText=''

  7. document.all.typing.style.height=myheight  

  8. document.all.typing.style.visibility="visible"

  9. typeit()  

  10. }  

  11. function typeit(){  

  12. typing.insertAdjacentText("beforeEnd",mytext.charAt(it))  

  13. if (it<mytext.length-1){  

  14. it++  

  15. setTimeout("typeit()",100)  

  16. }  

  17. else

  18. return

  19. }  

  20. if (document.all)  

  21. document.body.onload=initialize  

  22. </script>  
复制代码
这段代码之所以不跨浏览器,是因为使用IE浏览器所支持的方法:insertAdjacentText,本人在W3Help中找到相关解释,有兴趣的朋友可以去看:
w3help.org/zh-cn/causes/SD9016

文档中给出的方法是在其它浏览器中通过扩展 HTMLElement 的原型 (prototype) 来实现这此方法.
由于本人习惯使用Jqeury,Jqeury本向就解决浏览器兼容性问题,让开发关注于相关JS逻辑的实现.以下是使用Jquery后改进的代码:
  1. <script type="text/javascript">  

  2.     var it = 0;  

  3.     var mytext;  

  4.     function initialize() {  

  5.         mytext = $("#typing").text();  

  6.         var myheight = $("#typing").offsetHeight;  

  7.         $("#typing").text("");  

  8.         $("#typing").css("height", myheight);  

  9.         $("#typing").show();  

  10.         typeit();  

  11. }  

  12. var t;  

  13.     function typeit() {  

  14.         $("#typing").append(mytext.charAt(it));  

  15.         if (it < mytext.length - 1) {  

  16.             it++  

  17.             t = setTimeout("typeit()", 100);  

  18.         }  

  19.         else

  20.             clearTimeout(t);  

  21.     }  

  22.     $(document).ready(function () {  

  23.         initialize();  

  24.     });  

  25.     </script>
复制代码
其中的关键方法是append,它把相关text插入匹配元素里面的末尾,这和insertAdjacentText很相似.
相关的HTML代码:
  1. <p id="typing" style=" display:none" >
复制代码
InsertAdjacentHTML 方法是比 innerHTML、outerHTML 属性更灵活的插入 HTML 代码的方法。它可以实现在一个 DOM 元素的前面、后面、第一个子元素前面、最后一个子元素后面四个位置,插入指定的 HTML 代码。不是 W3C 标准的 DOM 方法。  

这个方法最初是由 IE4.0 以上版本实现,为私有特性。详细内容请参见 MSDN 说明:insertAdjacentHTML Method。  

W3C 近期在 HTML5 草案中扩展了这个方法,更多详细的信息,请参见 W3C HTML5 草案:3.5.7 insertAdjacentHTML()。  

</p>
在测试中,本人发现在p如果有其它HTML标记,JS方法会把标记当字符处理

论坛徽章:
0
2 [报告]
发表于 2011-10-26 10:54 |只看该作者
好文章,谢谢分离,收藏了啦谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP