Debounce functions (for onResize, onScroll etc)
Source: https://davidwalsh.name/essential-javascript-functions
Eventos custom para debouncear: Transition start / progress / end: https://github.com/nielse63/jquery.transition/ Scrollend: http://nielse63.github.io/jquery.scrollend/ Resizestart: http://nielse63.github.io/jquery.resizestart/ Resizeend: https://nielse63.github.io/jquery.resizeend/
// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
// Usage
var myEfficientFn = debounce(function() {
// All the taxing stuff you do
}, 250);
window.addEventListener('resize', myEfficientFn);
/* · · · · · · ·
Example para equal heights
*/
var bayEqualizeHeights = debounce(function(element) {
var dimMax = 0;
$(element).css('height', 'auto'); //reset heights first to work on resize
$(element).each(function(i) {
var xL = $(this).height();
if (xL > dimMax) {
dimMax = xL;
}
});
$(element).css('height', dimMax);
}, 250);