0

I have a running spinner that works with css (class=loading). It is started and stopped via jquery:

Start with: $(".loading").show();

Stop with: $(".loading").hide();

In my application, the start of the spinner is called first. In the browser firefox the spinner is displayed immediately.

<!doctype html>
<html lang="de">

<head>
   <meta charset="utf-8">
   <meta http-equiv="pragma" content="no-cache" />
   <title>Test-Application</title>

   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

   <style>
  /* Absolute Center Spinner */
.loading {
  position: fixed;
  z-index: 999;
  height: 2em;
  width: 2em;
  overflow: show;
  margin: auto;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}

/* Transparent Overlay */
.loading:before {
  content: '';
  display: block;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0,0,0,0.3);
}

/* :not(:required) hides these rules from IE9 and below */
.loading:not(:required) {
  /* hide "loading..." text */
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}

.loading:not(:required):after {
  content: '';
  display: block;
  font-size: 10px;
  width: 1em;
  height: 1em;
  margin-top: -0.5em;
  -webkit-animation: spinner 1500ms infinite linear;
  -moz-animation: spinner 1500ms infinite linear;
  -ms-animation: spinner 1500ms infinite linear;
  -o-animation: spinner 1500ms infinite linear;
  animation: spinner 1500ms infinite linear;
  border-radius: 0.5em;
  -webkit-box-shadow: rgba(0, 0, 0, 0.75) 1.5em 0 0 0, rgba(0, 0, 0, 0.75) 1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) 0 1.5em 0 0, rgba(0, 0, 0, 0.75) -1.1em 1.1em 0 0, rgba(0, 0, 0, 0.5) -1.5em 0 0 0, rgba(0, 0, 0, 0.5) -1.1em -1.1em 0 0, rgba(0, 0, 0, 0.75) 0 -1.5em 0 0, rgba(0, 0, 0, 0.75) 1.1em -1.1em 0 0;
  box-shadow: rgba(0, 0, 0, 0.75) 1.5em 0 0 0, rgba(0, 0, 0, 0.75) 1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) 0 1.5em 0 0, rgba(0, 0, 0, 0.75) -1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) -1.5em 0 0 0, rgba(0, 0, 0, 0.75) -1.1em -1.1em 0 0, rgba(0, 0, 0, 0.75) 0 -1.5em 0 0, rgba(0, 0, 0, 0.75) 1.1em -1.1em 0 0;
}

/* Animation */

@-webkit-keyframes spinner {
  0% {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}
@-moz-keyframes spinner {
  0% {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}
@-o-keyframes spinner {
  0% {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}
@keyframes spinner {
  0% {
    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);
    -ms-transform: rotate(0deg);
    -o-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
    -moz-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
    -o-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}
   </style>


</head>

<body onload="init()">
     <p>Test-Application V1.0</p>   
     <div id="start">
         Start
     </div>
     <br>
     <div id="stop">
         Stop
     </div>
     <div class="loading"></div>
     <div id="log"></div>



   <script>
    function init() {
      $(".loading").hide(); 
    }
    function stop() {
      $(".loading").hide(); 
    }
    $( "#start" ).click(function() {
        $(".loading").show();  
        for (var i = 1000000; i > 0; i--) {
         var text = "";
         text = i.toString();
         document.getElementById("log").innerHTML = text;
        }
        setTimeout( stop, 4000);

     });
      $( "#stop" ).click(function() {
        $(".loading").hide();     

     });
   </script>

</body>

</html>

The display of the spinner in the browser chrome (version 71.0.3578.98) delays 3-5 seconds.

The entire Javascript method runs about 7 seconds. Does anyone have an idea why firefox displays it immediately and chrome late?

Christoph
  • 1
  • 1
  • 8
    Can you show us a working prototype so we can debug it ourselves here? – roberrrt-s Dec 20 '18 at 09:37
  • 1
    You could trigger the animation based on a specific `classname` which is set by default in your `element` and then when the `DOM` is ready remove this `class` – t3__rry Dec 20 '18 at 09:43
  • Some behavior can be different in browsers [you can look here for more info](https://stackoverflow.com/questions/49794209/are-there-any-differences-for-a-browser-between-oss-and-os-versions). But I think it is a code problem. Can you share a [Minimal, Complete, and Verifiable example](https://stackoverflow.com/help/mcve) – TessavWalstijn Dec 20 '18 at 09:46
  • I have written a test application that reflects the problem. – Christoph Dec 20 '18 at 11:38
  • 1
    The resources are in the request – Christoph Dec 20 '18 at 11:44
  • Does somebody has any idea? – Christoph Dec 20 '18 at 20:28

0 Answers0