摘要:自動簡歷項目介紹一個可以自動播放書寫過程簡歷,主要運用原生和的知識點。方法如果展示窗口設(shè)置的是或者會自動拉到底部為滾動至底部為滾動至頂部其他參數(shù)可選定義緩動動畫,或之一。增加簡歷展示頁編寫增加編寫簡歷內(nèi)容的展示窗口。
自動簡歷 項目介紹 一個可以自動播放書寫過程簡歷,主要運用原生JS和CSS3的知識點。 用到的庫:
prism
marked
相關(guān)鏈接預(yù)覽點我
源碼點我
想辦法讓文字逐個出現(xiàn)在頁面中
setTimeout(()=>{ document.body.innerHTML="1" },1000) setTimeout(()=>{ document.body.innerHTML="2" },2000) setTimeout(()=>{ document.body.innerHTML="3" },3000)
成功了,但是有點傻,為何我們不試一試setInterval加上slice()或者substring()
var result = "1234567890" var n = 0 setInterval(()=>{ n += 1 document.body.innerHTML = result.substring(0,n) },500)
slice()和substring()的區(qū)別是,substring()不接受負(fù)的參數(shù)
既要開始,也要結(jié)束。想辦法取消鬧鐘
var result = "1234567890" var n = 0 var clock = setInterval(()=>{ n += 1 document.body.innerHTML = result.substring(0,n) if(n>=result.length){ window.clearInterval(clock) } },500)換成CSS
將內(nèi)容換成CSS
var result = ` body{ background:green; } ` var n = 0 var clock = setInterval(()=>{ n += 1 document.body.innerHTML = result.substring(0,n) if(n>=result.length){ window.clearInterval(clock) } },500)
運行一下。黑人問號臉——我的換行沒啦??? 這是因為在**HTML里面,連續(xù)出現(xiàn)多個看不見的字符,瀏覽器會認(rèn)為它是一個空格**
利用標(biāo)簽
HTML元素表示預(yù)定義格式文本。在該元素中的文本通常按照原文件中的編排,以等寬字體的形式展現(xiàn)出來,文本中的空白符(比如空格和換行符)都會顯示出來。
HTML中加入標(biāo)簽,將內(nèi)容寫到中
var result = ` body{ background:green; } ` var n = 0 var clock = setInterval(()=>{ n += 1 code.innerHTML = result.substring(0,n) if(n>=result.length){ window.clearInterval(clock) } },100)
應(yīng)用代碼
現(xiàn)在我們只是將代碼展示了出來,但是看到效果,所以我們要將代碼寫入到中
var result = ` body{ background:green; } ` var n = 0 var clock = setInterval(()=>{ n += 1 code.innerHTML = result.substring(0,n) myStyle.innerHTML = result.substring(0,n) if(n>=result.length){ window.clearInterval(clock) } },500)完善細(xì)節(jié)
沒效果?因為文字也寫了進去
解決辦法-將除去CSS內(nèi)容進行注釋
/*你好,我是不遠(yuǎn),一名前端工程師。 請允許我做一個簡單的自我介紹,但是文字太單調(diào),所以我想來點特別的。 首先我準(zhǔn)備一下樣式。 */ *{ transition: all 1s; } html{ background:#363636 color:#fff; font-size:16px; }
代碼高亮?
首先會想到這樣去解決,
html
但是在CSS中這樣的語法是不允許的。
方法一:偷梁換柱
var n = 0
var clock = setInterval(()=>{
n += 1
code.innerHTML = result.substring(0,n)
code.innerHTML = code.innerHTML.replace("html","html")
myStyle.innerHTML = result.substring(0,n)
if(n>=result.length){
window.clearInterval(clock)
}
},500)
但是,很傻,很累,好的程序員要學(xué)會偷懶
方法二:prism.js
引入prism官網(wǎng)的JS和CSS文件后
var n = 0 var clock = setInterval(() => { n += 1 code.innerHTML = result.substring(0, n) code.innerHTML = Prism.highlight(code.innerHTML, Prism.languages.css) //修改code為prism提供的樣式 myStyle.innerHTML = result.substring(0, n) if (n >= result.length) { window.clearInterval(clock) } }, 50)
代碼高亮變化
我們需要讓代碼默認(rèn)是平平無奇的樣子,然后再增加高亮效果。這樣活增加視覺的觀賞性。
- 設(shè)置默認(rèn)樣式 我們需要在html中引入一個默認(rèn)樣式的css文件,內(nèi)容是對代碼的默認(rèn)樣式設(shè)置。 ```CSS .token.selector{ color: black; } .token.property{ color: black; } .token.punctuation{ color: black; } ``` - 設(shè)置高亮樣式 ```CSS .token.selector{ color: #a6e22e; } .token.property{ color: #f92672; } .token.punctuation{ color: #f8f8f2; } ``` - 注意一:上面類的名稱是根據(jù)prism提供的來的,審查元素可以看到名稱 - 注意二:CSS文件應(yīng)放在引入的prism樣式的下面,以免被覆蓋加入html元素
CSS運行結(jié)束,執(zhí)行第二個函數(shù),控制html;第三個函數(shù)控制html樣式
var n = 0 var clock = setInterval(() => { //原代碼不變 if (n >= result.length) { window.clearInterval(clock) fn2() fn3() } }, 10)
定義fn2()
function fn2(){ var paper = document.createElement("div") paper.id = "paper" document.body.appendChild(paper) }
定義fn3()做一個左右結(jié)構(gòu),執(zhí)行fn3(){}
function fn3(preResult) { var result = ` #paper{ width:200px; height:400px; background:#F1E2C3; } ` var n = 0 var clock = setInterval(() => { n += 1 code.innerHTML = preResult + result.substring(0, n) code.innerHTML = Prism.highlight(code.innerHTML, Prism.languages.css) myStyle.innerHTML = preResult + result.substring(0, n) if (n >= result.length) { window.clearInterval(clock) } }, 10) }封裝函數(shù)
封裝函數(shù)
/*把code寫到#code和style標(biāo)簽里面*/ function writeCode(code){ let domCode = document.querySelector("#code") let n = 0 var clock = setInterval(() => { n += 1 domCode.innerHTML = Prism.highlight(code.substring(0, n), Prism.languages.css) myStyle.innerHTML = code.substring(0, n) if (n >= code.length) { window.clearInterval(clock) } }, 10) } //封裝 var result = `......` writeCode(cssCode) //調(diào)用(原result內(nèi)容)
回調(diào)函數(shù)
封裝完畢后,當(dāng)我們想緊接調(diào)用f2()時,又尷尬了。因為setInterval()是一個鬧鐘(異步),所以在設(shè)置好鬧鐘之后,就會立即執(zhí)行f2(),可是正確的執(zhí)行邏輯是在code寫完之后再調(diào)用f2()
不等結(jié)果就是異步
回調(diào)是拿到異步結(jié)果的一種方式(也可以拿到同步結(jié)果)
防止覆蓋之前的代碼,我們增加一個參數(shù)prefix
function writeCode(prefix,code,fn){ //.... } }, 10) }
調(diào)用函數(shù)
第一次調(diào)用的時候由于之前沒有內(nèi)容,所以我們prefix為""
function writeCode(prefix, code, fn) { let domCode = document.querySelector("#code") let n = 0 var clock = setInterval(() => { n += 1 domCode.innerHTML = Prism.highlight(prefix + code.substring(0, n), Prism.languages.css) myStyle.innerHTML = prefix + code.substring(0, n) if (n >= code.length) { window.clearInterval(clock) fn.call() } }, 10) }
調(diào)用函數(shù)
writeCode("", cssCode, () => { createPaper(() => { writeCode(cssCode, htmlCode) }) })繼續(xù)優(yōu)化細(xì)節(jié)
優(yōu)化代碼展示窗口,使其和展示窗口一樣高;在defulf.css里設(shè)置為
#code{ height: 100vh; overflow: hidden; }
自動滾動代碼至底部,再封裝的函數(shù)內(nèi)增加代碼
function writeCode(prefix, code, fn) { //... domCode.scrollTop=domCode.scrollHeight //... }, 10) }
Element.scrollTop 屬性可以獲取或設(shè)置一個元素的內(nèi)容垂直滾動的像素數(shù)。
scrollIntoView()方法:
如果展示窗口設(shè)置的是overflow: auto;或者overflow: scroll;會自動拉到底部
Element.scrollIntoView(false)
element.scrollIntoView(false)為滾動至底部
element.scrollIntoView(true)為滾動至頂部
其他參數(shù):
behavior 可選
定義緩動動畫, "auto", "instant", 或 "smooth" 之一。默認(rèn)為 "auto"。
block 可選
"start", "center", "end", 或 "nearest"之一。默認(rèn)為 "center"。
inline 可選
"start", "center", "end", 或 "nearest"之一。默認(rèn)為 "nearest"。
element.scrollIntoView({behavior: "instant", block: "end", inline: "nearest"});增加簡歷展示頁
編寫JS增加編寫簡歷內(nèi)容的展示窗口。與代碼展示窗口類似
function writeMarkdown(markdown, fn) { let domPaper = document.querySelector("#paper") let n = 0 var clock = setInterval(() => { n += 1 domPaper.innerHTML = Prism.highlight(markdown.substring(0, n), Prism.languages.markdown) domPaper.scrollIntoView({behavior: "instant", block: "end", inline: "nearest"}) if (n >= markdown.length) { window.clearInterval(clock) fn.call() } }, 10)變成markdown語法
利用第三方庫marked.js
document.querySelector("#paper").innerHTML = marked(markdown) fn.call() }
寫到這里基本就結(jié)束了,剩下的就是異步函數(shù)調(diào)用的順序了。然后再慢慢的修改CSS樣式。就可以大工完成了
——遠(yuǎn)方不遠(yuǎn)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/113940.html
摘要:自動簡歷項目介紹一個可以自動播放書寫過程簡歷,主要運用原生和的知識點。方法如果展示窗口設(shè)置的是或者會自動拉到底部為滾動至底部為滾動至頂部其他參數(shù)可選定義緩動動畫,或之一。增加簡歷展示頁編寫增加編寫簡歷內(nèi)容的展示窗口。 自動簡歷 項目介紹 一個可以自動播放書寫過程簡歷,主要運用原生JS和CSS3的知識點。 用到的庫: prism marked 相關(guān)鏈接 預(yù)覽點我 源碼點我show...
摘要:我覺得了解簡歷和面試的技巧可以幫助你更好的去學(xué)習(xí)重要的知識點以及更好地去準(zhǔn)備面試以及面試,說實話,我個人覺得這些東西還挺重要的。在本文里,我將介紹我這段時間里更新簡歷和面試的相關(guān)經(jīng)歷。 分享一篇很不錯的文章!本文作者曾經(jīng)寫過《Java Web輕量級開發(fā)面試教程》和 《Java核心技術(shù)及面試指南》這兩本書。我覺得了解簡歷和面試的技巧可以幫助你更好的去學(xué)習(xí)重要的知識點以及更好地去準(zhǔn)備面試以...
閱讀 1751·2023-04-25 22:42
閱讀 2202·2021-09-22 15:16
閱讀 3485·2021-08-30 09:44
閱讀 485·2019-08-29 16:44
閱讀 3303·2019-08-29 16:20
閱讀 2511·2019-08-29 16:12
閱讀 3386·2019-08-29 16:07
閱讀 665·2019-08-29 15:08