How to center image in the specific div according to current viewport position?

前端 未结 5 2107
时光说笑
时光说笑 2021-02-14 20:37

I am trying create nice animation during loading content using ajax. I want to use display icon during reloading div with \"Content\", however I can\'t figured out is it possibl

相关标签:
5条回答
  • 2021-02-14 20:43

    This works best for me :)

    function loadNewContent(){
     $(".loaderCont").removeClass("loading")
    }
    
    $(document).ready(function () {
    
     $("#hide_button").on("click", function () {
          $(this).closest(".bottom").toggleClass("left_hided");
          $(".loaderCont").toggleClass("left_hided2");
     });
    
     $("#filter1,#filter2,#filter3,#filter4").on("click", function() {
         $(".loaderCont").addClass("loading");
         setTimeout(loadNewContent, 2000);
     });
    });
    

    CSS:

    .header {
        background-color: Green;
        width: 100%;
        margin-bottom: 20px;
         height: 100px;
    }
    .left {
        background-color: Red;
        float: left;
        width: 100px;
    }
    .left_hided .left{
        margin-left: -85px;
    }
    .right {
        background: Aqua url("http://i.imgur.com/ifyW4z8.png") 50% repeat-y;
        width: calc(100% - 140px);
        float: right;
    }
    
    .left_hided .right{
         width: calc(100% - 55px);
    }
    
    input{
        float:right;
    }
    
    .loaderCont {
        background-color: rgba(255, 0, 0, 0.6);
        height: 100%;
        width: calc(100% - 140px);
        position: fixed;
        right: 0;
        top: 0;
        z-index: -1;
    }
    
    .left_hided2 {
         width: calc(100% - 55px);
    }
    
    #loader {
        background: url(http://i.stack.imgur.com/FhHRx.gif) no-repeat center center;
        position: relative;
        top: calc(50% - 16px);
        left: calc(50% - 16px);
        display: block;
         height: 32px;
         width: 32px;
    }
    
    .loading {
        z-index: 9001;
    }
    

    JSFiddle: http://jsfiddle.net/ZRwzr/1/

    0 讨论(0)
  • 2021-02-14 20:53

    You do not need to do so much of scripting to assign it a position. You can do it with simple css.

    Just make the loader relative to its parent. Assign a height and width and do the following css part.

    .loader{
        position: relative;
        top: -half of the height;
        left: -half of the width;
        margin-top: 50%;
        margin-left: 50%;
    }
    

    works with every device

    0 讨论(0)
  • 2021-02-14 20:55
    .loading #img_loading {
        position: fixed;
        top: 50%;
        left: calc(50% + 55px);
        display: block;
    }
    

    The above will solve the half of the problem, you need to update the left dynamically with javascript.

    0 讨论(0)
  • 2021-02-14 20:56

    use z-index example:-

     <div style="z-index:100;">loading image</div> 
    
    0 讨论(0)
  • 2021-02-14 21:07

    For this to work to your requirements you will need to use JavaScript to determine where the loading image needs to be placed over the visible part using a fixed position div and then reposition it when the user resizes the window or scrolls the window so it is always in the desired position.

    $(window).scroll(function() {
        scrolling();
    });
    
    $(window).resize(function() {
       scrolling(); 
    });
    
    scrolling();
    
    function scrolling() {
        var windowHeight = $(window).height();
        var scrollTop = $(window).scrollTop();
        var offsetTop = $('#thediv')[0].offsetTop;
        var offsetHeight = $('#thediv')[0].offsetHeight;
    
        var offsetWidth = $('#thediv')[0].offsetWidth;
    
        var top = offsetTop - scrollTop;
        top = top < 0 ? 0 : top;
    
        var bottom = (scrollTop + windowHeight) - (offsetHeight + offsetTop);
        bottom = bottom < 0 ? 0 : bottom;
    
        $('.image').css('top', top);
        $('.image').css('bottom', bottom);
        $('.image').css('width', offsetWidth);
    }
    

    Please note that if you change the width of the div you will always need to call the scrolling() function so that it can recalculate the position.

    I also added the loading image as a background image to the fixed div so that we can use CSS to centre it.

    .image {
        position: fixed;
        text-align:center;
        background-image:url('http://i.stack.imgur.com/FhHRx.gif');
        background-repeat:no-repeat;
        background-position:center center;
        background-color:rgba(255,255,255,.4);
    }
    

    Here is the JSFiddle http://jsfiddle.net/QWB9x/89/

    0 讨论(0)
提交回复
热议问题