Polyfill для enquire.js в WordPress

Я пытаюсь использовать Enquire.js в моей установке Wordpress. Я пытаюсь просто нажать левую колонку под центральной колонкой для маленьких экранов.

Я получил его для работы в большинстве браузеров моего ноутбука, но он не работает в старых браузерах Android (2.2), говоря, что он нуждается в polyfill. Я пытался заставить этот polyfill работать, но все еще не получаю функциональность на Android, я все еще получаю предупреждение о matchmedia polyfill в консоли Android.

Пожалуйста, помогите мне точно определить возможные проблемы. В основном, я загружаю пару скриптов в function.php:

function rr_scripts() {
  wp_enqueue_script( 'polyfill', get_stylesheet_directory_uri() . '/js/polyfill.js', array( 'Modernizr' ), '1.0.0', true );
  wp_enqueue_script( 'enquire', get_stylesheet_directory_uri() . '/js/enquire.js', array( 'jquery' ), '1.0.0', true );
  wp_enqueue_script( 'reorder', get_stylesheet_directory_uri() . '/js/reorder.js', array( 'enquire' ), '1.0.0', true ); 
} 
add_action( 'wp_enqueue_scripts', 'rr_scripts' );

Затем в моем дочернем шаблоне есть папка js с несколькими файлами polyfill.js, которые должны заполнить mediamatch (файл media.match.js находится в той же папке):

Modernizr.load([
{
    test: window.matchMedia,
    nope: "media.match.js"
} ]);

reorder.js (ниже), который на самом деле использует enquire.js, который также находится в той же папке:

jQuery(document).ready(function() {
   enquire.register("screen and (max-width: 599px)", {
       match: function() { jQuery('#leftside').insertAfter('#primary'); },
       unmatch: function() { jQuery('#leftside').insertBefore('#primary'); }
   }); 
});

1 ответ

Если я правильно понимаю ваш сценарий, то это может быть связано с проблемой синхронизации, то есть enquire.js загружается до media.match.js. Я не уверен как .wp_enqueue_script() работает, но вы можете попробовать следующее (на основе этого комментария:

Modernizr.load([{
    // First test requirement for .matchMedia() polyfill
    test: window.matchMedia,
    nope: 'media.match.min.js'
  }, {
    // ...and then load enquire.js
    load: 'enquire.min.js',
    complete: function() {
      enquire.register(...);
    }
  }
]);

Примечание: enquire.js не зависит от jQuery.

Другие вопросы по тегам