javascript - 如何制作一个在小屏幕上可切换但在大屏幕上始终可见的元素

标签 javascript jquery css media-queries

我想要一个在小屏幕尺寸下可切换且在中等尺寸屏幕上始终可见的菜单。

行为应该(基本上)完全像这样demo here .

步骤是:

  • 转到小屏幕尺寸(直到 body 轮廓变成金色)
  • 检查它是否可切换
  • 当菜单被隐藏并且屏幕尺寸变大时,菜单应该出现
  • 当菜单未隐藏时,转到更大的屏幕尺寸,它应该保持显示状态
  • 在大屏幕上,元素被隐藏时,您应该可以看到它,但是当您拖动到较小的屏幕时,它应该被隐藏
  • 在大屏幕上,元素未隐藏时,您应该会看到它,但当您拖动到较小的屏幕时,它应该会隐藏

要实现这一点非常容易:

$(".click").click(function() {
  $(".menu").toggleClass("hidden-md-down");
});

我现在的问题是,我想为这个显示和隐藏设置动画,但我无法通过类切换来实现。

所以我不得不依赖例如slideToggle()这就是我的问题所在,请参阅 demo here .

如果您现在转到小屏幕尺寸,隐藏菜单并使窗口尺寸变大,由于 hide() 函数,菜单 将不会出现。

我知道这可以通过 $(window).resize 来解决,但我绝对不想要该解决方案,因为对于这么小的功能来说,它的性能很糟糕。

那么我怎样才能让这个切换类带有动画或者在没有调整大小方法的情况下用 js 来实现呢?

最佳答案

我已将我的评论放入一个答案中:“为了获得最佳性能,请将窗口大小检查仅连接到浏览器调整大小的末尾,而不是每个阶段。”

此代码有效,它仅在窗口调整大小事件结束后运行 0.5 秒,而不是在此期间运行(性能更好)。运行整个页面的代码并挤压浏览器窗口以查看它的运行情况。

您可以选择运行菜单切换或停用它,而不是发送文本值#width 和#height;为此,我会删除您最初用来激活菜单的 js 类。

并使您的菜单成为无序列表,并使用 css 将其设置为在桌面上内联,在移动设备上设置为非元素符号列表。

$(window).resize(function() {
    if(this.resizeTO) clearTimeout(this.resizeTO);
    this.resizeTO = setTimeout(function() {
        $(this).trigger('resizeEnd');
    }, 500);
});

$(window).bind('resizeEnd', function() {
    var widthReport = $("#width").text($(this).width());
    var heightReport = $("#height").text($(this).height());
    
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div id="width"></div>
<div id="height"></div>

关于javascript - 如何制作一个在小屏幕上可切换但在大屏幕上始终可见的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43249094/

相关文章:

javascript - 将组合键检测定位到 DOM 的特定事件部分

css - 如何使用css选择li中的文本

javascript - 选择表行并插入到表单 Javascript

javascript - selectBox 中的 jquery 移动选项未正确呈现

javascript - getImageURI() 不适用于 orgchart by google

javascript - 导航栏内的文本/ Logo 似乎在滚动时摆动/振动

javascript - 我们如何在javascript中的正则表达式中的替换函数中添加一个值

javascript - 为什么后退按钮不显示在第二个屏幕上?

javascript - 使用 jquery 添加一些代码到元素

javascript - Ajax post 工作一次然后再次工作但不是异步的