/* global mixitup, h */ /** * A group of properties defining the mixer's animation and effects settings. * * @constructor * @memberof mixitup.Config * @name animation * @namespace * @public * @since 2.0.0 */ mixitup.ConfigAnimation = function() { mixitup.Base.call(this); this.callActions('beforeConstruct'); /** * A boolean dictating whether or not animation should be enabled for the MixItUp instance. * If `false`, all operations will occur instantly and syncronously, although callback * functions and any returned promises will still be fulfilled. * * @example Example: Create a mixer with all animations disabled * var mixer = mixitup(containerEl, { * animation: { * enable: false * } * }); * * @name enable * @memberof mixitup.Config.animation * @instance * @type {boolean} * @default true */ this.enable = true; /** * A string of one or more space-seperated properties to which transitions will be * applied for all filtering animations. * * Properties can be listed any order or combination, although they will be applied in a specific * predefined order to produce consistent results. * * To learn more about available effects, experiment with our * sandbox demo and try out the "Export config" button in the Animation options drop down. * * @example Example: Apply "fade" and "translateZ" effects to all animations * // As targets are filtered in and out, they will fade between * // opacity 1 and 0 and transform between translateZ(-100px) and * // translateZ(0). * * var mixer = mixitup(containerEl, { * animation: { * effects: 'fade translateZ(-100px)' * } * }); * * @name effects * @memberof mixitup.Config.animation * @instance * @type {string} * @default 'fade scale' */ this.effects = 'fade scale'; /** * A string of one or more space-seperated effects to be applied only to filter-in * animations, overriding `config.animation.effects` if set. * * @example Example: Apply downwards vertical translate to targets being filtered in * * var mixer = mixitup(containerEl, { * animation: { * effectsIn: 'fade translateY(-100%)' * } * }); * * @name effectsIn * @memberof mixitup.Config.animation * @instance * @type {string} * @default '' */ this.effectsIn = ''; /** * A string of one or more space-seperated effects to be applied only to filter-out * animations, overriding `config.animation.effects` if set. * * @example Example: Apply upwards vertical translate to targets being filtered out * * var mixer = mixitup(containerEl, { * animation: { * effectsOut: 'fade translateY(-100%)' * } * }); * * @name effectsOut * @memberof mixitup.Config.animation * @instance * @type {string} * @default '' */ this.effectsOut = ''; /** * An integer dictating the duration of all MixItUp animations in milliseconds, not * including any additional delay apllied via the `'stagger'` effect. * * @example Example: Apply an animation duration of 200ms to all mixitup animations * * var mixer = mixitup(containerEl, { * animation: { * duration: 200 * } * }); * * @name duration * @memberof mixitup.Config.animation * @instance * @type {number} * @default 600 */ this.duration = 600; /** * A valid CSS3 transition-timing function or shorthand. For a full list of accepted * values, visit easings.net. * * @example Example 1: Apply "ease-in-out" easing to all animations * * var mixer = mixitup(containerEl, { * animation: { * easing: 'ease-in-out' * } * }); * * @example Example 2: Apply a custom "cubic-bezier" easing function to all animations * var mixer = mixitup(containerEl, { * animation: { * easing: 'cubic-bezier(0.645, 0.045, 0.355, 1)' * } * }); * * @name easing * @memberof mixitup.Config.animation * @instance * @type {string} * @default 'ease' */ this.easing = 'ease'; /** * A boolean dictating whether or not to apply perspective to the MixItUp container * during animations. By default, perspective is always applied and creates the * illusion of three-dimensional space for effects such as `translateZ`, `rotateX`, * and `rotateY`. * * You may wish to disable this and define your own perspective settings via CSS. * * @example Example: Prevent perspective from being applied to any 3D transforms * var mixer = mixitup(containerEl, { * animation: { * applyPerspective: false * } * }); * * @name applyPerspective * @memberof mixitup.Config.animation * @instance * @type {bolean} * @default true */ this.applyPerspective = true; /** * The perspective distance value to be applied to the container during animations, * affecting any 3D-transform-based effects. * * @example Example: Set a perspective distance of 2000px * var mixer = mixitup(containerEl, { * animation: { * effects: 'rotateY(-25deg)', * perspectiveDistance: '2000px' * } * }); * * @name perspectiveDistance * @memberof mixitup.Config.animation * @instance * @type {string} * @default '3000px' */ this.perspectiveDistance = '3000px'; /** * The perspective-origin value to be applied to the container during animations, * affecting any 3D-transform-based effects. * * @example Example: Set a perspective origin in the top-right of the container * var mixer = mixitup(containerEl, { * animation: { * effects: 'transateZ(-200px)', * perspectiveOrigin: '100% 0' * } * }); * * @name perspectiveOrigin * @memberof mixitup.Config.animation * @instance * @type {string} * @default '50% 50%' */ this.perspectiveOrigin = '50% 50%'; /** * A boolean dictating whether or not to enable the queuing of operations. * * If `true` (default), and a control is clicked or an API call is made while another * operation is progress, the operation will go into the queue and will be automatically exectuted * when the previous operaitons is finished. * * If `false`, any requested operations will be ignored, and the `onMixBusy` callback and `mixBusy` * event will be fired. If `debug.showWarnings` is enabled, a console warning will also occur. * * @example Example: Disable queuing * var mixer = mixitup(containerEl, { * animation: { * queue: false * } * }); * * @name queue * @memberof mixitup.Config.animation * @instance * @type {boolean} * @default true */ this.queue = true; /** * An integer dictacting the maximum number of operations allowed in the queue at * any time, when queuing is enabled. * * @example Example: Allow a maximum of 5 operations in the queue at any time * var mixer = mixitup(containerEl, { * animation: { * queueLimit: 5 * } * }); * * @name queueLimit * @memberof mixitup.Config.animation * @instance * @type {number} * @default 3 */ this.queueLimit = 3; /** * A boolean dictating whether or not to transition the height and width of the * container as elements are filtered in and out. If disabled, the container height * will change abruptly. * * It may be desirable to disable this on mobile devices as the CSS `height` and * `width` properties do not receive GPU-acceleration and can therefore cause stuttering. * * @example Example 1: Disable the transitioning of the container height and/or width * var mixer = mixitup(containerEl, { * animation: { * animateResizeContainer: false * } * }); * * @example Example 2: Disable the transitioning of the container height and/or width for mobile devices only * var mixer = mixitup(containerEl, { * animation: { * animateResizeContainer: myFeatureTests.isMobile ? false : true * } * }); * * @name animateResizeContainer * @memberof mixitup.Config.animation * @instance * @type {boolean} * @default true */ this.animateResizeContainer = true; /** * A boolean dictating whether or not to transition the height and width of target * elements as they change throughout the course of an animation. * * This is often a must for flex-box grid layouts where the size of target elements may change * depending on final their position in relation to their siblings, or for `.changeLayout()` * operations where the size of targets change between layouts. * * NB: This feature requires additional calculations and manipulation to non-hardware-accelerated * properties which may adversely affect performance on slower devices, and is therefore * disabled by default. * * @example Example: Enable the transitioning of target widths and heights * var mixer = mixitup(containerEl, { * animation: { * animateResizeTargets: true * } * }); * * @name animateResizeTargets * @memberof mixitup.Config.animation * @instance * @type {boolean} * @default false */ this.animateResizeTargets = false; /** * A custom function used to manipulate the order in which the stagger delay is * incremented when using the ‘stagger’ effect. * * When using the 'stagger' effect, the delay applied to each target element is incremented * based on its index. You may create a custom function to manipulate the order in which the * delay is incremented and create engaging non-linear stagger effects. * * The function receives the index of the target element as a parameter, and must * return an integer which serves as the multiplier for the stagger delay. * * @example Example 1: Stagger target elements by column in a 3-column grid * var mixer = mixitup(containerEl, { * animation: { * effects: 'fade stagger(100ms)', * staggerSequence: function(i) { * return i % 3; * } * } * }); * * @example Example 2: Using an algorithm to produce a more complex sequence * var mixer = mixitup(containerEl, { * animation: { * effects: 'fade stagger(100ms)', * staggerSequence: function(i) { * return (2*i) - (5*((i/3) - ((1/3) * (i%3)))); * } * } * }); * * @name staggerSequence * @memberof mixitup.Config.animation * @instance * @type {function} * @default null */ this.staggerSequence = null; /** * A boolean dictating whether or not to reverse the direction of `translate` * and `rotate` transforms for elements being filtered out. * * It can be used to create carousel-like animations where elements enter and exit * from opposite directions. If enabled, the effect `translateX(-100%)` for elements * being filtered in would become `translateX(100%)` for targets being filtered out. * * This functionality can also be achieved by providing seperate effects * strings for `config.animation.effectsIn` and `config.animation.effectsOut`. * * @example Example: Reverse the desired direction on any translate/rotate effect for targets being filtered out * // Elements being filtered in will be translated from '100%' to '0' while * // elements being filtered out will be translated from 0 to '-100%' * * var mixer = mixitup(containerEl, { * animation: { * effects: 'fade translateX(100%)', * reverseOut: true, * nudge: false // Disable nudging to create a carousel-like effect * } * }); * * @name reverseOut * @memberof mixitup.Config.animation * @instance * @type {boolean} * @default false */ this.reverseOut = false; /** * A boolean dictating whether or not to "nudge" the animation path of targets * when they are being filtered in and out simulatenously. * * This has been the default behavior of MixItUp since version 1, but it * may be desirable to disable this effect when filtering directly from * one exclusive set of targets to a different exclusive set of targets, * to create a carousel-like effect, or a generally more subtle animation. * * @example Example: Disable the "nudging" of targets being filtered in and out simulatenously * * var mixer = mixitup(containerEl, { * animation: { * nudge: false * } * }); * * @name nudge * @memberof mixitup.Config.animation * @instance * @type {boolean} * @default true */ this.nudge = true; /** * A boolean dictating whether or not to clamp the height of the container while MixItUp's * geometry tests are carried out before an operation. * * To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the * height of the container might affect its vertical positioning in the viewport * (e.g. a vertically-centered container), this should be turned off to ensure accurate * test results and a smooth animation. * * @example Example: Disable container height-clamping * * var mixer = mixitup(containerEl, { * animation: { * clampHeight: false * } * }); * * @name clampHeight * @memberof mixitup.Config.animation * @instance * @type {boolean} * @default true */ this.clampHeight = true; /** * A boolean dictating whether or not to clamp the width of the container while MixItUp's * geometry tests are carried out before an operation. * * To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the * width of the container might affect its horitzontal positioning in the viewport * (e.g. a horizontall-centered container), this should be turned off to ensure accurate * test results and a smooth animation. * * @example Example: Disable container width-clamping * * var mixer = mixitup(containerEl, { * animation: { * clampWidth: false * } * }); * * @name clampWidth * @memberof mixitup.Config.animation * @instance * @type {boolean} * @default true */ this.clampWidth = true; this.callActions('afterConstruct'); h.seal(this); }; mixitup.BaseStatic.call(mixitup.ConfigAnimation); mixitup.ConfigAnimation.prototype = Object.create(mixitup.Base.prototype); mixitup.ConfigAnimation.prototype.constructor = mixitup.ConfigAnimation;