【问题标题】:How to do an element that is toggable on small screen sizes but always visible on big如何做一个在小屏幕尺寸上可切换但在大屏幕尺寸上始终可见的元素
【发布时间】:2017-04-06 16:50:59
【问题描述】:

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

行为应该(基本上)与 demo here 完全一样。

步骤如下:

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

要实现这一点很容易:

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

我现在的问题是我想为这个节目制作动画并隐藏,但我无法使用类切换来做到这一点。

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

如果您现在转到小屏幕尺寸,隐藏菜单并增大窗口尺寸,menu 将不会出现,因为 hide() 函数。

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

那么我怎样才能让这个切换类带有动画或使用 js 而不使用 resize 方法呢?

【问题讨论】:

  • 想象一下动画菜单切换中的用户体验
  • 使用限制调整大小,如jsfiddle.net/cowboy/cTZJU ...它对性能影响很小甚至没有,这里有很好的解释:davidwalsh.name/javascript-debounce-function
  • 为了获得最佳性能,请将您的窗口大小检查连接到浏览器调整大小的末尾,而不是每个阶段。
  • 您可以在媒体查询中使用input-labelfocus 输入状态,以更接近可行的解决方案。

标签: javascript jquery css media-queries


【解决方案1】:

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

此代码有效,它仅在窗口调整大小事件结束后运行 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>

【讨论】:

  • 有没有办法解决这个问题?我知道这种技术,但我不想使用它。
  • 这是解决您所描述的窗口调整大小性能问题的方法。它只在最后检查,而不是每次更改。
  • 你没有投票,但我现在不会接受你的回答,因为我宁愿没有那么多 js 行来完成这样一个微不足道的任务,如果这是唯一的方法,我会稍后接受您的回答,谢谢!
  • 您的任务需要一个只有 css 无法处理的切换事件。但是,如果您放弃该要求,您所需要的只是媒体查询。
猜你喜欢
  • 1970-01-01
  • 2017-12-03
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2022-12-15
相关资源
最近更新 更多