Code Monkey home page Code Monkey logo

progress's Introduction

https://origami1024.github.io/progress/

Скрипт - загрузочный скрин. Функциональность:

  • Скрипт добавляет загрузочный скрин показывающий прогресс загрузки
  • Загрузка изображений - таймер проверяет состояние complete всех img на странице
  • Дебаг инфа о том, что учитывается в подсчете прогресса на экране
  • В центре картинка, которая скрывается за свг маской, маска по загрузке уезжает - плавно показывая картинку
  • Браузеры, на которых тестировал:
    1. Работает хорошо: firefox, chrome, chrome mobile;
    2. Работает худо-бедно, с переводом в режим без css анимации, возможно нужны доработки: Microsoft Edge 41
  • Прогресс загрузки состоит из:
    1. кол-ва img элементов, загруженных в dom, с .complete == true
    2. кол-ва загруженных в dom тегов script
    3. documentreadystate

Пример подключения к страничке (В html в head):

<head>
  <link rel="preload" href="assets/img/logo2.svg" as="image">
  <script src="assets/accubar.js"
    data-maskbg="#333333"
    data-picPath="assets/img/logo2.svg"
    data-ghostdur=0
    data-svgw=142
    data-svgh=62
    data-grayscale="true"
    data-cssanim="true"
    data-debug="true"
    data-imgsPerTick=20>
  </script>  
  <link href="assets/accubar.css" rel="stylesheet" />
...
</head>

Конфиг скрипта:

  1. Скрипт нужно помещать перед head
  2. Стили <link href="assets/accubar.css" rel="stylesheet" />
  3. Нужно, чтобы браузер грузил свгшку первой - для этого в HTML в head, нужно добавлять <link rel="preload" href="assets/img/progress_v5.svg" as="image">
  4. Скрипт принимает такие параметры в теге: data-svgw, data-svgh, data-grayscale, data-ghostdur, data-cssanim, data-picPath, data-maskbg, data-debug

Параметры тега скрипт

  • data-svgw - (число), длина или ее пропорция, исходить лучше всего из viewBox главной свгшки
  • data-svgh - (число), высота или ее пропорция, исходить лучше всего из viewBox главной свгшки
  • data-grayscale - (true/false), нужно ли фоновый дубль изображения;
  • data-maskbg - (hex цвет, примеры: #f0f0f0, #f00), цвет фонового дубля изображения, применяемый поверх оригинальных цветов свг составным фильтром;
  • data-ghostdur - (число, пример: 2000), после окончания загрузки и последней анимации, анимация скрытия враппера будет длится столько ms;
  • data-cssanim - (true/false), если true - по прогрессу меняется css переменная, которая указана в transform: translate, что обеспечивает плавную анимацию; если false, то просто двигать координату x в части маски в svg
  • data-picPath - (строка, пример: "assets/img/logo2.svg"), путь к главной свгшке
  • data-debug - (true/false), выводить дебаг-информацию или нет
  • data-imgsPerTick - (1/20/Infinity), параметр, влияющий с одной стороны на плавность инимации, с другой может приводить к лишнему ожиданию, когда всё уже загрузилось

Идеи по доработке:

  • Перевести анимацию на js - возможно добиться лучшей совместимости со старыми браузерами + изменение css походу лишнее, можно напрямую работать со style.transform, не дожидаясь загрузки cssок к тому-же.
  • Добавить текущий фейковый прогресс, продумать как рассчитывать его увеличение и рисовать анимацию прямо из него в requestAnimationFrame
  • Добавить тестовую страничку с 300 изображений поменьше
  • Пересмотреть как лучше делать - .complete с таймером или onload для изображений
  • Сделать код вывода дебага более читабельным
  • Другие опции анимации маски, например: с права на лево, снизу вверх
  • Вариант маски - круг из центра с радиусом 0 в полную картинку
  • Вариант - делать большой блюр и снижать его по загрузке, и вообще разные фильтры
  • Можно сделать с css файлами то же, что сделано со скриптами, но из-за их небольшого веса (относительно картинок или даже скриптов) визуально в прогрессбаре этого не будет заметно, разве что изначально прогрессбар будет уже начинать с дополнительных завершенных процентов.
  • Ajax запросы не реализованы

Другое

Чтобы поменять svg на загрузке нужно в presets (Или лучше задать эти параметры скрипту):
  1. изменить picPath
  2. изменить svgWidth и svgHeight, на ПРОПОРЦИОНАЛЬНЫЕ тем, что в свг viewBox; пропорционально, чтобы свгшка правильно сжималась/растягивалась по ширине и высоте
  3. установить grayscaleBGCopy в нужное значение - true/false

Источники

  1. Pace.js https://github.hubspot.com/pace/. Хорошая библиотека, пытался изначально использовать, взял у них много хороших идей.
  2. Это обсуждение https://stackoverflow.com/questions/14218607/javascript-loading-progress-of-an-image

progress's People

Contributors

origami1024 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.