欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          詳解怎么在前端里實(shí)現(xiàn)打字機(jī)插件

          本篇文章給大家?guī)?lái)了關(guān)于前端的相關(guān)知識(shí),其中主要跟大家聊一聊前端是怎么實(shí)現(xiàn)打字機(jī)插件的,感興趣的朋友下面一起來(lái)看一下吧,希望對(duì)大家有幫助。

          詳解怎么在前端里實(shí)現(xiàn)打字機(jī)插件

          前言

          前端實(shí)現(xiàn)打字機(jī)效果,在網(wǎng)上找到的通過(guò)修改dom節(jié)點(diǎn)的方式無(wú)法跨端使用,考慮到跨端問(wèn)題作出兼容方案:使用回調(diào)函數(shù),在每次打字變化的時(shí)候調(diào)用回調(diào)并且把更新后的字符串拋出,讓用戶自己去處理之后的渲染,這樣就能夠做到跨平臺(tái),在各個(gè)端都能夠正常使用。

          詳解怎么在前端里實(shí)現(xiàn)打字機(jī)插件

          最簡(jiǎn)單的打字機(jī)

          const dom = document.querySelector('.content') const data = '最簡(jiǎn)單的打字效果代碼'.split('') let index = 0 function writing(index) {     if (index < data.length) {         dom.innerHTML += data[index]         setTimeout(writing.bind(this), 200, ++index)     } } writing(index)
          登錄后復(fù)制

          最簡(jiǎn)單的打字機(jī),簡(jiǎn)單的通過(guò)定時(shí)器實(shí)現(xiàn)了文字的增加,通過(guò)這個(gè)例子我們能夠得到一個(gè)具體的實(shí)現(xiàn)思路,當(dāng)然一些功能或者性能上的問(wèn)題還需要不斷地優(yōu)化,但是我們可以以此作為基礎(chǔ)來(lái)設(shè)計(jì)一款插件。

          1. 新增向后刪除動(dòng)效

          所以我們新增一個(gè)當(dāng)前的打字狀態(tài)

          當(dāng) state 為 "typing" 的時(shí)候代表向前打字,相反為向后刪除,

          然后就是處理刪除部分的邏輯,這部分的邏輯和向前新增是一樣的,并且我們也要在刪除到最后一個(gè)字符之后把狀態(tài)改為 "typing"

          2. 新增速度,向后刪除速度可控

          然后還可以自定義向前新增或者向后刪除的速度,通過(guò)當(dāng)前的狀態(tài)來(lái)判斷就可以

          3. 輸入文字可以為單個(gè)字符串也可以為字符串?dāng)?shù)組

          并且支持傳入一個(gè)字符串?dāng)?shù)組而不是單個(gè)的字符串,因?yàn)閷?shí)際的需求可能是多個(gè)字符串之間一直輪換

          首先單個(gè)字符的邏輯沒(méi)什么好說(shuō)的,字符串的數(shù)組的話,就需要新增一個(gè)index用于判斷當(dāng)前打字機(jī)進(jìn)行到了哪一個(gè)字符串,

          通過(guò) changeTextIndex 這個(gè)函數(shù),就可以不斷地更新當(dāng)前字符串,做到字符串?dāng)?shù)組循環(huán)播放的效果

          4. 開(kāi)啟延遲

          新增字符串開(kāi)始和結(jié)束的延遲

          用于控制每次打字結(jié)束之后,需要等待的時(shí)間

          5. 停止打字

          打字機(jī)運(yùn)行的過(guò)長(zhǎng)當(dāng)中,由于底層是通過(guò)定時(shí)器實(shí)現(xiàn)的,那么就一定需要在不使用的時(shí)候?qū)⑵潢P(guān)閉,避免造成性能的浪費(fèi),比方說(shuō)在首頁(yè)實(shí)例化了一個(gè)打字機(jī),但是進(jìn)入到別的頁(yè)面的時(shí)候就不再需要這個(gè)打字機(jī)了,那么就需要將其停下。

          通過(guò)在實(shí)例上綁定一個(gè)函數(shù)來(lái)停下當(dāng)前打字機(jī)的進(jìn)行,當(dāng)調(diào)用的時(shí)候,會(huì)將下一個(gè)定時(shí)器賦值為 null,從而停下打字機(jī)的運(yùn)行。

          6. 使用 callback 回調(diào)解決小程序問(wèn)題

          上述的代碼當(dāng)中,我們都去修改了 dom 節(jié)點(diǎn)來(lái)實(shí)現(xiàn)打字機(jī)字符的改變,那么在小程序或者是其他不存在 dom 或者是 dom 修改的 api 不再是 innerhtml 的時(shí)候,插件就無(wú)法進(jìn)行支持,所以對(duì)此進(jìn)行兼容,顯示通過(guò) callBackText 來(lái)保存當(dāng)前的字符串,然后在利用一個(gè)函數(shù)來(lái)決定,這個(gè)字符串的使用方式

          在存在 callback 的情況下,優(yōu)先將字符串通過(guò) callback 回調(diào)出去,讓業(yè)務(wù)拿到這個(gè)字符串并且自己去處理改變的邏輯,這樣在哪都能夠進(jìn)行打字效果,并且不在依賴環(huán)境。

          這里那我自己的 uniapp 項(xiàng)目做一個(gè)示例

          詳解怎么在前端里實(shí)現(xiàn)打字機(jī)插件

          詳解怎么在前端里實(shí)現(xiàn)打字機(jī)插件

          效果:

          詳解怎么在前端里實(shí)現(xiàn)打字機(jī)插件

          第三方 typed.js 庫(kù)

          大部分邏輯具體參考了 [typed.js]-JavaScript打字動(dòng)畫庫(kù)

          這里屬于自定義了一款插件,支持的功能不如 typed.js 但是勝在更加輕量,并且可以自己定義

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)