Приём «показать все»

Распространённый приём: когда есть неизвестное, но потенциально большое количество элементов (например, результатов поиска), показывать топ-N и кнопку «показать все».

Показать все

Самый большой облом для пользователя: жмёшь на «показать все», и обнаруживаешь, что элементов всего и было N штук, то есть ничего нового ты не увидел.

Идеальный вариант — точно знать общее количество элементов, и сообщить пользователю. Но посчитать все элементы может быть вычислительно «дорого».

Есть алгоритм, который решает проблему. Я сначала покажу на примере, а потом напишу общее правило.

Пусть есть виджет с результатами поиска, в котором показываем 3 наиболее релевантных результата и кнопку «показать все». При этом места на экране мало, в виджете можем уместить:

  • 3 результата + кнопку,
  • или 4 результата без кнопки.

Решение: вместо топ-3 попробуем запросить у сервера топ-6, и дальше:

  1. Если нашлось 4 или меньше результатов, просто покажем их, без всяких кнопок:
Показать без кнопки
  1. Если нашлось 5 результатов, покажем топ-3 и кнопку с конкретным «остатком»:
Показать с остатком
  1. Наконец, если нашлось 6 результатов (это значит, что их может быть и больше), покажем топ-3 и кнопку «показать все»:
Показать все

⌘ ⌘ ⌘

Теперь общее правило:

  1. Вместо N запрашивать 2N элементов.
  2. Если нашлось X ≤ 1,5N элементов — показать все без кнопки.
  3. Если нашлось 1,5N < X < 2N — показать N и кнопку с остатком.
  4. Если нашлось ровно 2N — показать N и кнопку «показать все».

P. S. Спасибо Саше Кириллову за замечания.

Заметка из телеграм-канала «Интерфейсы без шелухи»