4

I load CSS by:

$('head').append('<link rel="stylesheet" href="style2.css" type="text/css" />');

It works, but I have a function that needs to run after the CSS has been applied, and I don't want use setInterval for it.

How can I do this ?

3

2 Answers 2

7

One solution, if you've got access to the css file you're loading,
is to use the transitionend event, and to activate a transition, with duration set to 0.1, from your css.

Like so, you are sure the CSS has been calculated.

style2.css

 body{opacity:1;}

index.html

<style>
    body{transition : opacity 0.1s linear; opacity:.9};
</style>
<body>
   ...
<script>
    document.body.addEventListener('transitionend', function(){
        alert('done');
       }, false);
    $('head').append('<link rel="stylesheet" href="style2.css" type="text/css" />');

Edit:
For the ones that would need a js function (without external files) : https://jsfiddle.net/t0akchuw/

Sign up to request clarification or add additional context in comments.

3 Comments

Hi @Kaiido, I have a question, If in 0.1s the css file can not apply, the transitionend will not be firing. And I can not make sure time to load css file?
I think that transitions are calculated last, can't be sure though but I think it shouldn't occur, does it?
Good one! There's a minor typo I wanted to correct ('transtionend' to 'transitionend') but I can't because it's a change of less than 6 chars.
2

You can use the load event

$('<link />', {
  rel: 'stylesheet',
  ref: 'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.css',
  type: 'text/css',
  onload: function() {
    snippet.log('loaded')
  }
}).appendTo('head')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


Another syntax

$('head').append('<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.css" type="text/css" onload="dosomething()" />');

function dosomething(){
    alert('d')
}

1 Comment

Thanks, but in this case it will be call onload() when sent request, but it not is load css completed

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.