在 require.js 调整大小时执行绘图模块
Execute draw module on resize in require.js
我的项目需要按设定顺序在 Javascript 中重新绘制,我正在尝试实施 Require 以加快速度并组织代码。我想做的只是以下内容:
define([
'jquery',
'app/fader', // used to hide the screen on resize
'app/variables', // this is where my window width and height are gathered for all the other modules
'app/mobileNavigationMenu', // setup menu on mobile or desktop
'app/dividerAnimationSetup', // set up animations
'app/initializeSkrollr', // set up skrollr
'app/travelExcursions'], function ($, fader, variables, mobileNavigationMenu, dividerAnimationSetup, initializeSkrollr, navigationLinkHighlighting, travelExcursions) {
return function() {
var redraw = function() {
fader.show(function() {
var previousScrollPosition = $(window).scrollTop(),
skrollrInstance;
if(typeof skrollrInstance !== 'undefined') {
skrollrInstance.destroy();
}
// Run all functions requiring window width and height
mobileNavigationMenu();
dividerAnimationSetup();
skrollrInstance = initializeSkrollr();
navigationLinkHighlighting();
travelExcursions();
skrollrInstance.setScrollTop(previousScrollPosition);
fader.hide();
});
}();
$(window).resize(redraw);
};
});
我在我的主文件中按以下方式调用它:
requirejs(['domReady', 'app/homeBackgroundSlider', 'app/aboutTitleEmphasis', 'app/draw'], function (domReady, homeBackgroundSlider, aboutTitleEmphasis, draw) {
domReady(function () {
homeBackgroundSlider();
aboutTitleEmphasis();
draw();
// $(window).resize(function() { Tried this but it didn't work
// draw();
// });
});
});
也许 require 不能以这种方式工作,但是否有适用于该项目的方法?
所以问题是 RequireJS 会立即加载和执行依赖项,即使使用垫片,它也无法正常工作。我能够修复它的方法是添加 PostalJS and implementing the methodology described in this question。为了解释这个答案,我创建了一个应用程序模块并 returned 了一个 PostalJS 对象。我会在我的绘图和所有其他模块之间传递该对象,然后发布或订阅该应用程序对象。这意味着我的几乎所有模块 return 还没有,但它们仍然需要作为模块的依赖项包含在内,事件将发布到这些模块。我会说这不是一个糟糕的解决方案,因为它允许我控制整个脚本的流程。
我的项目需要按设定顺序在 Javascript 中重新绘制,我正在尝试实施 Require 以加快速度并组织代码。我想做的只是以下内容:
define([
'jquery',
'app/fader', // used to hide the screen on resize
'app/variables', // this is where my window width and height are gathered for all the other modules
'app/mobileNavigationMenu', // setup menu on mobile or desktop
'app/dividerAnimationSetup', // set up animations
'app/initializeSkrollr', // set up skrollr
'app/travelExcursions'], function ($, fader, variables, mobileNavigationMenu, dividerAnimationSetup, initializeSkrollr, navigationLinkHighlighting, travelExcursions) {
return function() {
var redraw = function() {
fader.show(function() {
var previousScrollPosition = $(window).scrollTop(),
skrollrInstance;
if(typeof skrollrInstance !== 'undefined') {
skrollrInstance.destroy();
}
// Run all functions requiring window width and height
mobileNavigationMenu();
dividerAnimationSetup();
skrollrInstance = initializeSkrollr();
navigationLinkHighlighting();
travelExcursions();
skrollrInstance.setScrollTop(previousScrollPosition);
fader.hide();
});
}();
$(window).resize(redraw);
};
});
我在我的主文件中按以下方式调用它:
requirejs(['domReady', 'app/homeBackgroundSlider', 'app/aboutTitleEmphasis', 'app/draw'], function (domReady, homeBackgroundSlider, aboutTitleEmphasis, draw) {
domReady(function () {
homeBackgroundSlider();
aboutTitleEmphasis();
draw();
// $(window).resize(function() { Tried this but it didn't work
// draw();
// });
});
});
也许 require 不能以这种方式工作,但是否有适用于该项目的方法?
所以问题是 RequireJS 会立即加载和执行依赖项,即使使用垫片,它也无法正常工作。我能够修复它的方法是添加 PostalJS and implementing the methodology described in this question。为了解释这个答案,我创建了一个应用程序模块并 returned 了一个 PostalJS 对象。我会在我的绘图和所有其他模块之间传递该对象,然后发布或订阅该应用程序对象。这意味着我的几乎所有模块 return 还没有,但它们仍然需要作为模块的依赖项包含在内,事件将发布到这些模块。我会说这不是一个糟糕的解决方案,因为它允许我控制整个脚本的流程。