响应式JavaScript:尝试根据媒体查询触发功能

弗拉基米尔

第三天,我试图用JavaScript实现媒体查询。

说函数A()仅在(最小宽度:768像素)时被调用,函数B()仅在(最大宽度:767px)时才能被调用。

这可以通过使用MediaQueryList对象轻松实现。但是浏览器调整大小会出现问题。

  1. 如果页面被加载(最大宽度:767像素),然后将其大小调整为(最小宽度:768像素),则无法调用函数A()。
  2. 如果我尝试在窗口调整大小时调用函数,则函数A()会在单击时触发多次。

我尝试了不同的解决方案:

  • 使用addListener
  • enquire.js
  • setTimeout / clearTimeout- http ://go.shr.lc/1kGNpM6

等等

但是显然我对JavaScript的了解还不足以编写东西。请帮忙

    // Attempt #1  -----------------------------------------------------------------

function responsiveFunction(){
    if(window.matchMedia('(max-width: 767px)').matches) {
        $('.btn').click(function(event) {
            // Knock knock
        });
    }
}

$(function(){
    responsiveFunction();
});

$(window).resize(function(){
    responsiveFunction();
});

// Attempt #2  -----------------------------------------------------------------

function responsiveFunction(mql) {
    if (mql.matches) {
        $('.btn').click(function(event) {
            // Knock knock
        });
    }
}
 
var mql = window.matchMedia('min-width: 768px'); // MQL for MediaQueryList object
 
mql.addListener(responsiveFunction); // Execute responsive function on resize
 
responsiveFunction(mql); // Execute responsive function on load

// Attempt #3  -----------------------------------------------------------------
var smartResize = (function() {
    var timers = {};
    return function(callback, ms, uniqueId) {
        if (!uniqueId) {
            uniqueId = 'Don\'t call this twice without a uniqueId';
        }
        if (timers[uniqueId]) {
            clearTimeout(timers[uniqueId]);
        }
        timers[uniqueId] = setTimeout(callback, ms);
    };
})();


function responsiveFunction() {
    if (window.matchMedia('(min-width: 768px)').matches) {
        $('.btn').click(function(event) {
            // Knock knock
        });
    }
}

// Execute responsive function on load
responsiveFunction();

// Execute responsive function on resize
$(window).resize(function() {
    smartResize(function() {
        responsiveFunction();
    }, 500, 'myUniqueId');
});

// Attempt #4 w enquire.min.js ---------------------------------------------

enquire.register('(min-width: 768px)', {
    match: function() {
        $('.btn').click(function(event) {
            // Knock knock
        });
    }
});
阿尔法

这应该工作:

$(function(){
    $('.btn').on('click', function(event) {
        if(window.matchMedia('(max-width: 767px)').matches) {
            // Only run the code if media query matches
        }
    });
});

click不检查的情况下注册处理程序,max-widthwidth在运行代码之前检查,如果width条件匹配,则运行代码,否则不运行代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

响应式CSS与媒体查询

来自分类Dev

sass mixin响应式媒体查询

来自分类Dev

响应式设计中的媒体查询

来自分类Dev

CSS3媒体查询响应式版本

来自分类Dev

响应式字体媒体查询较少循环

来自分类Dev

带有媒体查询的响应式设计:屏幕尺寸?

来自分类Dev

如何使用媒体查询制作响应式页脚

来自分类Dev

媒体查询-响应式设计中的屏幕,打印,语音

来自分类Dev

Safari媒体查询问题的响应式设计

来自分类Dev

设计和开发响应式网站媒体查询

来自分类Dev

响应式媒体查询在Wordpress中不起作用

来自分类Dev

如何使用媒体查询制作响应式页脚

来自分类Dev

使用网格区域的响应式网格媒体查询

来自分类Dev

媒体查询未触发

来自分类Dev

更改img src以响应媒体查询(CSS或Javascript)

来自分类Dev

有什么理由不在响应式设计中使用通过JavaScript进行的用户代理检测以及媒体查询?

来自分类Dev

媒体查询的Javascript覆盖

来自分类Dev

媒体查询的Javascript覆盖

来自分类Dev

媒体查询-通用响应模板

来自分类Dev

CSS媒体查询无响应

来自分类Dev

图像响应宽度,无需媒体查询

来自分类Dev

使用媒体查询的响应能力

来自分类Dev

媒体查询,表不能响应?

来自分类Dev

根据媒体查询减少混合

来自分类Dev

根据媒体查询应用CSS类

来自分类Dev

jQuery:仅当某些媒体查询为true时才触发功能

来自分类Dev

在响应式设计中的容器之间移动内容(媒体查询,CSS)

来自分类Dev

响应式媒体查询在Google Chrome中不起作用

来自分类Dev

Ionic 4如何使用媒体查询创建响应式应用程序?