Адаптация документации под мобильные устройства

Всем привет!

Перед нами стояла важная задача - сделать документацию максимально удобной для чтения с мобильного телефона. Мы успешно справились с этой миссией и теперь готовы поделиться опытом.

Введение

Адаптацию приложения на Plex.Vue необходимо начинать с подключения хука useBreakpoint.


const { breakpoint } = useBreakpoint();

Данный хук позволяет реактивно отслеживать изменения разрешения экрана пользователя и производить различные манипуляции с компонентами.

Рассмотрим на примере ниже небольшой шаблон, который при маленьком разрешении будет отображать компонент MobilePage и DefaultPage на остальных разрешениях.


<template>

    <PlexContainer>

        <MobilePage v-if="['xs', 's'].includes(breakpoint)" />

        <DefaultPage v-else />

    </PlexContainer>

</template>

Адаптация меню

Открываем файл src\components\viewport.vue

Для начала создадим массив разрешений в которых хотим скрывать меню.


const mobileBreakpoints = ["xs", "s"];

Скроем основное меню приложения на мобильных устройствах.


<template #left v-if="!mobileBreakpoints.includes(breakpoint)">

    <MainMenu ... />

</template>

В основной тулбар приложения добавим кнопку открытия меню статей, с условием что оно будет отобраться только на мобильных устройствах. Кнопка будет включать/выключать видимость плавающего меню со списком статей.


const menuCollapsed = ref(false);


<PlexButton

    v-if="mobileBreakpoints.includes(breakpoint)"

    :icon-name="menuCollapsed ? 'menu' : 'cancel-m-outline'"

    icon-prefix="plex-system"

    ui="ghost"

    :handler="() => (menuCollapsed = !menuCollapsed)"

/>

Далее размеcтим меню для мобильных устройств в отдельном контейнере, на этом адаптация меню завершена


<PlexContainer v-if="mobileBreakpoints.includes(breakpoint)" :class="{ 'menu': true, 'menu-collapsed': menuCollapsed }">

    <MainMenu ... />

</PlexContainer>

Адаптация разделов статьи

Открываем файл src\components\guide.vue.

Снова создадим массив разрешений в которых хотим скрывать меню.


const mobileBreakpoints = ["xs", "s"];

Скроем основоное меню разделов на мобильных устройствах.


<template #right v-if="headersIsVisible && !mobileBreakpoints.includes(breakpoint)">

    <PlexTreeList ... />

</template>

Добавил новую плашку с кнопками открытия разделов и закрытия самой плашки. При открытии будем отображать дерево со статьями


<div

    v-if="headersIsVisible && mobileBreakpoints.includes(breakpoint)"

    :class="{ chapters: true, 'chapters-expanded': headersExpanded }"

>

    <PlexTreeList

        class="chapters-tree"

        :root="headersRoot"

        :rootVisible="false"

        dataIndex="text"

        :enableCellFocus="false"

        :selectionModel="{ type: 'row', allowDeselect: false, mode: 'single' }"

        @select="onTreeSelect"

    >

        <template #tbar><PlexTypography text="Разделы" type="heading-s" /></template>

    </PlexTreeList>

    <div class="chapters-btn">

        <PlexButton

            ui="ghost"

            icon-name="text-align-left-outline"

            icon-prefix="plex-system"

            size="l"

            v-show="!headersExpanded"

            :handler="() => (headersExpanded = true)"

        />

        <PlexButton

            ui="ghost"

            icon-name="cancel-m-outline"

            icon-prefix="plex-system"

            v-show="headersExpanded"

            size="l"

            :handler="() => (headersExpanded = false)"

        />

    </div>

</div>

Если у вас появились вопросы и комментарии, с удовольствием на них ответим!