Christopher Fernandes Ответов: 1

Вызовите функцию javascript асинхронно для отображения наложения


У меня есть следующий html-макет

<div class='cm-body'>
<div class='cm-content'>
<div class='cm-item-list'>
<div class='cm-item'><span>somedata</span></div>
<div class='cm-item'><span>somedata</span></div>
<div class='cm-item'><span>somedata</span></div>
<div class='cm-item'><span>somedata</span></div>
</div>
</div>
<div class='cm-overlay'>
<div class='cm-overlay-content-wrapper'>
<div class='cm-overlay-image'><img src='path-to-preloader' class='cm-overlay-preloader-image'></div>
<div class='cm-overlay-text'><span class='cm-overlay-preloader-text'>Please wait Loading data....</span></div>
</div>
</div>
</div>

.cm-overlay{
display:none;
position:fixed;
width:0px;
height:0px;
}

.cm-overlay-hide {
display:none;
}

.cm-overlay-show{
display: block;
position: fixed;
top:0px;
left:0px;
bottom:0px;
right:0px;
opacity:0.8;
background-color: #c5c5c5;
z-index: 100;
width: 100%;
height: 100%;
}

.cm-overlay-content-wrapper{
background-color: #ffffff;
display: block;
position: relative;
min-width: 300px;
min-height: 300px;
margin: 0 auto;
width: 50%;
height: 50%;
top: 10%;
opacity:1;
}

.cm-overlay-image{
display: block;
position: relative;
margin: 0 auto;
height: 65%;
}

.cm-overlay-preloader-image{
display: block;
position: relative;
width: 125px;
top: 50px;
margin: 0 auto;
border:0px;
}

.cm-overlay-text{
display: block;
position: relative;
height: 35%;
}

.cm-overlay-preloader-text{
display: block;
position: relative;
text-align: center;
font-family: Oswald;
font-size: 30px;
}

Я вызываю эту функцию, чтобы либо скрыть, либо показать наложение при щелчке. Но так как он не получает отображается на всех. Я думаю, это потому, что он вызывается в том же потоке.
function toogle_overlay(isShown) 
{
   try 
   {
        var overlay = $(document).find('.cm-overlay');
        if (isShown != undefined && overlay != undefined) 
        {
           if (isShown === true) {
               $(overlay).addClass('cm-overlay-show').removeClass('cm-overlay-hide');
              }
              else
              {
               $(overlay).addClass('cm-overlay-hide').removeClass('cm-overlay-show');
              }
          }
        }
   catch (err) 
   {

   }
}

Когда я нажимаю на кнопку, Я хочу показать наложение до тех пор, пока запрос веб-службы не завершится успешно. При успешном выполнении снимите накладку.
Как мне этого добиться?
Пожалуйста, посоветуйте.

Что я уже пробовал:

Я попробовал XMLHTTPRequest вызвать функцию js асинхронно

Christopher Fernandes

Проблема в том, что между наложением show и hide вызываемая функция имеет время выполнения 0,015 миллисекунды.
Таким образом, переключение отображения и скрытия наложения происходит очень быстро.

Singh Deepika

Для этого вы можете задержать вызов функции в вашем javascript или задержать скрытие и отображение оверлея. Использование метода $(). delay() :-

Ниже приведено лишь одно предложение, которое вы могли бы попробовать :-

если (isShown != неопределенные &ампер;&ампер; верхний слой != не определено)
{
если (isShown = = = true) {
$(наложить).задержка (5000). очередь (функция (следующая) {
$(наложения).добавление('см-верхний слой-показать).removeClass('см-верхний слой-скрыть);
следующий();
});
}
ещё
{
$(наложить).задержка (5000). очередь (функция (следующая) {
$(наложения).добавление('см-верхний слой-скрыть').removeClass('см-верхний слой-шоу');
следующий();
});
}
}


Christopher Fernandes

Я экспериментировал с 200 предметами. Это вообще не видно

1 Ответов

Рейтинг:
1

Singh Deepika

Вы можете использовать атрибут "data-url" div (HTML5). Укажите Url-адрес вашего метода, который извлекает данные/страницу для загрузки в ваш div. Пока запрос не будет обработан, он будет отображать текст - " загрузка..."

См., например, приведенный ниже код :-
в <предварительно&ГТ;&ЛТ;див ИД="Tab4" стиль="дисплей: ни один;"&ГТ;
&ЛТ;див класс="your_class" данные-URL-адрес="@URL-адрес.Действий("Action_Name", "Controller_Name")"&ГТ;
Погрузка...
< / div>
< / div></pre>

И при нажатии кнопки вы можете показать и скрыть div соответственно.

Примечание: - в <предварительно> В@URL-адрес.("Action_Name", "Controller_Name") действий&ЛТ;/пре> есть связанные с MVC. Я не знаю технологии, которую вы используете для своего метода. Вы можете просто указать url-адрес вашей страницы вместо приведенного выше кода.


Christopher Fernandes

Asp.net веб-формы & C#