【问题标题】:Clear toggle() on different screen size在不同的屏幕尺寸上清除切换()
【发布时间】:2015-02-05 18:58:51
【问题描述】:

我有一个链接,我想在点击时显示更多内容,但仅限于移动屏幕上。我正在使用调整大小和加载功能来确定屏幕大小,但是当我将大小调整为小屏幕然后再调整为大屏幕并单击它仍然切换的链接时,它就像这个取消绑定不能完全工作,或者有时它也会影响链接在小屏幕上,它们完全停止工作:

在这里摆弄:调整屏幕大小以进行测试: http://jsfiddle.net/mp429cp5/1/

$(window).on("load resize", function() {    
if ($(window).width() < 960) {
        $('ul').hide();         
            $('a').bind( "click", function() {
                $('ul').toggle();
                $('ul').toggleClass('collapsed');
                return false;
            });
} else if ($(window).width() > 960) {
        $('a').click(function(){
            $('ul').unbind('click').toggle();
        });             
     }              
});

【问题讨论】:

    标签: jquery responsive-design toggle


    【解决方案1】:

    您可以将 if 屏幕大小放在点击处理程序中,因此如果屏幕大于 960,则执行。这样您就可以避免您尝试执行的取消绑定,并且此代码不会在您每次调整大小时运行。

    对于ul 隐藏/显示,这可以通过媒体查询在 CSS 中完成

    http://jsfiddle.net/mp429cp5/5/

    当宽度 > 960 时,您可能还想为 ul 做一个 .show()

    $(document).ready(function () {
        $(window).on("resize", function () {
            if ($(window).width() < 960) {
                $('ul').hide();
            } else {
                $('ul').show();
            }
        });
    
        $('a').bind("click", function () {
            if ($(window).width() < 960) {
                $('ul').toggle();
                $('ul').toggleClass('collapsed');
            }
            return false;
        });
    });
    
    $(window).on("load", function () {
        if ($(window).width() < 960) {
            $('ul').hide();
        } else {
            $('ul').show();
        }
    });
    

    您实际上应该将调整大小和加载的当前内容放入一个函数中,然后调用它。我只是复制它来告诉你我的意思

    【讨论】:

    • 我应用了你的解决方案,它改进了一点,最后它不再在大屏幕上显示“ul”,但是:如果我调整到全宽并点击一个链接,并且然后将大小调整为小切换不起作用,我必须再次调整大小,然后才能再次起作用。在这两种情况下,我都将“ul”隐藏起来。
    • @yennefer 我不知道你有什么问题。我只是在小提琴上试过它,它工作得很好。制作一个小提琴来演示您的问题,因为如果您直接使用我的代码,那么它应该可以工作
    • $(window).on("load resize" 应该在 jQuery(document).ready(function($){ 里面,还是在外面,还是没关系?
    • @yennefer 有一条评论说将其放入文档中,我将对其进行编辑,以便您更好地理解。点击处理程序和调整大小处理程序在文档内部
    • @yennefer 因为if ($(window).width() &lt; 960) 在点击时检查宽度。处理程序在您单击时运行代码,因此它将获取您单击时的窗口宽度。你现在完全明白了吗?调整窗口大小时,resize 函数运行。单击处理程序在被调用时运行(当您单击时)
    【解决方案2】:

    使用window.screen.availHeightwindow.screen.availWidth 确定屏幕尺寸。

    您可能还希望测试特定于触摸设备的事件(例如window.ontouch)。

    【讨论】:

    • window.screen.availWidth 返回屏幕宽度而不是浏览器宽度
    • @huangism 该操作明确写了屏幕宽度,所以你的评论和你的反对意见似乎相当不合理。
    • 如果您阅读代码,您可以看到 OP 试图实现的目标
    • @huangism 如果您阅读文本,您可以看到操作试图实现的目标。如果您阅读代码,您会发现它是如何失败的。
    • @Huangism 是的,事实上人们总是在调整他们的屏幕大小,只需要一些电缆连接到他们选择的显示硬件或一些软件来镜像他们的手持屏幕。无论如何,操作员的答案选择清楚地表明了他想要什么,所以每个人都很好,你在占卜中得到 A+。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2015-02-28
    • 2015-11-18
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多