首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery window.matchMedia冲突函数

jQuery window.matchMedia冲突函数
EN

Stack Overflow用户
提问于 2018-02-13 06:48:10
回答 1查看 1K关注 0票数 0

很难理解这到底是怎么回事。代码按预期工作,但由于某种原因,当窗口被调整大小,新函数被触发时,旧函数仍然在触发,所以它是一团糟。*-/

我相信还有更好的方法来写这个。我只希望"isMobile“运行时,最大宽度: 1024和"isNotMobile”时,最大宽度大于1024,但只有一个运行,不是同时运行。有更好的方法吗?

代码语言:javascript
复制
$(document).ready(function(){
    $(window).resize(function() {

        var isMobile = window.matchMedia("only screen and (max-width: 1024px)");
        var isNotMobile = window.matchMedia("only screen and (min-width: 1024px)");

        if (isMobile.matches) {
            $('#wpi-page-left').removeClass("active");
            $('#wpi-page-left').addClass("not-active");

            $( '#wpi-page-center' ).click(function(e) {
                var $this = $('#wpi-page-left');
                if ($this.hasClass('active')) {
                    $('#wpi-page-left').removeClass('active');
                    $('#sidebar').removeClass('active');
                    $('#wpi-page-left').addClass('not-active');
                }
            });
            $( '#mobile-toggle-btn' ).click(function(e){
                var $this = $('#wpi-page-left');
                if ($this.hasClass('not-active')) {
                    $('#wpi-page-left').removeClass('not-active');
                    $('#wpi-page-left').addClass('active');
                    $('#sidebar').addClass('active');
                } else if ($this.hasClass('active')) {
                    $('#wpi-page-left').removeClass('active');
                    $('#sidebar').removeClass('active');
                    $('#wpi-page-left').addClass('not-active');
                }
            });
        } else if (isNotMobile.matches) {
            setTimeout(function() {
                $( '#wpi-page-left' ).removeClass( 'active' );
            }, 1000);

            var timer;
            var delay = 350;

            $('#wpi-page-left').hover(function() {
                timer = setTimeout(function() {
                    $('#wpi-page-left').addClass( 'active' );
                    $('#wpi-page-left').removeClass( 'not-active' );
                }, delay);
            }, function() {
                $('#wpi-page-left').removeClass( 'active' );
                $('#wpi-page-left').addClass( 'not-active' );
                clearTimeout(timer);
            });
       }
      $("#dimensions").html($(window).width());
}).resize();

});

更新:

下面是一个显示问题的小提琴:https://jsfiddle.net/hwqegaza/9/

我在小提琴中添加了说明,但基本上加载页面,并在栏上悬停或单击移动版本(取决于加载页面的宽度),现在调整页面大小并尝试使用不同版本的菜单。您将看到这两个版本都在运行。*-/

EN

回答 1

Stack Overflow用户

发布于 2018-02-13 07:17:05

必须将事件侦听器添加到当前窗口的resize事件中,才能使其工作。您的代码意味着,只有当DOM准备就绪时,才执行检查,这就是为什么每次视口宽度发生变化时都需要重新加载。

代码语言:javascript
复制
$(window).resize(function() {
  // your code
  // e.g check the width: console.log($(this).innerWidth());
});
// OR
$(window).resize(() => console.log($(this).innerWidth()))

调整大小的jQuery文档

MDN window.innerWidth文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48760984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档