我有一个JavaScript(jQuery),我在我的WordPress网站上运行。如果屏幕宽度低于1024像素,我只想加载脚本。仅在桌面版网站上加载JavaScript的最佳方式是什么?
原因是因为它与顶部导航菜单的功能有关。我只希望在屏幕宽度低于1024像素时加载此脚本,因为在此之下的任何内容都将具有完全不同的菜单样式/功能。
当然,我的CSS文件中有很多媒体查询以最小宽度改变设计:1024px。
我发现了几种方法来做到这一点,我只是想确定什么是最好的办法。
这是我目前的JavaScript文件的副本:
function accordion_menus(){
// if we are not on mobile (menu icon is hidden) show sub items and bail
console.log('debug: start');
if (jQuery('#primary-navigation .menu-toggle').is(':hidden')){
console.log('debug: yes, it is hidden');
// show sub menus
$('#primary-navigation ul.nav-menu ul.sub-menu').show();
return;
} else{
// hide sub menus
$('#primary-navigation ul.nav-menu ul.sub-menu').hide();
}
// top level nav click function
$('#primary-navigation ul.nav-menu > li > a').click(function(e){
// store parent li to variable
var parent_li = $(this).parent('li');
// if sub menu does not exist in parent li
if (!$('ul.sub-menu', parent_li).first().length) {
return;
}
// if sub menu is already active, bail
if (parent_li.hasClass('sub-menu-active')){
parent_li.find('ul').slideUp(100, function(parent_li){
});
parent_li.removeClass('sub-menu-active');
return false;
}
// stop link click
e.preventDefault();
// store current sub menu in variable
var current_submenu = $('ul.sub-menu', parent_li).first();
// slide up non-current sub menus
$('#primary-navigation').find('ul.sub-menu').not(current_submenu).slideUp(function(parent_li){
// remove sub-menu-active class from all first level items except current parent li
$('#primary-navigation').find('li').not(parent_li).removeClass('sub-menu-active');
});
// slide down current sub menu
current_submenu.slideDown(100, function(){
// add sub-menu-active to current parent li
parent_li.addClass('sub-menu-active');
});
});
// second level nav click function
jQuery('#primary-navigation ul.nav-menu ul.sub-menu > li > a').click(function(e){
// store parent li to variable
var parent_li = jQuery(this).parent('li');
// if sub menu does not exist in parent li
if (!jQuery('ul.sub-menu', parent_li).first().length) {
return;
}
// if sub menu is already active, bail
if (parent_li.hasClass('sub-menu-active')){
parent_li.find('ul').slideUp(100, function(){
// remove sub-menu-active class from all first level items except current parent li
});
parent_li.removeClass('sub-menu-active');
return false;
}
// stop link click
e.preventDefault();
// store current sub menu in variable
var current_submenu = jQuery('ul.sub-menu', parent_li).first();
// slide up non-current sub menus
jQuery('#primary-navigation ul.nav-menu ul.sub-menu > li > ul.sub-menu').not(current_submenu).slideUp(function(){
// remove sub-menu-active class from all second level items except current parent li
jQuery('#primary-navigation ul.nav-menu ul.sub-menu > li').not(parent_li).removeClass('sub-menu-active');
});
// slide down current sub menu
current_submenu.slideDown(100, function(){
// add sub-menu-active to current parent li
parent_li.addClass('sub-menu-active');
});
});
}
// load menu accordion on doc ready
jQuery(document).ready(function($) {
accordion_menus();
});
// load menu accordion on window resize
jQuery(window).resize(function(){
accordion_menus();
});
如果我在ipad风景(1024w)上加载页面,然后将其旋转到肖像(768w),该怎么办? – dandavis
使用一个脚本检查宽度然后决定是否执行其工作更容易。然后脚本可以订阅窗口大小的变化,甚至可以适应变化的宽度。 – jfriend00
那么,对于我的网站,它仍然保留了一个移动样式的导航(顶部有一个小菜单按钮,当你点击它时打开一个菜单)直到768像素。任何1024像素及以上的像素都会切换到完全打开的桌面风格导航。 因此,我脑海中的那个脚本应该只加载在1024像素以下的宽度中,在这个宽度下,需要该脚本才能使移动样式导航正常工作。 – DigitalSky