摘要:自動簡歷項目介紹一個可以自動播放書寫過程簡歷,主要運用原生和的知識點。方法如果展示窗口設置的是或者會自動拉到底部為滾動至底部為滾動至頂部其他參數可選定義緩動動畫,或之一。增加簡歷展示頁編寫增加編寫簡歷內容的展示窗口。
自動簡歷 項目介紹 一個可以自動播放書寫過程簡歷,主要運用原生JS和CSS3的知識點。 用到的庫:
prism
marked
相關鏈接預覽點我
源碼點我
想辦法讓文字逐個出現在頁面中
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()的區別是,substring()不接受負的參數
既要開始,也要結束。想辦法取消鬧鐘
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
將內容換成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里面,連續出現多個看不見的字符,瀏覽器會認為它是一個空格**
利用標簽
HTML元素表示預定義格式文本。在該元素中的文本通常按照原文件中的編排,以等寬字體的形式展現出來,文本中的空白符(比如空格和換行符)都會顯示出來。
HTML中加入標簽,將內容寫到中
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)
應用代碼
現在我們只是將代碼展示了出來,但是看到效果,所以我們要將代碼寫入到中
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)完善細節
沒效果?因為文字也寫了進去
解決辦法-將除去CSS內容進行注釋
/*你好,我是不遠,一名前端工程師。 請允許我做一個簡單的自我介紹,但是文字太單調,所以我想來點特別的。 首先我準備一下樣式。 */ *{ 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)
但是,很傻,很累,好的程序員要學會偷懶
方法二:prism.js
引入prism官網的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)
代碼高亮變化
我們需要讓代碼默認是平平無奇的樣子,然后再增加高亮效果。這樣活增加視覺的觀賞性。
- 設置默認樣式 我們需要在html中引入一個默認樣式的css文件,內容是對代碼的默認樣式設置。 ```CSS .token.selector{ color: black; } .token.property{ color: black; } .token.punctuation{ color: black; } ``` - 設置高亮樣式 ```CSS .token.selector{ color: #a6e22e; } .token.property{ color: #f92672; } .token.punctuation{ color: #f8f8f2; } ``` - 注意一:上面類的名稱是根據prism提供的來的,審查元素可以看到名稱 - 注意二:CSS文件應放在引入的prism樣式的下面,以免被覆蓋加入html元素
CSS運行結束,執行第二個函數,控制html;第三個函數控制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()做一個左右結構,執行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) }封裝函數
封裝函數
/*把code寫到#code和style標簽里面*/ 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) //調用(原result內容)
回調函數
封裝完畢后,當我們想緊接調用f2()時,又尷尬了。因為setInterval()是一個鬧鐘(異步),所以在設置好鬧鐘之后,就會立即執行f2(),可是正確的執行邏輯是在code寫完之后再調用f2()
不等結果就是異步
回調是拿到異步結果的一種方式(也可以拿到同步結果)
防止覆蓋之前的代碼,我們增加一個參數prefix
function writeCode(prefix,code,fn){ //.... } }, 10) }
調用函數
第一次調用的時候由于之前沒有內容,所以我們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) }
調用函數
writeCode("", cssCode, () => { createPaper(() => { writeCode(cssCode, htmlCode) }) })繼續優化細節
優化代碼展示窗口,使其和展示窗口一樣高;在defulf.css里設置為
#code{ height: 100vh; overflow: hidden; }
自動滾動代碼至底部,再封裝的函數內增加代碼
function writeCode(prefix, code, fn) { //... domCode.scrollTop=domCode.scrollHeight //... }, 10) }
Element.scrollTop 屬性可以獲取或設置一個元素的內容垂直滾動的像素數。
scrollIntoView()方法:
如果展示窗口設置的是overflow: auto;或者overflow: scroll;會自動拉到底部
Element.scrollIntoView(false)
element.scrollIntoView(false)為滾動至底部
element.scrollIntoView(true)為滾動至頂部
其他參數:
behavior 可選
定義緩動動畫, "auto", "instant", 或 "smooth" 之一。默認為 "auto"。
block 可選
"start", "center", "end", 或 "nearest"之一。默認為 "center"。
inline 可選
"start", "center", "end", 或 "nearest"之一。默認為 "nearest"。
element.scrollIntoView({behavior: "instant", block: "end", inline: "nearest"});增加簡歷展示頁
編寫JS增加編寫簡歷內容的展示窗口。與代碼展示窗口類似
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() }
寫到這里基本就結束了,剩下的就是異步函數調用的順序了。然后再慢慢的修改CSS樣式。就可以大工完成了
——遠方不遠
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97818.html
摘要:我覺得了解簡歷和面試的技巧可以幫助你更好的去學習重要的知識點以及更好地去準備面試以及面試,說實話,我個人覺得這些東西還挺重要的。在本文里,我將介紹我這段時間里更新簡歷和面試的相關經歷。 分享一篇很不錯的文章!本文作者曾經寫過《Java Web輕量級開發面試教程》和 《Java核心技術及面試指南》這兩本書。我覺得了解簡歷和面試的技巧可以幫助你更好的去學習重要的知識點以及更好地去準備面試以...
閱讀 1460·2021-11-22 14:44
閱讀 2843·2021-11-16 11:44
閱讀 3206·2021-10-13 09:40
閱讀 1980·2021-10-08 10:04
閱讀 2363·2021-09-24 10:28
閱讀 2909·2021-09-06 15:02
閱讀 2957·2019-08-30 15:52
閱讀 2392·2019-08-30 13:20