《從案例中學(xué)習(xí)JavaScript》之實(shí)現(xiàn)對(duì)話效果

今天突發(fā)奇想,js能不能通過字符串和定時(shí)器來實(shí)現(xiàn)游戲中的對(duì)話效果呢。試了一下,還真挺好玩的。

上效果圖:

Paste_Image.png

本節(jié)涉及的知識(shí)點(diǎn):

  • 字符串的charAt方法
  • js定時(shí)器setInterval(輪詢)

1. charAt方法

js的charAt方法是用來獲取字符串中的某一個(gè)字符的钻蔑,它是屬于string的一個(gè)方法。

比如:

var str = 'ABCDEFG';
var a = str.charAt(6);//取下標(biāo)為6的字符
alert(a);
Paste_Image.png

2. setInterval定時(shí)器

具體用法如下:

setInterval(function(){
        
},1000);

第一個(gè)參數(shù)是一個(gè)回調(diào)函數(shù)奸鸯,代表了你要做的事情咪笑。
第二個(gè)參數(shù)是延時(shí)的時(shí)間,代表了每隔多長時(shí)間就觸發(fā)一次函數(shù)里邊的內(nèi)容娄涩。

注意:js是單線程的窗怒,它沒有像JAVA語言那樣的sleep方法。在js中任何的動(dòng)畫效果蓄拣,基本上都要通過 setInterval 或者 setTimeout來實(shí)現(xiàn)扬虚。

3. 繪圖

css:

* {margin:0;padding:0}
body {
    background: url(bg.jpg) no-repeat;
    background-size: 100%;
}
.dialog {
    width:100%;
    height:100px;
    background:rgba(136,180,251,0.5);
    position:absolute;
    bottom: 0;
    
}
.dialog .pic {
    width:60px;
    height:60px;
    background:url(1.png) no-repeat;
    background-size: 100%;
    display:inline-block;
    position: absolute;
    top:16px;
    left:16px;
    border-radius: 5px;
}
.dialog .innerBox{
    width:90%;
    height:80px;
    border:2px solid #dcc0a5;
    opacity: 0.8;
    left:85px;
    top:10px;
    position: absolute;
    border-radius: 5px;
    font-size: 20px;
    font-family: 微軟雅黑;
    color:#fff;
    text-shadow: 1px -1px 1px #333;
    word-wrap:break-word;
    padding:2px;
}

html:

<div class='dialog'>
    <span class='pic'></span>
    <div class='innerBox'></div>
</div>

效果圖:

Paste_Image.png

圖片素材我是隨便去網(wǎng)上截取的。

4. js實(shí)現(xiàn)打印機(jī)效果

我們可以通過定時(shí)器來實(shí)現(xiàn)一個(gè)延時(shí)球恤,比如現(xiàn)在我有一個(gè)字符串:

var str = "Hello World辜昵!"

在body區(qū)域,我有一個(gè)div用來輸出文字咽斧。

<body>
    <div id='text'></div>
</body>

如果你用for循環(huán)堪置,雖然能依次打印,但這樣是看不到動(dòng)畫效果的张惹。

var str = "Hello World晋柱!"
var text = document.getElementById('text');

for(var i = 0; i < str.length; i++){
    text.innerHTML += str.charAt(i);
}

在不知道setInterval之前,我曾經(jīng)天真的以為诵叁,可以使用單片機(jī)中C語言的軟件延時(shí)方法,也就是在for循環(huán)里面增加一個(gè)無意義的循環(huán)操作來消磨cpu的時(shí)間钦椭,以達(dá)到延時(shí)的目的拧额。

后來我發(fā)現(xiàn)在js中根本不是那么回事碑诉,其實(shí),js的for循環(huán)是一口氣執(zhí)行好了侥锦,再展示給你的进栽。

所以,如果你想通過for循環(huán)來達(dá)到延時(shí)的目的應(yīng)該是不可能的恭垦。

好在js給我們提供了一個(gè)setInterval的輪詢方法快毛,我們可以通過這個(gè)方法來達(dá)到文字的動(dòng)畫效果。

代碼如下:

window.onload = function(){
    var innerBox = document.getElementsByClassName('innerBox')[0];
    var text = 'JavaScript一種直譯式腳本語言番挺,是一種動(dòng)態(tài)類型唠帝、弱類型、基于原型的語言玄柏,內(nèi)置支持類型襟衰。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分粪摘,廣泛用于客戶端的腳本語言瀑晒,最早是在HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)網(wǎng)頁上使用,用來給HTML網(wǎng)頁增加動(dòng)態(tài)功能徘意。天空苔悦,你也要好好學(xué)習(xí)呀!';
    var len = text.length;
    var timer = null;
    var index = 0;
    
    timer = setInterval(function(){
        if(index == len){
            clearInterval(timer);
        }
        innerBox.innerHTML += text.charAt(index++);
    },50);

}

思路:
1.新建一個(gè)需要?jiǎng)赢嬚故镜奈谋?br> 2.記錄下當(dāng)前遍歷的字符位置
3.記錄文本的總長度
4.新建一個(gè)定時(shí)器timer
5.50ms輪詢椎咧,每次輪詢都取文本的下一個(gè)字符玖详,添加到innerBox。
6.當(dāng)最后一個(gè)字符也遍歷完了邑退,繼續(xù)進(jìn)入輪詢的時(shí)候竹宋,就清除定時(shí)器。

效果(截圖原因看起來有點(diǎn)卡頓地技,其實(shí)是非常流暢的哦):

1.gif

本章結(jié)束 ...

剽悍一小兔蜈七,電氣自動(dòng)化畢業(yè)。
參加工作后對(duì)計(jì)算機(jī)感興趣莫矗,深知初學(xué)編程之艱辛飒硅。
希望將自己所學(xué)記錄下來,給初學(xué)者一點(diǎn)幫助作谚。

免責(zé)聲明: 博客中所有的圖片素材均來自百度搜索三娩,僅供學(xué)習(xí)交流,如有問題請(qǐng)聯(lián)系我妹懒,侵立刪雀监,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市会前,隨后出現(xiàn)的幾起案子好乐,更是在濱河造成了極大的恐慌,老刑警劉巖瓦宜,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔚万,死亡現(xiàn)場離奇詭異,居然都是意外死亡临庇,警方通過查閱死者的電腦和手機(jī)反璃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來假夺,“玉大人淮蜈,你說我怎么就攤上這事≈对螅” “怎么了礁芦?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悼尾。 經(jīng)常有香客問我柿扣,道長,這世上最難降的妖魔是什么闺魏? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任未状,我火速辦了婚禮,結(jié)果婚禮上析桥,老公的妹妹穿的比我還像新娘司草。我一直安慰自己,他們只是感情好泡仗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布埋虹。 她就那樣靜靜地躺著,像睡著了一般娩怎。 火紅的嫁衣襯著肌膚如雪搔课。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天截亦,我揣著相機(jī)與錄音爬泥,去河邊找鬼。 笑死崩瓤,一個(gè)胖子當(dāng)著我的面吹牛袍啡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播却桶,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼境输,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嗅剖,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蛋逾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后窗悯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偷拔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蒋院,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莲绰。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欺旧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛤签,到底是詐尸還是另有隱情辞友,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布震肮,位于F島的核電站称龙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏戳晌。R本人自食惡果不足惜鲫尊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沦偎。 院中可真熱鬧疫向,春花似錦、人聲如沸豪嚎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侈询。三九已至舌涨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妄荔,已是汗流浹背泼菌。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啦租,地道東北人哗伯。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像篷角,于是被迫代替她去往敵國和親焊刹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容