...

Отображение на странице компонента Loader

Тема в разделе "Примеры сценариев", создана пользователем vyimova, 31 авг 2023.

  1. vyimova

    vyimova Участник

    Не всегда какие-то операции в системе, например, загрузка данных, выполняются мгновенно. И при этом пользователю не всегда очевидно, есть ли какая-то проблема с работой системы, отображением на странице или же просто нужно подождать какое-то время. Для обозначения пользователю того, что происходит загрузка данных или выполнение какой-либо операции, подойдет компонент Loader (Спиннер загрузки).

    Создадим страницу в разделе или страницу портала. Перейдем в ее конструктор. Создадим виджет-код на странице. В нем пропишем HTML-код с классом для вывода элемента, стили для него, а также JS-код с вызовом функции loadWidget() из клиентского сценария.

    Loader можно задать любой с любым дизайном, например пусть это будет элемент в цветах ELMA. Обязательно пропишем класс loader-wrapper_active и укажем в стилях этого класса opacity и visibility для того, чтобы управлять отображением элемента Loader.
    Код:
    
    <div class="loader-wrapper loader-wrapper_active">
        <
    div class="loader"></div>
    </
    div>

    <
    style>
    .
    loader-wrapper {
      
    positionfixed;
      
    top0;
      
    left0;
      
    width100vw;
      
    height100vh;
      
    backgroundrgba(0000.5);
      
    display: -webkit-box;
      
    display: -ms-flexbox;
      
    displayflex;
      
    opacity0;
      
    visibilityhidden;
      -
    webkit-box-packcenter;
          -
    ms-flex-packcenter;
              
    justify-contentcenter;
      -
    webkit-box-aligncenter;
          -
    ms-flex-aligncenter;
              
    align-itemscenter;
      -
    webkit-transition0.5s;
      -
    o-transition0.5s;
      
    transition0.5s;
    }

    .
    loader  {
      
    animationrotate 1s infinite;
      
    height50px;
      
    width50px;
    }

    .
    loader:before,
    .
    loader:after {
      
    border-radius50%;
      
    content'';
      
    displayblock;
      
    height20px;
      
    width20px;
    }
    .
    loader:before {
      
    animationball1 1s infinite;
      
    background-color#E62D32;
      
    box-shadow30px 0 0 #FABE00;
      
    margin-bottom10px;
    }
    .
    loader:after {
      
    animationball2 1s infinite;
      
    background-color#5082E6;
      
    box-shadow30px 0 0 #5AD2FF;
    }

    .
    loader-wrapper_active{
      
    opacity1;
      
    visibilityvisible;
    }

    @
    keyframes rotate {
      
    0% {
        -
    webkit-transformrotate(0degscale(0.8);
        -
    moz-transformrotate(0degscale(0.8);
      }
      
    50% {
        -
    webkit-transformrotate(360degscale(1.2);
        -
    moz-transformrotate(360degscale(1.2);
      }
      
    100% {
        -
    webkit-transformrotate(720degscale(0.8);
        -
    moz-transformrotate(720degscale(0.8);
      }
    }

    @
    keyframes ball1 {
      
    0% {
        
    box-shadow30px 0 0 #FABE00;
      
    }
      
    50% {
        
    box-shadow0 0 0 #FABE00;
        
    margin-bottom0;
        -
    webkit-transformtranslate(15px,15px);
        -
    moz-transformtranslate(15px15px);
      }
      
    100% {
        
    box-shadow30px 0 0 #FABE00;
        
    margin-bottom10px;
      }
    }

    @
    keyframes ball2 {
      
    0% {
        
    box-shadow30px 0 0 #5AD2FF;
      
    }
      
    50% {
        
    box-shadow0 0 0 #5AD2FF;
        
    margin-top: -20px;
        -
    webkit-transformtranslate(15px,15px);
        -
    moz-transformtranslate(15px15px);
      }
      
    100% {
        
    box-shadow30px 0 0 #5AD2FF;
        
    margin-top0;
      }
    }
    </
    style>

    <
    script>
        $(
    document).ready(function(){
            <%= 
    Scripts%>.renderPage();
        });
    </script>
    Для иллюстрации примера был взят Loader из данного источника.


    В конструкторе страницы перейдем на вкладку «Сценарии». Создадим клиентский сценарий:
    Код:
    
    // объявление необходимых констант и переменных
    declare const consoleany;
    declare const 
    windowany;
    declare const 
    documentany;

    let loaderElany;

    // функция для отображения Loader
    function showLoader(){
        
    loaderEl.classList.add("loader-wrapper_active");
    }
    // функция для скрытия Loader
    function hideLoader(){
        
    loaderEl.classList.remove("loader-wrapper_active");
    }

    // проверка загрузки элемента для вывода данных
    async function renderPage(){
        
    let myInterval window.setInterval(async() => {
            
    loaderEl document.querySelector('.loader-wrapper');
            if (
    loaderEl) {
                
    window.clearInterval(myInterval);
                
    // вызов скрытия элемента Loader через 5 секунд
                
    window.setTimeout(hideLoader5000);
            }
        }, 
    200);
    }
    В этом коде мы сперва проверяем, что все нужные элементы на странице загружены, а далее скрываем Loader после пяти секунд, управляя его отображением через ранее упомянутый класс loader-wrapper_active. При его наличии элемент отображен, при его отсутствии – скрыт.

    Если все настроено правильно, то на странице у нас отобразится Loader, который исчезнет через пять секунд:

    [​IMG]

    Таким образом, можно настроить на странице стенда или портала элемент загрузки.
    Последнее редактирование: 31 авг 2023