jQuery combine .ready and .resize
Asked Answered
V

4

22

Some (well, nearly all) of my code that is in my jQuery .ready function also applies when the window is resized, as it's layout work. However, since it's the same code, how could I "combine" the two functions, so that my code doesn't repeat itself (and be a mess to maintain)?

Thanks!

Valet answered 13/9, 2011 at 16:3 Comment(0)
T
61
$(document).ready(myfunction);
$(window).on('resize',myfunction);

function myfunction() {
    // do whatever
}

Another technique is to .trigger() one event inside the other:

$(window).on('resize',function() {
    // do whatever
});
$(document).ready(function() {
    $(window).trigger('resize');
});

If you put your code at the bottom of the page to avoid needing $(document).ready, it gets even simpler:

$(window).on('resize',function() {
    // do whatever
}).trigger('resize');
Trucker answered 13/9, 2011 at 16:5 Comment(6)
And even simpler: $(window).resize(function() { //do whatever }).resize();Ahasuerus
@Kudla69 I always prefer writing .trigger('thing') instead of just .thing() in jQuery, just because I find it more clear as a reader.Trucker
you freaken geniusUltramontane
Is there a way to fire off multiple functions within $(document).ready(myfunction);?Carmelocarmen
@Carmelocarmen Yes, create an anonymous function that calls them one by one.Trucker
@Trucker that's exactly what I ended up doing, thank you :)Carmelocarmen
D
13

One more better option

$(window).on("load resize",function(e){
  function abc() {
    // code here
  }
});
Do answered 7/8, 2015 at 20:27 Comment(2)
load works differently from ready otherwise this would work.Hereunto
Just for clarification on UXCODA's comment: load and resize are callback jQuery wrappers for the window DOM object's onload and onresize callbacks (respectively). ready is a jQuery callback that tracks the DOMContentLoaded event. ready would allow for manipulation as soon as the DOM is ready, while window.onload is much later in the lifecycle. If anything is put in this handler that is time-intensive, it will cause the DOM to flicker. api.jquery.com/readyColosseum
L
8

Something like this??

function mySetupFunction() {
    // stuff here.
}

$(document).ready(mySetupFunction);
$(window).resize(mySetupFunction);
Lilt answered 13/9, 2011 at 16:5 Comment(0)
D
0

The following code might be helpful to do things after resize is ready.

var resizeTimer;

$(window).on('resize', function(e) {

  clearTimeout(resizeTimer);
  resizeTimer = setTimeout(function() {

    // Run code here after resizing has done
            
  }, 250);

});

Here is the issue with the following that the code is running while resize is under going.

$(window).on('resize', function(e) {
  // Run code here while resizing is under going
});
Develop answered 11/6, 2021 at 18:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.