diff --git a/_config.yml b/_config.yml index b3f79af..0831021 100644 --- a/_config.yml +++ b/_config.yml @@ -625,12 +625,9 @@ subtitle: enable: false # Typewriter Effect (打字效果) effect: true - # Effect Speed Options (打字效果速度參數) - startDelay: 300 # time before typing starts in milliseconds - typeSpeed: 150 # type speed in milliseconds - backSpeed: 50 # backspacing speed in milliseconds - # loop (循環打字) - loop: true + # Customize typed.js (配置typed.js) + # https://github.com/mattboldt/typed.js/#customization + typed_option: # source 調用第三方服務 # source: false 關閉調用 # source: 1 調用一言網的一句話(簡體) https://hitokoto.cn/ @@ -958,3 +955,4 @@ CDN: # prismjs_autoloader: # artalk_js: # artalk_css: + # busuanzi: diff --git a/layout/includes/header/index.pug b/layout/includes/header/index.pug index df6f3da..8089f19 100644 --- a/layout/includes/header/index.pug +++ b/layout/includes/header/index.pug @@ -28,7 +28,9 @@ else - var top_img = false - var isHomeClass = 'not-top-img' -header#page-header(class=isHomeClass style=bg_img) +- const isFixedClass = theme.nav.fixed ? ' fixed' : '' + +header#page-header(class=`${isHomeClass+isFixedClass}` style=bg_img) !=partial('includes/header/nav', {}, {cache: true}) if top_img !== false if is_post() diff --git a/layout/includes/third-party/subtitle.pug b/layout/includes/third-party/subtitle.pug index 9236757..bf02b99 100644 --- a/layout/includes/third-party/subtitle.pug +++ b/layout/includes/third-party/subtitle.pug @@ -1,6 +1,30 @@ -- const { effect,loop,source,sub,startDelay,typeSpeed,backSpeed } = theme.subtitle +- const { effect,source,sub,typed_option } = theme.subtitle - let subContent = sub || new Array() +script. + window.typedJSFn = { + init: (str) => { + window.typed = new Typed('#subtitle', Object.assign({ + strings: str, + startDelay: 300, + typeSpeed: 150, + loop: true, + backSpeed: 50, + }, !{JSON.stringify(typed_option)})) + }, + run: (subtitleType) => { + if (!{effect}) { + if (typeof Typed === 'function') { + subtitleType() + } else { + getScript('!{url_for(theme.asset.typed)}').then(subtitleType) + } + } else { + subtitleType() + } + } + } + case source when 1 script. @@ -12,28 +36,13 @@ case source const from = '出自 ' + data.from const sub = !{JSON.stringify(subContent)} sub.unshift(data.hitokoto, from) - window.typed = new Typed('#subtitle', { - strings: sub, - startDelay: !{startDelay}, - typeSpeed: !{typeSpeed}, - loop: !{loop}, - backSpeed: !{backSpeed}, - }) + typedJSFn.init(sub) } else { document.getElementById('subtitle').innerHTML = data.hitokoto } }) } - - if (!{effect}) { - if (typeof Typed === 'function') { - subtitleType() - } else { - getScript('!{url_for(theme.asset.typed)}').then(subtitleType) - } - } else { - subtitleType() - } + typedJSFn.run(subtitleType) when 2 script. @@ -44,28 +53,13 @@ case source const from = '出自 ' + str[1] const sub = !{JSON.stringify(subContent)} sub.unshift(con, from) - window.typed = new Typed('#subtitle', { - strings: sub, - startDelay: !{startDelay}, - typeSpeed: !{typeSpeed}, - loop: !{loop}, - backSpeed: !{backSpeed}, - }) + typedJSFn.init(sub) } else { document.getElementById('subtitle').innerHTML = con } }) } - - if (!{effect}) { - if (typeof Typed === 'function') { - subtitleType() - } else { - getScript('!{url_for(theme.asset.typed)}').then(subtitleType) - } - } else { - subtitleType() - } + typedJSFn.run(subtitleType) when 3 script. @@ -76,53 +70,23 @@ case source const sub = !{JSON.stringify(subContent)} const content = result.data.content sub.unshift(content) - window.typed = new Typed('#subtitle', { - strings: sub, - startDelay: !{startDelay}, - typeSpeed: !{typeSpeed}, - loop: !{loop}, - backSpeed: !{backSpeed}, - }) + typedJSFn.init(sub) } else { document.getElementById('subtitle').innerHTML = result.data.content } }) }) } - - if (!{effect}) { - if (typeof Typed === 'function') { - subtitleType() - } else { - getScript('!{url_for(theme.asset.typed)}').then(subtitleType) - } - } else { - subtitleType() - } + typedJSFn.run(subtitleType) default - subContent = subContent.length ? subContent : new Array(config.subtitle) script. function subtitleType () { - if (!{effect}) { - window.typed = new Typed("#subtitle", { - strings: !{JSON.stringify(subContent)}, - startDelay: !{startDelay}, - typeSpeed: !{typeSpeed}, - loop: !{loop}, - backSpeed: !{backSpeed} - }) + if (!{effect}) { + typedJSFn.init(!{JSON.stringify(subContent)}) } else { document.getElementById("subtitle").innerHTML = '!{subContent[0]}' } } - - if (!{effect}) { - if (typeof Typed === 'function') { - subtitleType() - } else { - getScript('!{url_for(theme.asset.typed)}').then(subtitleType) - } - } else { - subtitleType() - } + typedJSFn.run(subtitleType) \ No newline at end of file diff --git a/scripts/tag/gallery.js b/scripts/tag/gallery.js index e7c2d69..959f412 100644 --- a/scripts/tag/gallery.js +++ b/scripts/tag/gallery.js @@ -15,7 +15,7 @@ function gallery (args, content) { const rowHeight = args[1] || 220 const limit = args[2] || 10 const lazyload = args[0] === 'true' - const regex = /!\[(.*?)\]\((.*?)\s*(?:["'](.*?)["']?)?\s*\)/g + const regex = /!\[(.*?)\]\(([^\s]*)\s*(?:["'](.*?)["']?)?\s*\)/g const lazyloadClass = lazyload ? 'lazyload' : '' let m const arr = [] diff --git a/source/css/_layout/head.styl b/source/css/_layout/head.styl index aba4c44..ade0db3 100644 --- a/source/css/_layout/head.styl +++ b/source/css/_layout/head.styl @@ -124,7 +124,8 @@ background: rgba(255, 255, 255, .8) box-shadow: 0 5px 6px -5px rgba(133, 133, 133, .6) - a + a, + .site-name color: var(--font-color) text-shadow: none @@ -137,10 +138,6 @@ box-shadow: 0 5px 6px -5px alpha($grey, .6) transition: transform .2s ease-in-out, opacity .2s ease-in-out - &.fixed - top: 0 - transition: all .5s - #blog-info color: var(--font-color) @@ -158,8 +155,13 @@ &:hover color: $light-blue - &.nav-visible - #nav:not(.fixed) + &.fixed + #nav + top: 0 + transition: all .5s + + &.nav-visible:not(.fixed) + #nav transition: all .5s transform: translate3d(0, 100%, 0) @@ -168,6 +170,19 @@ top: 70px transition: top .5s + &.fixed + #nav + position: fixed + + & + .layout + & > .aside-content > .sticky_layout + top: 70px + transition: top .5s + + #card-toc + .toc-content + max-height: calc(100vh - 170px) + #page h1.page-title margin: 8px 0 20px @@ -265,9 +280,6 @@ &.show opacity: 1 - &.fixed - position: fixed - #blog-info flex: 1 color: var(--light-grey) diff --git a/source/js/tw_cn.js b/source/js/tw_cn.js index ec9d37d..cfff352 100644 --- a/source/js/tw_cn.js +++ b/source/js/tw_cn.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ document.addEventListener('DOMContentLoaded', function () { const translate = GLOBAL_CONFIG.translate const snackbarData = GLOBAL_CONFIG.Snackbar @@ -9,16 +8,22 @@ document.addEventListener('DOMContentLoaded', function () { let currentEncoding = defaultEncoding const targetEncodingCookie = 'translate-chn-cht' let targetEncoding = - saveToLocal.get(targetEncodingCookie) === undefined - ? defaultEncoding - : Number(saveToLocal.get('translate-chn-cht')) + saveToLocal.get(targetEncodingCookie) === undefined + ? defaultEncoding + : Number(saveToLocal.get('translate-chn-cht')) let translateButtonObject const isSnackbar = GLOBAL_CONFIG.Snackbar !== undefined + function setLang () { + document.documentElement.lang = targetEncoding === 1 ? 'zh-TW' : 'zh-CN' + } + function translateText (txt) { if (txt === '' || txt == null) return '' if (currentEncoding === 1 && targetEncoding === 2) return Simplized(txt) - else if (currentEncoding === 2 && targetEncoding === 1) { return Traditionalized(txt) } else return txt + else if (currentEncoding === 2 && targetEncoding === 1) { + return Traditionalized(txt) + } else return txt } function translateBody (fobj) { let objs @@ -28,17 +33,23 @@ document.addEventListener('DOMContentLoaded', function () { const obj = objs.item(i) if ( '||BR|HR|'.indexOf('|' + obj.tagName + '|') > 0 || - obj === translateButtonObject - ) { continue } - if (obj.title !== '' && obj.title != null) { obj.title = translateText(obj.title) } + obj === translateButtonObject + ) { + continue + } + if (obj.title !== '' && obj.title != null) { + obj.title = translateText(obj.title) + } if (obj.alt !== '' && obj.alt != null) obj.alt = translateText(obj.alt) - if (obj.placeholder !== '' && obj.placeholder != null) obj.placeholder = translateText(obj.placeholder) + if (obj.placeholder !== '' && obj.placeholder != null) { obj.placeholder = translateText(obj.placeholder) } if ( obj.tagName === 'INPUT' && - obj.value !== '' && - obj.type !== 'text' && - obj.type !== 'hidden' - ) { obj.value = translateText(obj.value) } + obj.value !== '' && + obj.type !== 'text' && + obj.type !== 'hidden' + ) { + obj.value = translateText(obj.value) + } if (obj.nodeType === 3) obj.data = translateText(obj.data) else translateBody(obj) } @@ -48,18 +59,18 @@ document.addEventListener('DOMContentLoaded', function () { currentEncoding = 1 targetEncoding = 2 translateButtonObject.innerHTML = msgToTraditionalChinese - saveToLocal.set(targetEncodingCookie, targetEncoding, 2) - translateBody() - if (isSnackbar) btf.snackbarShow(snackbarData.cht_to_chs) + isSnackbar && btf.snackbarShow(snackbarData.cht_to_chs) } else if (targetEncoding === 2) { currentEncoding = 2 targetEncoding = 1 translateButtonObject.innerHTML = msgToSimplifiedChinese - saveToLocal.set(targetEncodingCookie, targetEncoding, 2) - translateBody() - if (isSnackbar) btf.snackbarShow(snackbarData.chs_to_cht) + isSnackbar && btf.snackbarShow(snackbarData.chs_to_cht) } + saveToLocal.set(targetEncodingCookie, targetEncoding, 2) + setLang() + translateBody() } + function JTPYStr () { return '万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾龙历志制一台皋准复猛钟注范签' } @@ -71,7 +82,9 @@ document.addEventListener('DOMContentLoaded', function () { const ss = JTPYStr() const tt = FTPYStr() for (let i = 0; i < cc.length; i++) { - if (cc.charCodeAt(i) > 10000 && ss.indexOf(cc.charAt(i)) !== -1) { str += tt.charAt(ss.indexOf(cc.charAt(i))) } else str += cc.charAt(i) + if (cc.charCodeAt(i) > 10000 && ss.indexOf(cc.charAt(i)) !== -1) { + str += tt.charAt(ss.indexOf(cc.charAt(i))) + } else str += cc.charAt(i) } return str } @@ -80,17 +93,23 @@ document.addEventListener('DOMContentLoaded', function () { const ss = JTPYStr() const tt = FTPYStr() for (let i = 0; i < cc.length; i++) { - if (cc.charCodeAt(i) > 10000 && tt.indexOf(cc.charAt(i)) !== -1) { str += ss.charAt(tt.indexOf(cc.charAt(i))) } else str += cc.charAt(i) + if (cc.charCodeAt(i) > 10000 && tt.indexOf(cc.charAt(i)) !== -1) { + str += ss.charAt(tt.indexOf(cc.charAt(i))) + } else str += cc.charAt(i) } return str } + function translateInitialization () { translateButtonObject = document.getElementById('translateLink') if (translateButtonObject) { if (currentEncoding !== targetEncoding) { + translateButtonObject.innerHTML = + targetEncoding === 1 + ? msgToSimplifiedChinese + : msgToTraditionalChinese + setLang() setTimeout(translateBody, translateDelay) - if (targetEncoding === 1) translateButtonObject.innerHTML = msgToSimplifiedChinese - else translateButtonObject.innerHTML = msgToTraditionalChinese } translateButtonObject.addEventListener('click', translatePage, false) } diff --git a/source/js/utils.js b/source/js/utils.js index 42d438b..96beaaf 100644 --- a/source/js/utils.js +++ b/source/js/utils.js @@ -122,7 +122,8 @@ const btf = { scrollToDest: (pos, time = 500) => { const currentPos = window.pageYOffset - if (currentPos > pos) pos = pos - 70 + const isNavFixed = document.getElementById('page-header').classList.contains('fixed') + if (currentPos > pos || isNavFixed) pos = pos - 70 if ('scrollBehavior' in document.documentElement.style) { window.scrollTo({