0

I use spin.js for showing a spinner when loading a new page. Because IE had problems with animating a gif I use this library. Now I found out that it doesn't work on iOS. The spinner is not showing up at all. Tested with:

  • iPhone with iOS 6.1.3
  • iPad with iOS 5.1.1

It is working on every browser for Windows (even Safari for Windows).

Header:

<script type="text/javascript" src="../js/spin.min.js"></script>

before closing body:

<div id ="center" style="position:fixed;top:50%;left:50%"></div>
<script>
    var opts = {
      lines: 13, // The number of lines to draw
      length: 8, // The length of each line
      width: 4, // The line thickness
      radius: 11, // The radius of the inner circle
      corners: 1, // Corner roundness (0..1)
      rotate: 0, // The rotation offset
      direction: 1, // 1: clockwise, -1: counterclockwise
      color: '#000', // #rgb or #rrggbb or array of colors
      speed: 1, // Rounds per second
      trail: 60, // Afterglow percentage
      shadow: false, // Whether to render a shadow
      hwaccel: false, // Whether to use hardware acceleration
      className: 'spinner', // The CSS class to assign to the spinner
      zIndex: 2e9, // The z-index (defaults to 2000000000)
      top: 'auto', // Top position relative to parent in px
      left: 'auto' // Left position relative to parent in px
    };
    var target = document.getElementById('center');
    var spinner = new Spinner(opts);

    $("#select-place input").click(function(){
        spinner.spin(target);
    });
    $(window).bind("load", function() {
        spinner.stop();
    });
</script>

I tried to use another element. Here it works. The problem is position:fixed. I read that iOS 5 does support this. How do I center the spinner in the middle of the screen even on iOS? The page is not expliciitely build for mobile devices. It's mainly a desktop version but it should work for iOS too.

testing
  • 19,681
  • 50
  • 236
  • 417

1 Answers1

0

Because the other solution didn't worked and I won't use a framework I came up with a JS solution. Simply calculate the middle of the screen with JS:

jQuery.fn.center = function () {
    this.css("position","absolute");
    this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight()) / 2) + 
                                                $(window).scrollTop()) + "px");
    this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 2) + 
                                                $(window).scrollLeft()) + "px");
    return this;
}

$('#center').center();

Taken from the answer from Tony in this post.

One disadvantage: The user can scroll away from the spinner. You'd need something which adapts on scrolling as e.g. shown in Fixed positioning in Mobile Safari.

Community
  • 1
  • 1
testing
  • 19,681
  • 50
  • 236
  • 417