Можно ли адаптировать следующий jQuery?


Недавно я добавил на свой веб-сайт значок отзывчивой загрузки во время загрузки страницы. За исключением того, что я хотел бы показать изображение во время выполнения функции JavaScript, потому что, если пользователь запустит скрипт во второй раз до завершения первого запроса xmlhttp, он не будет работать должным образом.

$(window).load(function() {
  $(".se-pre-con").fadeOut("slow");
});
.no-js #loader {
  display: none;
}
.js #loader {
  display: block;
  position: absolute;
  left: 100px;
  top: 0;
}
.se-pre-con {
  position: fixed;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  z-index: 9999;
  background: url(images/loader-64x/Preloader_2.gif) center no-repeat #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="se-pre-con"></div>

Есть ли способ изменить jQuery, чтобы он работал лучше для меня? или у вас, ребята, есть совершенно другое решение, которое все равно решит проблему?

Author: Rory McCrossan, 2015-07-16

5 answers

Если я четко понимаю ваши требования, то я думаю, что вы хотите добавить загрузочное изображение перед вашим запросом xmlhttp, и когда работа с запросом будет завершена, он отключится.

Сначала добавьте приведенный ниже код в html-файл

<div id="loadingDiv">
    <div id="popupContact">

    </div>
</div>

Следуйте строкам в вашем css и не забудьте добавить bg.png изображение в папку изображений, которое вы хотите использовать для загрузки изображения

#loadingDiv {
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    display: none;
    position: fixed;
    background: url(../images/bg.png) repeat;
    overflow: auto;
    z-index: 100000;
}

div#popupContact {
    position: fixed;
    left: 48%;
    top: 40%;
    background: url(../images/loading.gif) no-repeat;
    width: 100%;
    height: 100%;
    float: left;
}

Затем добавьте следующие два метода в свой js-файл

//it will show process image
function showProcessImg(){
    $('#loadingDiv').css('display','block');
}
//it will hide process image
function hideProcessImg(){
    $('#loadingDiv').css('display','none');
}

Вызовите функцию showProcessImg() перед вашим httprequest и вызовите hideProcessImg() при успешном или ошибочном обратном вызове httprequest следующим образом

showProcessImg();

    $.ajax({
        url:'',
        method:'POST',
        success:function(response){
            hideProcessImg();
        },
        error:function(){
            //disable loading image
            hideProcessImg();
            alert('Error occur here');
        }
    });
 1
Author: dom, 2015-07-16 11:13:59

Если вы используете это для AJAX. Используйте следующий способ, чтобы показать/скрыть загрузчик.

$(".se-pre-con").show(); // before initiate ajax call
$.ajax({
   url: "test.html",
   context: document.body
}).done(function() {
   $(".se-pre-con").hide();
});
 2
Author: Prashant Kabade, 2015-07-16 11:18:45

Какой-нибудь легкий плагин (2 кб), например https://github.com/jgerigmeyer/jquery-loading-overlay существуют и могут быть использованы следующим образом:

Для начала:

$('#target').loadingOverlay();

И чтобы остановиться:

$('#target').loadingOverlay('remove');

Просто поместите его в свою функцию и не забудьте сделать синхронный вызов , иначе это ничего не будет значить:)

 1
Author: MaximeK, 2015-07-16 10:57:47

Просто создайте наложение div, а затем переключите его свойство display.

Вот скрипка для этого. Обратите внимание, что изображение не требуется, но вам понадобится браузер с поддержкой css3.

#waiting-container {
  position: fixed;
  width: 100%;
  height: 100%;
  z-index: 1130;
  display: hide;
}

#waiting-container #waiting-spinner {
  position: absolute;
  width: 100%;
  height: 100%;
  z-index: 1132;
}

#waiting-spinner .spinner {
  position: absolute;
  left: 50%;
  top: 50%;
  height: 40px;
  width: 40px;
  margin: 0 auto;
  -webkit-animation: rotation .6s infinite linear;
  -moz-animation: rotation .6s infinite linear;
  -o-animation: rotation .6s infinite linear;
  animation: rotation .6s infinite linear;
  border-left: 6px solid rgba(0, 174, 239, .15);
  border-right: 6px solid rgba(0, 174, 239, .15);
  border-bottom: 6px solid rgba(0, 174, 239, .15);
  border-top: 6px solid rgba(0, 174, 239, .8);
  border-radius: 100%;
}

@-webkit-keyframes rotation {
  from {
    -webkit-transform: rotate(0deg);
  }
  to {
    -webkit-transform: rotate(359deg);
  }
}
@-moz-keyframes rotation {
  from {
    -moz-transform: rotate(0deg);
  }
  to {
    -moz-transform: rotate(359deg);
  }
}
@-o-keyframes rotation {
  from {
    -o-transform: rotate(0deg);
  }
  to {
    -o-transform: rotate(359deg);
  }
}
@keyframes rotation {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(359deg);
  }
}

#waiting-container #waiting-overlay {
  position: absolute;
  width: 100%;
  height: 100%;
  background: black;
  opacity: .5;
  z-index: 1131;
}
 1
Author: DevDonkey, 2015-07-16 11:15:35

Все приведенные здесь ответы хороши, но это то, что вы можете попробовать, если вам нужно изображение загрузчика по умолчанию для всех запросов AJAX:

<body>

</body>

<div class="modalLoader"></div>

<script>
$body = $("body");
 $(document).on({
    ajaxStart: function() { $body.addClass("loading");},
     ajaxStop: function() { $body.removeClass("loading");}    
}); 

</script>

.modalLoader {
    display:    none;
    position:   fixed;
    z-index:    1500;
    top:        0;
    left:       0;
    height:     100%;
    width:      100%;
    background: rgba( 255, 255, 255, .8 ) 
                url('../img/loaders/loader.gif') 
                50% 50% 
                no-repeat;
}

body.loading {
    overflow: hidden;   
}

body.loading .modalLoader {
    display: block;
}

Спасибо

 1
Author: Hasan K, 2016-11-02 15:14:49