UNPKG

ydoc

Version:

基于 Markdown 的静态站点生成工具

88 lines (79 loc) 2.38 kB
var $panel = document.getElementById('js-panel'); var $header = document.getElementById('js-header'); var $content = document.getElementById('js-content'); var $summaryItems = Array.prototype.slice.call(document.querySelectorAll('#js-menu .href')); var $menu = document.getElementById('js-menu'); var $menuContent = document.getElementById('js-menu-content'); var $menuBar = document.getElementById('js-summary-switch'); var utils = { debounce: function(func, wait) { var timeout; return function () { clearTimeout(timeout); timeout = setTimeout(func, wait); }; } }; // Add 'active' to summary item function itemAddActive() { var locationHref = window.location.href; $summaryItems.map(function (item, index) { if (item.href === locationHref) { // add 'active' for present summary item. item.parentElement.classList.add('active'); } else { item.parentElement.classList.remove('active'); } }); } // Add EventListener function addEvents() { $panel.addEventListener('click', function (e) { itemAddActive(); if (e.target.scrollTop > 0) { $header.classList.add('moved'); } else { $header.classList.remove('moved'); } }); if ($menuContent) { $menuContent.addEventListener('click', function (e) { $menu.classList.remove('active'); setTimeout(itemAddActive, 0); }); } if ($menuBar) { $menuBar.addEventListener('click', function () { $menu.classList.toggle('active'); }); } if ($menu) { $menu.addEventListener('scroll', function(e) { sessionStorage.setItem('menuScrollTop', e.target.scrollTop); }); } if ($content) { $content.addEventListener('scroll', function (e) { sessionStorage.setItem('contentScrollTop', e.target.scrollTop); }); } } // initial components function initComponents() { // nav var navigation = responsiveNav('.js-nav', { customToggle: '#js-nav-btn' }); // 菜单恢复到记忆的高度 if ($menu && sessionStorage.menuScrollTop) { $menu.scrollTop = sessionStorage.menuScrollTop; } // 刷新页面但不切换 pathname 的时候,内容区恢复到记忆的高度 if ($content && sessionStorage.contentScrollTop && window.location.pathname == sessionStorage.locationPathname) { $content.scrollTop = sessionStorage.contentScrollTop; } sessionStorage.setItem('locationPathname', window.location.pathname); } initComponents(); addEvents(); itemAddActive();