2013-09-27 3 views
0

Я хочу включить fancybox только в том случае, если нет сенсорного устройства. Это мой код до сих пор:Использование yepnope (относительные пути, css и js)

<script> 
    yepnope([{ 
     test : Modernizr.touch, 
     nope : './js/lib/fancybox/jquery.fancybox.pack.js', 
     callback : { 
      "jquery.fancybox.pack.js": function() { 
       console.log("fancybox loaded!"); 
      } 
     } 
    }]); 
</script> 

Этот код помещается перед тегом закрывающего тега. Я получаю ошибку TypeError: k.apply is not a function, но это мне не помогает.

Мои вопросы:

  • Могу ли я загрузить файл JS с этим относительный путь?
  • Где мой относительный путь? С пути, где лежит епноп?
  • Как я могу условно загрузить JS и CSS-файл?

Update:

Теперь я попробовал другой способ:

<script> 
Modernizr.load([ 
    { 
     test : Modernizr.mq('screen and (max-width: 31.25em)'), 
     yep : { 
      'photoswipe' : ['/js/klass.min.js', '/js/code.photoswipe-3.0.5.min.js'] 
     }, 
     nope : { 
      'fancybox' : ['/js/lib/fancybox/jquery.fancybox.pack.js', '/js/lib/fancybox/jquery.fancybox.css'] 
     }, 
     callback : { 
      'photoswipe': function (url, result, key) { 
       var myPhotoSwipe = $("a.fancy").photoSwipe({ enableMouseWheel: false , enableKeyboard: false }); 
      }, 
      'fancybox': function (url, result, key) { 
       $('a.fancy').fancybox(); 
      } 
     } 
    } 
]); 
</script> 

я получаю следующее сообщение об ошибке TypeError: a.split is not a function. Что я делаю неправильно?

ответ

0

Возможны относительные пути с ./folder/ в начале нет). Вы также не можете использовать ключ с массивом. Либо массив или отдельные клавиши, как показано здесь:

<script> 
    Modernizr.load({ 
     test: Modernizr.mq('screen and (max-width: 31.25em)'), 
     yep: { 
      'photoswipe-klass' : './js/klass.min.js', 
      'photoswipe-js' : './js/code.photoswipe-3.0.5.min.js' 
     }, 
     nope: { 
      'fancybox-js' : './js/lib/fancybox/jquery.fancybox.pack.js', 
      'fancybox-css' : './js/lib/fancybox/jquery.fancybox.css' 
     }, 
     callback: { 
      'photoswipe-js': function (url, result, key) { 
       var myPhotoSwipe = $("a.fancy").photoSwipe({ enableMouseWheel: false , enableKeyboard: false }); 
      }, 
      'fancybox-js' : function (url, result, key) { 
       $('a.fancy').fancybox(); 
      } 
     } 

    }); 
</script> 
1

В: Можно ли загрузить файл js с помощью этого относительного пути?

Да, если у вас есть структура, аналогичная структура:

index.html 
--js/ 
----lib/ 
------modernizr.custom.js 
--------fancybox/ 
----------jquery.fancyboxy.pack.js 

Смотреть следующий ответ, чтобы объяснить это ...

Q: Где начинается мой относительный путь? С пути, где лежит епноп?

Modernizr берет путь с позиции страницы html, а не из положения сценария загрузки modernizr (поскольку он создает ссылку на этот скрипт с этим путем в html).

В: Как я могу условно загрузить JS и CSS-файл?

Pass в массиве Nope вместо одной строки для просто JavaScript:

nope : ['./js/lib/fancybox/jquery.fancybox.pack.js', './styles/fancybox/jquery.fancybox.pack.css']

Возьмите взглянуть на документы, они довольно хорошо на этом ... http://modernizr.com/docs/#load

+0

'modernizr.custom.js' находится на том же уровне, что и мой' lib' папку (где 'fancybox' папка находится в). Поэтому мои пути должны быть в порядке. Я не хочу включать 'yepnope.js' отдельно, потому что я уже включил его с' modernizr'? Итак, 'yepnope' и' Modernizr.load' одинаковы? Я обновил свой вопрос. Я все еще не убегаю. Ты знаешь почему? – testing

+1

Да Modernizr.load вызывает yepnope, так что, по сути, это одно и то же: «Modernizr.load = function() {yepnope.apply (window, []. Slice.call (arguments, 0));}; 'если вы хотите проверить этот материал, я настоятельно рекомендую загрузить версию dev библиотеки, чтобы вы могли видеть источник. Какие ошибки возникают в DevTools (или в зависимости от того, какой вы используете отладочный браузер)? Также обратите внимание, что расположение modernizr.custom.js не имеет отношения к расположению других включенных скриптов, потому что упомянутый путь должен быть указан как со страницы html. –

+0

В моем последнем примере я получаю 'TypeError: a.split не функция 'из' modernizr.custom.js'. Является ли структура из моего кода хорошей? Насколько я понимаю, ключ и обратный вызов должны выполняться при загрузке сценария. – testing

Смежные вопросы