6

我在尝试编写一些 jQuery 时遇到了很多问题。我需要一个功能始终可用,并且当用户窗口大于设定宽度时,一个功能可用。这是我的功能,都在运行jQuery(document).ready(function($){

下拉菜单功能,仅在窗口大于设置数量时才会出现;

//the dropdown code for desktop users
function largeDropDown(){
    $('#nav ul li').hover(
    //open
    function(){ $(this).find('ul').stop().slideDown(300); },
    //close
    function(){ $(this).find('ul').stop().slideUp(300); }
    );
}

而且这个始终可用,尽管很高兴知道如何使这个也以屏幕尺寸为条件。

//the dropdown code for smaller screens
$('a.menu_trigger').click(openMenu);
function openMenu(e){
    e.preventDefault();
    if($(this).next('ul').hasClass('open_menu')){
        $(this).next('ul').slideUp(300).removeClass('open_menu');
        $(this).html("↓");
    } else {
        $(this).next('ul').slideDown(300).addClass('open_menu');
        $(this).html("↑");
    }

}

使用 CSS 媒体查询,a.menu_trigger当窗口超过 768 像素时隐藏。这样 jQuery 就不会做任何事情(至少这是我试图让它工作的尝试!)

所以,我想知道如何使第一个函数在 768px 以上工作,以及如何在窗口调整大小时调用此功能。任何帮助都会很棒!谢谢。

4

3 回答 3

24

您可以通过执行以下操作来绑定窗口调整大小事件:

$(window).on('resize', function(event){
    // Do stuff here
});

您可以通过执行以下操作获取窗口大小:

var windowWidth = $(window).width();
if(windowWidth > 768){
    // Do stuff here
}

这是一个 jsfiddle 可以看到这一切

小心你在窗口调整大小事件中绑定的内容。当用户自然地调整浏览器大小时,它可能会被执行数十次。繁重的代码会导致糟糕的用户体验。

于 2013-01-24T14:57:41.520 回答
1

这将在您每次执行该函数时检查窗口大小。如果窗口小于 768px,它将随着打开菜单向前移动。如果它大于 768px,它不会做任何事情(去跳跳虎!)。

function openMenu(e){
    if ( $(window).width() < 768 ) {
        e.preventDefault();
        if($(this).next('ul').hasClass('open_menu')){
            $(this).next('ul').slideUp(300).removeClass('open_menu');
            $(this).html("&darr;");
        } else {
            $(this).next('ul').slideDown(300).addClass('open_menu');
            $(this).html("&uarr;");
        }
    } else {
        return false;
    }
}

编辑:想要添加一个我一直用来在特定视口宽度处执行代码的微库;它使您能够利用 JavaScript 中的媒体查询。我建议查看enquire.js

于 2013-01-24T14:57:31.303 回答
0

这个简单的实现只会让它发生一次。测试将被改变。一次高于 1077,一次下降到它。中间没有任何东西。你可以删除第一个警报('test');所以它只会现在发生当高于 1077 并删除第二个以...

var isAbove1077 = $(window).width() > 1077;
        $(window).on('resize', function(event){
            if( $(window).width() < 1077 && isAbove1077){
                isAbove1077 = false;
                alert('test');
            }else if($(window).width() > 1077 && !isAbove1077){
                isAbove1077 = true;
                alert('test');
            }
        });
于 2019-09-19T14:06:38.563 回答