我有一个脚本,它可以减少我的菜单,如果有太多的菜单项,可以添加一个“+”下拉列表,以美化长菜单,例如:
在不运行脚本的情况下:
我打电话进来
functions.php
使用:
function _s_scripts() {
wp_enqueue_script( \'main\', get_template_directory_uri() . \'/js/main_res.js\', array( \'jquery\' ), \'\', false );
}
add_action( \'wp_enqueue_scripts\', \'_s_scripts\' );
不幸的是,这会导致执行延迟和锯齿状。是否有任何方法可以将此脚本挂接到“一旦生成X部件(菜单)”,执行此操作?
对于用户来说,效果非常明显:
https://imgur.com/aoFcYKe
这是脚本,仅供测试之用,
main_res.js
:
function sliceMenu(desired_len) {
var menu_len = document.querySelectorAll(\'#primary-menu > li\').length;
if (menu_len > desired_len) {
var append_menu_el = document.createElement(\'div\');
append_menu_el.innerHTML = (\'<div id="js-cover-menu"><img class="plus" src="$PATH/svg/plus_menu.svg" alt="more-menu"></div>\').replace(\'$PATH\', ABSPATH);
document.getElementById(\'primary-menu\').parentNode.appendChild(append_menu_el);
let diff = menu_len - desired_len;
let sliced_lis = [...(document.querySelectorAll(\'#primary-menu > li\'))].slice(-diff);
var js_menu_el = document.createElement(\'ul\');
js_menu_el.setAttribute(\'id\', \'js-cover-menu-dropdown\');
document.getElementById(\'js-cover-menu\').appendChild(js_menu_el);
js_cover_menu_el = document.getElementById(\'js-cover-menu-dropdown\');
for(var i = 0, length = sliced_lis.length; i < length; i++) {
js_cover_menu_el.appendChild(sliced_lis[i]);
}
document.querySelectorAll(\'#js-cover-menu-dropdown > li > ul\').forEach(node => node.remove());
} else {
return;
}
}