• [随便看看]JS打字效果


    代码来自

    http://fediafedia.com/neo/linux/index.html

    js代码:

      1 /*
      2 readDataFrom: 2014/07/04 15:17
      3 reader: WangXinsheng
      4 code from:
      5 http://fediafedia.com/neo/linux/index.html
      6 */
      7 
      8 /*
      9 *(c) Copyright 2011 Simone Masiero. Some Rights Reserved. 
     10 *This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License
     11 */
     12 
     13 $(
     14     function(){
     15         // read: jquery listener, when keydown run the Object[Typer]'s function[addText or removeText]
     16         $( document ).keydown(
     17             function ( event ) {
     18                 if(event.keyCode != 8) Typer.addText( event ); //Capture the keydown event and call the addText, this is executed on page load
     19                 else { Typer.removeText(); event.preventDefault(); }
     20             }
     21         );
     22     }
     23 );
     24 // read: Main Object Typer
     25 var Typer={
     26     text: null,
     27     accessCountimer:null,
     28     index:0, // current cursor position
     29     speed:2, // speed of the Typer // read: the count of the words when one key has been pressed[keydown]
     30     file:"", //file, must be setted // read: maybe the artical's URL
     31     accessCount:0, //times alt is pressed for Access Granted
     32     deniedCount:0, //times caps is pressed for Access Denied
     33     secCount:0, //times caps is pressed for Access Denied
     34         coldCount:0, //times caps is pressed for Access Denied
     35     secCount:0, //times caps is pressed for Access Denied
     36     radarCount:0, 
     37         windowCount:0, 
     38             ponyCount:0, 
     39     tagList:[],
     40     typeIntervalCounter:0,
     41     typeInterval:false,
     42     // read: initalize the Typer[like get the file data and save in var text(use Ajax, if run offline......)]
     43     init: function(){// inizialize Hacker Typer
     44         accessCountimer=setInterval(function(){Typer.updLstChr();},500); // inizialize timer for blinking cursor
     45         $.get(Typer.file,function(data){// get the text file
     46             Typer.text=data;// save the textfile in Typer.text
     47         });
     48     },
     49     // read: return the text what has been print out
     50     content:function(){
     51         return $("#console").html();// get console content
     52     },
     53     // read: to append the par[str] to the screen
     54     write:function(str){// append to console content
     55         $("#console").append(str);
     56         return false;
     57     },
     58     /*
     59     * read: useless, just to show the effect of hacker result, such as access,deined and so on. start
     60     */
     61     makeAccess:function(){//create Access Granted popUp      FIXME: popup is on top of the page and doesn't show is the page is scrolled
     62         Typer.hidepop(); // hide all popups
     63         Typer.accessCount=0; //reset count
     64         var ddiv=$("<div id='gran'>").html(""); // create new blank div and id "gran"
     65         ddiv.addClass("accessGranted"); // add class to the div
     66         ddiv.html("<h1>ACCESS GRANTED</h1>"); // set content of div
     67         $(document.body).prepend(ddiv); // prepend div to body
     68         return false;
     69     },
     70     makeDenied:function(){//create Access Denied popUp      FIXME: popup is on top of the page and doesn't show is the page is scrolled
     71         Typer.hidepop(); // hide all popups
     72         Typer.deniedCount=0; //reset count
     73         var ddiv=$("<div id='deni'>").html(""); // create new blank div and id "deni"
     74         ddiv.addClass("accessDenied");// add class to the div
     75         ddiv.html("<h1>ACCESS DENIED</h1>");// set content of div
     76         $(document.body).prepend(ddiv);// prepend div to body
     77         return false;
     78         },
     79     makeSecurity:function(){//create Access Denied popUp      FIXME: popup is on top of the page and doesn't show is the page is scrolled
     80         Typer.hidepop(); // hide all popups
     81         Typer.deniedCount=0; //reset count
     82         var ddiv=$("<div id='secu'>").html(""); // create new blank div and id "deni"
     83         ddiv.addClass("securityBreach");// add class to the div
     84         ddiv.html("<h1>SECURITY BREACH</h1><h2>LEVEL 3 ACCESS REQUIRED</h2>");// set content of div
     85         $(document.body).prepend(ddiv);// prepend div to body
     86         return false;
     87         },
     88         
     89     makeColdWar:function(){//create Access Denied popUp      FIXME: popup is on top of the page and doesn't show is the page is scrolled
     90         Typer.hidepop(); // hide all popups
     91         Typer.deniedCount=0; //reset count
     92         var ddiv=$("<div id='cold'>").html(""); // create new blank div and id "deni"
     93         ddiv.addClass("coldwar");// add class to the div
     94         ddiv.html("<img src='http://i.imgur.com/o5dtIHA.gif'>");// set content of div
     95         $(document.body).prepend(ddiv);// prepend div to body
     96         return false;
     97     },
     98     makeRadar:function(){//create Access Denied popUp      FIXME: popup is on top of the page and doesn't show is the page is scrolled
     99         Typer.hidepop(); // hide all popups
    100         Typer.radarCount=0; //reset count
    101         var ddiv=$("<div id='radar'>").html(""); // create new blank div and id "deni"
    102         ddiv.addClass("radar");// add class to the div
    103         ddiv.html("<img src='http://i.imgur.com/id2kyxB.gif'><br />");// set content of div
    104         $(document.body).prepend(ddiv);// prepend div to body
    105         return false;
    106     },
    107     makePony:function(){//create Access Denied popUp      FIXME: popup is on top of the page and doesn't show is the page is scrolled
    108         Typer.hidepop(); // hide all popups
    109         Typer.ponyCount=0; //reset count
    110         var ddiv=$("<div id='pony'>").html(""); // create new blank div and id "deni"
    111         ddiv.addClass("pony");// add class to the div
    112         ddiv.html("<img src='http://i.imgur.com/YggdgGU.gif'>");// set content of div
    113         $(document.body).prepend(ddiv);// prepend div to body
    114         return false;
    115     },
    116     makeWindow:function(){//create Access Denied popUp      FIXME: popup is on top of the page and doesn't show is the page is scrolled
    117         Typer.hidepop(); // hide all popups
    118         Typer.windowCount=0; //reset count
    119         var ddiv=$("<div id='window'>").html(""); // create new blank div and id "deni"
    120         ddiv.addClass("window");// add class to the div
    121         ddiv.html("<iframe src='http://hackertyper.com/' width='640px' height='480px' ></iframe>");// set content of div
    122         $(document.body).prepend(ddiv);// prepend div to body
    123         return false;
    124     },
    125     
    126     hidepop:function(){// remove all existing popups
    127         $("#deni").remove();
    128         $("#gran").remove();
    129         $("#secu").remove();
    130         $("#cold").remove();
    131         $("#pony").remove();
    132         $("#window").remove();
    133     },
    134     /*
    135     * read: useless, just to show the effect of hacker result, such as access,deined and so on. end
    136     */
    137     
    138     removeText:function(){
    139         if(Typer.text){
    140             /*
    141             var usedTags= new RegExp("<img.*?>", "gi");
    142             //var foundTag = usedTags.exec(Typer.text.substring(Typer.index,-Typer.index));
    143             //console.log(Typer.text.substring(Typer.index,-Typer.index));
    144             var foundTags = /<img.*?>/gi.exec(Typer.index,-Typer.index);
    145             console.log(foundTags)
    146             while(usedTags.test(Typer.text.substring(Typer.index,-Typer.index))==true) {
    147                 console.log(usedTags.lastIndex,/<img.*?>/gi.exec(Typer.text.substring(usedTags.lastIndex)));
    148             }
    149             */
    150             //if(foundTag instanceof Array && foundTag[0] == Typer.text.substring(Typer.index,-foundTag[0].length)) {
    151             //    Typer.index -= foundTag[0].length;//console.log(foundTag[0],foundTag)
    152                 //console.log(Typer.text.substring(Typer.index,-foundTag[0].length))
    153             //}
    154             //Typer.text.substring(Typer.index),foundTag)
    155             // read: here is not good, when index = 1, speed = 2 , index will be 1-2*2=-3
    156             Typer.index = (Typer.index > 0) ? Typer.index - Typer.speed * 2 : 0;
    157             //console.log(Typer.text.substring(0,Typer.index-(Typer.speed)))
    158             Typer.addText(event);
    159         }
    160     },
    161     
    162     addText:function(key){//Main function to add the code
    163     /*
    164     * read: useless, just to show the effect of hacker result, such as access,deined and so on. start
    165     */
    166         if(key.keyCode==109){// key 18 = alt key
    167             Typer.accessCount++; //increase counter 
    168             if(Typer.accessCount>=1){// if it's presed 3 times
    169                 Typer.makeAccess(); // make access popup
    170             }
    171         }else if(key.keyCode==107){// key 20 = caps lock
    172             Typer.deniedCount++; // increase counter
    173             if(Typer.deniedCount>=1){ // if it's pressed 3 times
    174                 Typer.makeDenied(); // make denied popup
    175                         }
    176         }else if(key.keyCode==106){// key 20 = caps lock
    177             Typer.coldCount++; // increase counter
    178             if(Typer.coldCount>=1){ // if it's pressed 3 times
    179                 Typer.makeColdWar(); // make denied popup
    180             }
    181         }else if(key.keyCode==104){// key 20 = caps lock
    182             Typer.radarCount++; // increase counter
    183             if(Typer.radarCount>=1){ // if it's pressed 3 times
    184                 Typer.makeRadar(); // make denied popup
    185             }
    186         }else if(key.keyCode==98){// key 20 = caps lock
    187             Typer.ponyCount++; // increase counter
    188             if(Typer.ponyCount>=1){ // if it's pressed 3 times
    189                 Typer.makePony(); // make denied popup
    190             }
    191         }else if(key.keyCode==96){// key 20 = caps lock
    192             Typer.windowCount++; // increase counter
    193             if(Typer.windowCount>=1){ // if it's pressed 3 times
    194                 Typer.makeWindow(); // make denied popup
    195             }
    196             
    197         }else if(key.keyCode==111){// key 20 = caps lock
    198             Typer.secCount++; // increase counter
    199             if(Typer.secCount>=1){ // if it's pressed 3 times
    200                 Typer.makeSecurity(); // make denied popup
    201             }
    202         }else if(key.keyCode==27){ // key 27 = esc key
    203             Typer.hidepop(); // hide all popups
    204         }else if(Typer.text){ // otherway if text is loaded
    205         
    206     /*
    207     * read: useless, just to show the effect of hacker result, such as access,deined and so on. end
    208     */    
    209             // read: here is fix for bug, the index will be smaller then 0
    210             if(Typer.index <= 0) {
    211                 $("#console").html('');
    212             }
    213             // read: it is a loop to type the word
    214             Typer.index = Typer.index % Typer.text.length
    215             // read: get the word typed to the screen
    216             var cont=Typer.content(); // get the console content
    217             // read: hide cursor, i think it is not good.
    218             if(cont.substring(cont.length-1,cont.length)=="|") // if the last char is the blinking cursor
    219                 $("#console").html($("#console").html().substring(0,cont.length-1)); // remove it before adding the text
    220             /*
    221             if(key.keyCode!=8){ // if key is not backspace
    222                 Typer.index+=Typer.speed;    // add to the index the speed
    223             }else{
    224                 if(Typer.index>0) // else if index is not less than 0 
    225                     Typer.index-=Typer.speed;//    remove speed for deleting text
    226             }
    227             */
    228             // read: get the text to add append to screen
    229             var text=Typer.text.substr(Typer.index,Typer.speed)//Typer.index-(Typer.speed));// parse the text for stripping html enities
    230             // read: that's good, use the regexp to replace the newline tag and tab tag
    231             var rtn= new RegExp("
    ", "g"); // newline regex
    232             //var rts= new RegExp("\s", "g"); // whitespace regex
    233             var rtt= new RegExp("\t", "g"); // tab regex
    234             text = text.replace(rtn,"<br/>").replace(rtt,"&nbsp;&nbsp;&nbsp;&nbsp;");//.replace(rts,"&nbsp;");// replace newline chars with br, tabs with 4 space and blanks with an html blank
    235             //console.log(text);
    236             // read: append to screen
    237             $("#console").append(text);
    238             // here is to dealwith the other tag such as img and {}, and will show it at once
    239             var usedTags = new RegExp("<img.*?>", "g"),
    240                 systemTags = new RegExp("{(.*?)}", "g");
    241             var foundTag = usedTags.exec(Typer.text.substring(Typer.index)),
    242                 foundSystemTag = systemTags.exec(Typer.text.substring(Typer.index));
    243             if(foundTag instanceof Array && foundTag.index <= Typer.speed) {
    244                 Typer.index += foundTag.index + foundTag[0].length;
    245                 $("#console").append(foundTag[0]);
    246             } else if(foundSystemTag instanceof Array && foundSystemTag.index <= Typer.speed) {
    247                 //Typer.text.replace(/{(.*?)}/,foundSystemTag[1]);
    248                 Typer.index += foundSystemTag.index + foundSystemTag[0].length;
    249                 $("#console").append(foundSystemTag[1]);
    250             } else Typer.index += Typer.speed;
    251             // read: scroll to end
    252             $('body').scrollTop($("#console").height()); 
    253             // read: scrollDown 50 only, just for save? or for the body topMargin
    254             window.scrollBy(0,50); // scroll to make sure bottom is always visible 
    255             
    256             // scroll to make sure bottom is always visible
    257             /*
    258             if(Typer.typeInterval) {
    259                 clearInterval(Typer.typeInterval);
    260                 Typer.typeIntervalCounter = 0;
    261             }
    262             Typer.typeInterval = setInterval(function() {
    263             console.log(Typer.typeIntervalCounter);
    264             //console.log(Typer.speed);
    265             var text=Typer.text.substring(0,Typer.index-(Typer.speed-Typer.typeIntervalCounter));// parse the text for stripping html enities
    266             var rtn= new RegExp("
    ", "g"); // newline regex
    267             //var rts= new RegExp("\s", "g"); // whitespace regex
    268             var rtt= new RegExp("\t", "g"); // tab regex
    269             text = text.replace(rtn,"<br/>").replace(rtt,"&nbsp;&nbsp;&nbsp;&nbsp;");//.replace(rts,"&nbsp;");// replace newline chars with br, tabs with 4 space and blanks with an html blank
    270             //console.log(text);
    271             $("#console").html(text);
    272             $('body').scrollTop($("#console").height()); // scroll to make sure bottom is always visible
    273             if(Typer.typeIntervalCounter>Typer.speed) {
    274                 clearInterval(Typer.typeInterval);
    275                 Typer.typeIntervalCounter = 0;
    276             }
    277             Typer.typeIntervalCounter++;
    278             },10);
    279             */
    280         }
    281         /*
    282         * read: effect, it is useless nomally. start
    283         */
    284         if ( key.preventDefault && key.keyCode != 122 ) { // prevent F11(fullscreen) from being blocked
    285             key.preventDefault()
    286         };  
    287         if(key.keyCode != 122){ // otherway prevent keys default behavior
    288             key.returnValue = false;
    289         }
    290         /*
    291         * read: effect, it is useless nomally. end
    292         */
    293     },
    294     // read: that's interesting, use append and remove to show the cursor, if the last word should be |, it will be wrong!!!!!!!
    295     updLstChr:function(){ // blinking cursor
    296         var cont=this.content(); // get console 
    297         if(cont.substring(cont.length-1,cont.length)=="|") // if last char is the cursor
    298             $("#console").html($("#console").html().substring(0,cont.length-1)); // remove it
    299         else
    300             this.write("|"); // else write it
    301     }
    302 }
    303 // read: to show the current time
    304 function startTime()
    305 {
    306 var today=new Date();
    307 var h=today.getHours();
    308 var m=today.getMinutes();
    309 var s=today.getSeconds();
    310 // add a zero in front of numbers<10
    311 m=checkTime(m);
    312 s=checkTime(s);
    313 document.getElementById('txt').innerHTML=h+":"+m+":"+s;
    314 t=setTimeout(function(){startTime()},500);
    315 }
    316 // read: add the 0 in front of the minutes and seconds
    317 function checkTime(i)
    318 {
    319 if (i<10)
    320   {
    321   i="0" + i;
    322   }
    323 return i;
    324 }
    325 
    326 // read: to start the application
    327 // we should 
    328 // set the file Url
    329 // and initlize the Typer Object

    html调用:

    1 <script type="text/javascript">
    2 Typer.file='kernel.txt';
    3 Typer.init();
    4 </script>

    ---

    另一种js打字效果代码

    html+js代码

     1 <html>
     2 <head>
     3 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
     4 <title>JS字幕打字效果</title>
     5     <style type="text/css">
     6     body{
     7     font-family: Arial;
     8     margin-top:0px;
     9     background-repeat:no-repeat;
    10     padding-top:100px;
    11     }
    12     #myContent, #myContent blink{
    13         width:500px;
    14         height:200px;
    15         background:black;
    16         color: #00FF00;
    17         font-family:courier;
    18     }    
    19     blink{
    20         display:inline;
    21     }
    22     </style>
    23     <script type="text/javascript">    
    24     var charIndex = -1;
    25     var stringLength = 0;
    26     var inputText;
    27     function writeContent(init){
    28     if(init){
    29         inputText = document.getElementById('contentToWrite').innerHTML;
    30     }
    31         if(charIndex==-1){
    32             charIndex = 0;
    33             stringLength = inputText.length;
    34         }
    35         var initString = document.getElementById('myContent').innerHTML;
    36         initString = initString.replace(/<SPAN.*$/gi,"");
    37         
    38         var theChar = inputText.charAt(charIndex);
    39            var nextFourChars = inputText.substr(charIndex,4);
    40            if(nextFourChars=='<BR>' || nextFourChars=='<br>'){
    41                theChar  = '<BR>';
    42                charIndex+=3;
    43            }
    44         initString = initString + theChar + "<SPAN id='blink'>|</SPAN>";
    45         document.getElementById('myContent').innerHTML = initString;
    46         charIndex = charIndex/1 +1;
    47 if(charIndex%2==1){
    48              document.getElementById('blink').style.display='none';
    49         }else{
    50              document.getElementById('blink').style.display='inline';
    51         }
    52                 
    53         if(charIndex<=stringLength){
    54             setTimeout('writeContent(false)',150);
    55         }else{
    56             blinkSpan();
    57         }  
    58     }
    59     var currentStyle = 'inline';
    60     function blinkSpan(){
    61         if(currentStyle=='inline'){
    62         currentStyle='none';
    63         }else{
    64         currentStyle='inline';
    65         }
    66         document.getElementById('blink').style.display = currentStyle;
    67         setTimeout('blinkSpan()',500);
    68     }
    69     </script>
    70 </head>
    71 <body>
    72 <div id="myContent">
    73 </div>
    74 <div id="contentToWrite" style="display:none">
    75 Login : username<br>
    76 password : ******<br>
    77 Access is granted<br>
    78 </div>
    79 <script type="text/javascript">
    80 writeContent(true);
    81 </script>
    82 
    83 </body>
    84 </html>

    有空再做成JQuery插件

  • 相关阅读:
    2017 《Java》预备作业计科1502宋奇蕊
    在 Kubernetes 上调度 GPU 资源
    ceph
    网络设备的 38 个知识点
    CF1066 ABCD
    单调队列优化动态规划
    对拍
    【关于此博客】
    使用Morphia框架操作mongodb
    通过mybatis读取数据库数据并提供rest接口访问
  • 原文地址:https://www.cnblogs.com/wangxinsheng/p/3830795.html
Copyright © 2020-2023  润新知