# Слайдер горизонтальной загрузки

**URL:** https://meta.discourse.org/t/horizontal-loading-slider/177939
**Category:** Theme component
**Tags:** deprecated
**Created:** [01.Февраль.2021 09:57:32 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939 "2021-02-01T09:57:32Z")
**Posts on this page:** 20
**Page:** 4

<div class="post-metadata">

### Author: ![P16](https://avatars.discourse-cdn.com/v4/letter/p/b19c9b/32.png) [@P16](https://meta.discourse.org/u/P16)
#### Post date: [05.Февраль.2021 00:16:34 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/75 "2021-02-05T00:16:34Z")

</div>

Выглядит отлично, Дэвид! Одно предложение — можно ли сделать так, чтобы полоска продолжала двигаться (возможно, в более медленном темпе), вместо того чтобы останавливаться примерно посередине, даже если она ожидает ответа? Например, она могла бы двигаться медленнее от 40% до 70%, а затем останавливаться, если ответа нет?

Скрытие этой короткой паузы, на мой взгляд, сделало бы процесс более отзывчивым и мгновенным 🙂

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [05.Февраль.2021 00:21:55 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/76 "2021-02-05T00:21:55Z")

</div>

> [@P16](#):
>
> Вместо того чтобы останавливаться примерно посередине, хотя оно всё ещё ожидает ответа? Может быть, оно могло бы двигаться медленнее от 40% до 70%, а затем останавливаться, если ответа нет?

В настоящее время, похоже, оно движется медленнее в течение 5 секунд перед остановкой на 80% ширины.

Здесь я смоделировал очень, очень медленное интернет-соединение:

Текущий SCSS:

```scss
.loading-indicator-container {
  --loading-duration: 5s;
  --loading-function: cubic-bezier(0, 0, 0, 1);
  --done-duration: 0.4s;
  --done-function: ease;
  --fade-out-duration: 0.4s;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1001;
  height: 3px;
  width: 100%;
  opacity: 0;
  transition: opacity var(--fade-out-duration) ease var(--done-duration);
  background-color: var(--primary-low);
}
.loading-indicator-container .loading-indicator {
  height: 100%;
  width: 100%;
  width: 0%;
  background-color: var(--tertiary);
}
.loading-indicator-container.loading {
  opacity: 1;
  transition: opacity 0s;
}
.loading-indicator-container.loading .loading-indicator {
  transition: width var(--loading-duration) var(--loading-function);
  width: 80%;
}
.loading-indicator-container.done .loading-indicator {
  transition: width var(--done-duration) var(--done-function);
  width: 100%;
}
body.discourse-hub-webview .loading-indicator-container {
  top: 1px;
}
body.footer-nav-ipad .loading-indicator-container {
  top: 49px;
}
body.loading #main-outlet {
  opacity: 0.2;
  transition: opacity 0.2s ease;
}

```

---

<div class="post-metadata">

### Author: ![P16](https://avatars.discourse-cdn.com/v4/letter/p/b19c9b/32.png) [@P16](https://meta.discourse.org/u/P16)
#### Post date: [05.Февраль.2021 00:27:45 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/77 "2021-02-05T00:27:45Z")

</div>

Хм, у меня оно застревает примерно на 40%, но, я думаю, движущаяся полоса — даже если медленнее — была бы лучше, чем пауза.

Кроме того, касательно затухания: возможно, плавное исчезновение старого контента и появление нового сделало бы процесс более быстрым (если можно обратиться к outlet для маршрута загрузки)?

---

<div class="post-metadata">

### Author: ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)
#### Post date: [05.Февраль.2021 01:49:10 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/78 "2021-02-05T01:49:10Z")

</div>

Происходит две вещи…

@Canapin прав: начальная анимация завершается через 5 секунд на отметке 80%… поэтому при медленном соединении она застревает на этом месте и не завершится, пока вы не перейдёте на следующую страницу.

Случай @P16 — это то, что я наблюдаю на быстром соединении… как только происходит переход со текущей страницы, анимация на мгновение останавливается в том месте, где она находилась… и через секунду возобновляется на новой странице (здесь я преувеличил высоту полосы, чтобы её было лучше видно).

Я согласен, что идеальным вариантом было бы сохранить непрерывное движение, но это может быть невозможно без полной переделки реализации…

> [@P16](#):
>
> может быть, стоит затемнять старый контент и плавно показывать новый

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

Только что понял, что можно (отчасти) протестировать эффект плавного появления с помощью компонента оглавления (поскольку он плавно показывает пост). Например, посетите: [PostgreSQL 13 update](https://meta.discourse.org/t/postgresql-13-update/172563). Мне не кажется, что это ощущается как более быстрый вариант… но это определённо выглядит «мягче».

---

<div class="post-metadata">

### Author: ![riking](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/riking/32/170938_2.png) [@riking](https://meta.discourse.org/u/riking)
#### Post date: [05.Февраль.2021 07:23:29 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/81 "2021-02-05T07:23:29Z")

</div>

> [@awesomerobot](#):
>
> Я согласен, что идеалом было бы сохранить движение, но это может быть невозможно без полной переделки реализации…

Ооо, я думаю, это происходит потому, что контент _был_ загружен, и произошёл значительный сбой на этапах парсинга HTML, каскадирования стилей, раскладки и рендеринга, в течение которого анимация не могла двигаться.

---

<div class="post-metadata">

### Author: ![Matze](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/matze/32/208654_2.png) [@Matze](https://meta.discourse.org/u/Matze)
#### Post date: [05.Февраль.2021 07:50:29 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/82 "2021-02-05T07:50:29Z")

</div>

```
.loading-indicator-container .loading-indicator, .loading-indicator-container {
    background-color:#FFCC00;
}

```

Я попытался изменить цвет в CSS темы, но он остаётся синим. Кто-нибудь может помочь?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [05.Февраль.2021 09:22:12 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/83 "2021-02-05T09:22:12Z")

</div>

> [@riking](#):
>
> Ооо, я думаю, это происходит потому, что контент _загрузился_, но возникла значительная задержка в процессе парсинга HTML, каскадирования стилей, раскладки и рендеринга, во время которой анимация не может двигаться.

Да, точно. Однопоточная природа рендеринга JS/DOM означает, что мы теряем множество кадров при отрисовке темы 😢. Слайдер «движется» всё это время, просто кадры никогда не отрисовываются.

> [@Canapin](#):
>
> Если кликнуть из вида профиля на логотип Discourse, верхняя часть исчезает, что выглядит странно.

Спасибо. Я только что исправил это [в ядре](https://github.com/discourse/discourse/commit/d1b289daaacb716d32ba4f13322434644293b5b7), так что здесь, на Meta, это исправится очень скоро.

> [@awesomerobot](#):
>
> Я только что понял, что можно протестировать плавное появление (в некотором роде) с помощью компонента оглавления (поскольку он плавно показывает пост), например… посетите: [Обновление PostgreSQL 13](https://meta.discourse.org/t/postgresql-13-update/172563). Мне кажется, это не кажется особенно быстрее… но определённо «мягче».

Я сегодня включу плавное появление на Meta, чтобы мы могли оценить, как это ощущается. Хотя, очевидно, если мы это сделаем, нам нужно будет убрать другие плавные появления, например, компонент оглавления.

Редактирование: сделано. Плавное появление включено на Meta.

> [@Matze](#):
>
> Я попытался изменить цвет в CSS темы, но он остаётся синим. Любая помощь?

В зависимости от порядка загрузки ваших тем/компонентов это может не сработать. Вам нужно сделать селектор «более специфичным», чем CSS компонента индикатора загрузки. Простейший вариант — добавить `!important` к `background-color`. Также вам нужно убрать селектор контейнера, иначе фон будет таким же, как передний план:

```plaintext
.loading-indicator-container .loading-indicator {
    background-color:#FFCC00 !important;
}

```

---

<div class="post-metadata">

### Author: ![P16](https://avatars.discourse-cdn.com/v4/letter/p/b19c9b/32.png) [@P16](https://meta.discourse.org/u/P16)
#### Post date: [05.Февраль.2021 10:31:40 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/84 "2021-02-05T10:31:40Z")

</div>

> [@david](#):
>
> Сегодня я настрою плавное появление на Meta, чтобы мы могли оценить, как это работает. Хотя, конечно, если мы это сделаем, нам нужно будет убрать другие эффекты плавного появления, например, компонент оглавления.
> 
> Редактирование: готово. Плавное появление включено на Meta.

Спасибо, Дэвид, выглядит отлично!

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [05.Февраль.2021 11:39:02 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/85 "2021-02-05T11:39:02Z")

</div>

> [@Falco](#):
>
> Следующий уровень: отслеживание средней длительности запросов

Теперь берётся среднее значение за последние 5 загрузок страницы, и на его основе устанавливается скорость полосы.

---

<div class="post-metadata">

### Author: ![Don](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/don/32/228726_2.png) [@Don](https://meta.discourse.org/u/Don)
#### Post date: [05.Февраль.2021 12:54:36 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/86 "2021-02-05T12:54:36Z")

</div>

Привет, Дэвид,

Этот загрузчик становится всё лучше и лучше 🙂 Продолжай в том же духе.

> [@david](#):
>
> Теперь он вычисляет среднее значение за последние 5 загрузок страницы и использует его для установки скорости полосы.

С этим новым обновлением всё выглядит более динамично 🙂

* * *

Я только что заметил одну вещь в разделе категорий. Я использую кнопку «Создать тему» для переименования. ⬇  
При использовании Loading Slider текст кнопки не обновляется. Я заметил это, так как это может вызвать проблемы с другими скриптами.

> [@Create a new topic button with category and topic template](https://meta.discourse.org/t/how-to-create-a-new-topic-button-with-category-and-topic-template/85775/13?u=dodesz):
>
> Yes, that would also be possible as well. You can use something like this in the header section of a theme component \<script type="text/discourse-plugin" version="0.8"\> const i18nTopicLable = I18n.lookup("topic.create"); api.modifyClass("component:create-topic-button", { didInsertElement: function() { var button = $(this), category = button[0].parentView.get("category"), label = button[0].label, newTopicLabel = "topic.create", buttonText = ""; if (category) { …

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

---

<div class="post-metadata">

### Author: ![Jonathan5](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan5/32/197134_2.png) [@Jonathan5](https://meta.discourse.org/u/Jonathan5)
#### Post date: [05.Февраль.2021 13:00:45 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/87 "2021-02-05T13:00:45Z")

</div>

Плавное появление/исчезновение — это улучшение. Но ползунок всё ещё отвлекает. Я ловлю себя на том, что смотрю на него, из-за чего мне требуется больше времени, чтобы быть готовым читать страницу после её загрузки. С индикатором загрузки всё было проще: он был в одном месте, поэтому легко не обращать на него внимания, а его внезапное появление ассоциируется у меня со скоростью (возможно, ошибочно).

Возможно, на медленных соединениях ползунок предпочтительнее, так как он даёт представление о том, насколько быстро или медленно загружается страница. Насколько это верно — не знаю.

---

<div class="post-metadata">

### Author: ![frold](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/frold/32/82547_2.png) [@frold](https://meta.discourse.org/u/frold)
#### Post date: [05.Февраль.2021 13:14:17 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/88 "2021-02-05T13:14:17Z")

</div>

Для меня при использовании мобильного телефона ползунок расположен в верхней части экрана, тогда как в старой версии он находится ближе к середине экрана, примерно на 30% от верха…

Вместо того чтобы держать взгляд в центре экрана, глаза вынуждены двигаться вверх-вниз, вверх-вниз… просто моё личное мнение…

---

<div class="post-metadata">

### Author: ![Don](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/don/32/228726_2.png) [@Don](https://meta.discourse.org/u/Don)
#### Post date: [05.Февраль.2021 13:22:14 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/89 "2021-02-05T13:22:14Z")

</div>

Я согласен с этим. Думаю, было бы лучше, если бы Loading Slider работал только на настольных компьютерах, а на мобильных устройствах, возможно, оставить спиннер. Спиннер больше напоминает использование приложения, что хорошо для мобильных устройств. Так же, как YouTube использует загрузчики. 🙂

---

<div class="post-metadata">

### Author: ![Jonathan5](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan5/32/197134_2.png) [@Jonathan5](https://meta.discourse.org/u/Jonathan5)
#### Post date: [05.Февраль.2021 13:23:55 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/90 "2021-02-05T13:23:55Z")

</div>

Да, я использовал его на iPhone, поэтому мои комментарии касались именно мобильной версии.

---

<div class="post-metadata">

### Author: ![neounix](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/neounix/32/215617_2.png) [@neounix](https://meta.discourse.org/u/neounix)
#### Post date: [05.Февраль.2021 13:39:02 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/91 "2021-02-05T13:39:02Z")

</div>

Отличная концепция. Я большой поклонник слайдеров по сравнению со спиннерами.

Включил и протестировал на множестве тем (Dark, Alien, Vincent, Star Wars и др.) на мониторах ROG 27" и 34". Слайдер загрузки еле видно — он кажется очень тонким. В тёмных темах тонкая линия имеет слишком мягкий цвет, чтобы её было хорошо заметно.

Также попробовал слайдер на мобильных устройствах: iPhone 6s и iPhone 6+. Аналогичные замечания — еле заметно.

Не хочу быть пессимистом, но объективно говоря, слайдер выглядит многообещающе, но требует дополнительной работы с CSS (на мой взгляд). Поэтому пока мы вернулись к спиннеру на нашем сайте, так как он заметен и чётко передаёт смысл «перезагрузки». Когда у меня будет время, я снова включу слайдер и доработаю CSS для нашего сайта, поскольку он действительно выглядит перспективно!

Выглядит очень многообещающе!

Спасибо и продолжайте в том же духе!

P.S. Проблем со скоростью нет. Я подключён (почти напрямую) к национальной оптоволоконной магистрали через выделенное оптоволокно до основной магистрали.

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [05.Февраль.2021 14:16:24 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/92 "2021-02-05T14:16:24Z")

</div>

Хочу отметить, что мне не очень нравится новое поведение UX при выборе категорий, тем и т.д., когда текущий вид затухает перед загрузкой новой страницы. Мне кажется, что старый подход с пустой страницей и индикатором загрузки был гораздо приятнее.

В любом случае страница меняется дважды. Но поскольку индикаторы загрузки — это универсальный элемент, это не создавало ощущения, что страница меняется дважды. Казалось, что она готовится к изменению, а затем меняется один раз. Теперь же кажется, что она меняется дважды, потому что после обоих переходов остаётся контент: сначала затухший, затем — с новым содержимым страницы. Трудно точно сформулировать, почему мне это не нравится, но, думаю, дело в том, что больше нет универсального экрана загрузки. Теперь фактически существует бесконечное множество разных экранов загрузки, и мне кажется, что эффект затухания перед загрузкой отвлекает, поскольку фоновый контент каждый раз при переходе на новую страницу разный.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [05.Февраль.2021 15:43:17 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/93 "2021-02-05T15:43:17Z")

</div>

> [@Дон](#):
>
> Я только что заметил одну вещь в этой категории. Я использую кнопку «Создать тему» для переименования. ⬇  
> При использовании Loading Slider текст кнопки не обновляется. Я заметил это, потому что это может вызвать проблемы с другими скриптами.

Да, некоторые вещи, использующие хуки `didInsertElement`, потребуют обновления. Со старым спиннером все элементы на странице уничтожались и создавались заново. В новой системе Ember будет переиспользовать элементы, если это возможно. Это _может_ даже немного ускорить рендеринг, но может создать некоторые баги, если кастомизации не следуют стандартным паттернам Ember. Нам придётся проработать и исправить их по мере обнаружения.

Есть ли у вас код ваших кастомизаций в git-репозитории, которым вы могли бы поделиться?

Это основная причина, по которой я хочу поэкспериментировать с этим как с компонентом темы ещё немного — мы сможем выявить как можно больше проблем до того, как внедрим его в ядро.

---

<div class="post-metadata">

### Author: ![Don](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/don/32/228726_2.png) [@Don](https://meta.discourse.org/u/Don)
#### Post date: [05.Февраль.2021 15:46:56 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/94 "2021-02-05T15:46:56Z")

</div>

Конечно, вот репозиторий. Спасибо 🙂

> **[GitHub - VaperinaDEV/category-btn-name](https://github.com/VaperinaDEV/category-btn-name)**
>
> Contribute to VaperinaDEV/category-btn-name development by creating an account on GitHub.

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [05.Февраль.2021 16:28:03 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/95 "2021-02-05T16:28:03Z")

</div>

Кажется, в этой новой функции есть баг на мобильных устройствах (по крайней мере на iPhone). Если выбрать «Последние» из выпадающего меню навигации, то при загрузке страницы меню корректно исчезает. Но если выбрать «Новые» или «Непрочитанные» (возможно, и другие пункты), меню остаётся видимым. Это происходит не всегда, но достаточно часто, чтобы проблему можно было легко воспроизвести. Обратите внимание, что в старой версии это иногда случалось, но только с пунктом «Последние» и никогда с «Новые» или «Непрочитанные».

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [05.Февраль.2021 16:33:38 UTC](https://meta.discourse.org/t/horizontal-loading-slider/177939/96 "2021-02-05T16:33:38Z")

</div>

Спасибо @Don — я попробовал это, и мне кажется, что это более подходящий способ, который должен работать с новым слайдером: [https://github.com/VaperinaDEV/category-btn-name/pull/1](https://github.com/VaperinaDEV/category-btn-name/pull/1) (извините, если я где-то ошибся в венгерском). Такой подход может быть полезен, если другим тоже нужно обновить свои компоненты (используя вычисляемые свойства вместо `didInsertElement` и JQuery).

> [@seanblue](#):
>
> выпадающий список всё ещё виден

👍 добавил в свой список для проверки, спасибо

[Предыдущая страница](https://meta.discourse.org/t/horizontal-loading-slider/177939.md?page=3)

[Следующая страница](https://meta.discourse.org/t/horizontal-loading-slider/177939.md?page=5)
