2

В настоящее время JQuery отлично работает с RequireJS. Теперь я попытался использовать плагин jScrollPane для JQuery. Этот плагин зависит от плагина mousewheel, поэтому оба должны быть загружены. Поскольку оба плагина поддерживают AMD, это не должно быть большой проблемой.Плагин JScrollPane JQuery с RequireJS

Я попробовал несколько решений, в том числе

require(['jquery.jscrollpane','jquery.mousewheel'], function(JScrollPane) { 
    $(function() 
    { 
     $('.scroll-pane').jScrollPane(); 
    }); 
}); 

и

// At the beginning of main.js 
requirejs.config({ 
    "shim": { 
     "jquery.jscrollpane": ["jquery"], 
     "jquery.mousewheel": ["jquery"] 
    } 
}); 

// Later in another script 
define(["jquery", "jquery.mousewheel", "jquery.jscrollpane"], function($) { 
    $(function() 
    { 
     $('.scroll-pane').jScrollPane(); 
    }); 
}); 

, но ничего не работает. Используя отладчик JavaScript в Chrome, функция обратного вызова никогда не вызывается и не возникает ошибка. Файлы называются jquery.jscrollpane.js и jquery.mousewheel.js и помещаются в ту же папку, что и RequireJS и JQuery.

Также должно быть возможно загрузить плагины только один раз, так как они просто расширяют JQuery, но я не нашел для этого примера.

Что я делаю неправильно?

ответ

1

Поскольку оба плагина поддерживают AMD, вы не должны использовать shim config.

Кроме того, создав снимок ниже, я заметил, что панель прокрутки не работает, если контейнер .scroll-pane имеет только текст и не содержит p элементов.

requirejs.config({ 
 
    paths: { 
 
    'jquery': 'http://code.jquery.com/jquery-2.1.3.min', 
 
    'jquery.mousewheel': 'http://rawgit.com/jquery/jquery-mousewheel/c61913ebf569c7a3f086b7fb40d941c282d1ce48/jquery.mousewheel', 
 
    'jquery.jscrollpane': 'http://jscrollpane.kelvinluck.com/script/jquery.jscrollpane.min' 
 
    } 
 
}); 
 

 

 
requirejs(["jquery", "jquery.mousewheel", "jquery.jscrollpane"], function($) { 
 
    $(function() { 
 
    $('.scroll-pane').jScrollPane(); 
 
    }); 
 
});
.scroll-pane { 
 
    width: 100%; 
 
    height: 100px; 
 
    overflow: auto; 
 
}
<link href="http://jscrollpane.kelvinluck.com/style/jquery.jscrollpane.css" rel="stylesheet" /> 
 
<script src="http://requirejs.org/docs/release/2.1.17/minified/require.js"></script> 
 
<div class="scroll-pane"> 
 
    <p>jScrollPane is designed to be flexible but very easy to use. After you have downloaded and included the relevant files in the head of your document all you need to to is call one javascript function to initialise the scrollpane. You can style the resultant 
 
    scrollbars easily with CSS or choose from the existing themes. There are a number of different examples showcasing different features of jScrollPane and a number of ways for you to get support.</p><p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. 
 
    Mauris convallis venenatis massa, quis consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus eu lacus semper viverra.</p> 
 
</div>

+0

Он работает, спасибо! Я использовал бы 'requirejs ([" jquery.mousewheel "," jquery.jscrollpane "], function() { $ (function() { $ ('. Scroll-pane'). JScrollPane(); }); }); '(который работает), поскольку JQuery уже определен глобально. Могут ли быть какие-либо проблемы с этим? –

+0

Лично мне нравится быть явным в моих зависимостях и не полагаться на глобальные переменные. Если этот модуль изменится в будущем, чтобы больше не нуждаться в этих плагинах, тогда он сломается, поскольку jquery не будет загружен. – ekuusela