使用JS為網頁制作菜單
corepress主題,在文章中允許顯示菜單,如圖。
并且點擊標題能實現跳轉到文章指定的標題位置,同時文章目錄菜單的標題會顯示當前標題顏色
下面記錄一下如何制作的。
枚舉標題
通過JQuery,枚舉文章內容中的h2標簽,并且給標簽打上自定義熟屬性。
并且,給目錄面板生成目錄標題
$(".post-content h2").each(function () {
$(this).attr('catalog', 'catalog-h2-' + i);
$('#post-catalog-list').append('<p catalog="' + 'catalog-h2-' + i + '" class="catalog-item" onclick="go_catalog(' + "'catalog-h2-" + i + "'" + ')">' + $(this).text() + '</p>');
i++;
});
點擊目錄p標簽,執行指定方法go_catalog,方法如下
本方法通過查詢文章自定義屬性的標題,并且獲取標題在文章中的位置,通過animate方法,實現滾動條移動
function go_catalog(catalogname) {
var _scrolltop = $('h2[catalog=' + catalogname + ']').offset().top;
$('html, body').animate({
scrollTop: _scrolltop - 60
}, 500
);
}
實現選中顏色
上述代碼已經能實現文章跳轉了,非常簡單,如何實現對應文章目錄著色比較麻煩。
滾動的時候,瀏覽器有滾動事件,我們可以通過判斷第一個元素是否在可視區域內,來實現顏色作色。
下面代碼實現了作色功能,首先執行set_catalog_css方法,去除鏈接所有選中顏色。
然后再瀏覽器滾動事件中,判斷第一個標簽第一個是否在一個區域內,只要在0-160中,說明已經滾動到了標題位置,進行修改css作色
$(document).scroll(function () {
if ($('#post-catalog').css('visibility') != 'visible') {
return;//判斷目錄面板是否可視,不可視則不執行下方代碼,免得浪費性能
}
$(".post-content h2[catalog]").each(function () {
var el_y = this.getBoundingClientRect().y;
if (el_y < 160 && el_y > 0) {
var name = $(this).attr('catalog');
set_catalog_css();
$('p[catalog=' + name + ']').css('color', ' var(--MaincolorHover)');
return;
}
});
});
function set_catalog_css() {
$('p[catalog]').css('color', 'unset');
}
版權聲明:
作者:applek
鏈接:http://www.yydfqli.cn/jsmenu.html
文章版權歸作者所有,未經允許請勿轉載。
THE END