patternjavascriptMinor
Changing a single jQuery plugin option on window resize
Viewed 0 times
resizewindowoptionpluginsinglejquerychanging
Problem
I'm looking to change a single jQuery plugin option when the window hits certain breakpoints.
The code below works, however I'm conscious of repeating code and feel there is a more elegant way writing code for examples like this.
My initial thoughts would be to store the first call in a variable.
The code below works, however I'm conscious of repeating code and feel there is a more elegant way writing code for examples like this.
My initial thoughts would be to store the first call in a variable.
$(window).smartresize(function () {
if ( config.wWidth >= 768 && config.wWidth <= 1024 ) {
$('#va-accordion').vaccordion({
accordionW : config.wWidth,
accordionH : config.wHeight,
visibleSlices : 2,
expandedHeight : 600,
expandedWidth : 1000,
contentAnimSpeed : 200
});
} else if ( config.wWidth < 768 ) {
$('#va-accordion').vaccordion({
accordionW : config.wWidth,
accordionH : config.wHeight,
visibleSlices : 1,
expandedHeight : 600,
expandedWidth : 1000,
contentAnimSpeed : 200
});
} else {
$('#va-accordion').vaccordion({
accordionW : config.wWidth,
accordionH : config.wHeight,
visibleSlices : 3,
expandedHeight : 600,
expandedWidth : 1000,
contentAnimSpeed : 200
});
}
});
$(window).trigger("smartresize");Solution
$(window).smartresize(function () {
var chosenSettings;
// We could map out the defaults first.
var defaults = {
accordionW: config.wWidth,
accordionH: config.wHeight,
visibleSlices: 0,
expandedHeight: 600,
expandedWidth: 1000,
contentAnimSpeed: 200
};
// Then, depending on the conditions, create an object of the modifications
// This way, it's easier to add in more differences.
if (config.wWidth >= 768 && config.wWidth <= 1024) {
chosenSettings = {visibleSlices: 2};
} else if (config.wWidth < 768) {
chosenSettings = {visibleSlices: 1};
} else {
chosenSettings = {visibleSlices: 3};
}
// Then use extend to create an object with the chosen settings
var settings = $.extend({}, defaults, chosenSettings);
$('#va-accordion').vaccordion(settings);
// Assuming smartresize returns the same object, we can chain trigger.
}).trigger('smartresize');Code Snippets
$(window).smartresize(function () {
var chosenSettings;
// We could map out the defaults first.
var defaults = {
accordionW: config.wWidth,
accordionH: config.wHeight,
visibleSlices: 0,
expandedHeight: 600,
expandedWidth: 1000,
contentAnimSpeed: 200
};
// Then, depending on the conditions, create an object of the modifications
// This way, it's easier to add in more differences.
if (config.wWidth >= 768 && config.wWidth <= 1024) {
chosenSettings = {visibleSlices: 2};
} else if (config.wWidth < 768) {
chosenSettings = {visibleSlices: 1};
} else {
chosenSettings = {visibleSlices: 3};
}
// Then use extend to create an object with the chosen settings
var settings = $.extend({}, defaults, chosenSettings);
$('#va-accordion').vaccordion(settings);
// Assuming smartresize returns the same object, we can chain trigger.
}).trigger('smartresize');Context
StackExchange Code Review Q#49057, answer score: 4
Revisions (0)
No revisions yet.