задний план
При работе над апплетом такси Kuaigou мы столкнулись со следующими проблемами в отношении панели навигации по умолчанию:
- В мобильных телефонах Android и IOS заголовки страниц отображаются несогласованно, а заголовки Android отображаются не по центру.
- Заголовок страницы поддерживает управление стилем только на уровне обычного текста и не может создавать более богатые эффекты заголовка.
- События в левом верхнем углу нельзя отслеживать и настраивать
- Навигация по маршруту одиночная, и она может вернуться только на предыдущую страницу, а возврат страницы глубокого уровня недостаточно дружелюбен
Мы хотим: согласованность заголовков и персонализированное отображение на каждой странице модели, управление событиями кликов в верхнем левом углу и возврат одним нажатием на страницы глубокого уровня.
выполнить
шаг 1 Настроить
Первый шаг — получить контроль над панелью навигации.
Апплет поддерживает пользовательскую панель навигации, просто нужноapp.json
файл,window
конфигурация элемента
"navigationStyle": "custom"
Таким образом, WeChat освобождает панель навигации от контроля и сохраняет только капсулу в правом верхнем углу.
Страница начнется сверхняя часть окнаЗапустите рендеринг, как показано на рисунке
Далее нам нужно реализовать компонент панели навигации и поместить его в положение исходной панели навигации по умолчанию на странице, а содержимое полностью настроить разработчиком.
функциональная точка шага 2
Второй шаг — разобраться с функциональными точками панели навигации.
- Высота панели навигации (динамическая адаптация для каждой модели)
- Настройка содержимого панели навигации
- Названия всех моделей отображаются по центру (реализовано собственной раскладкой)
-
首页
В верхнем левом углу панели навигации отображается персональный центр, в среднем заголовке используется персонализированный значок. -
嵌套页面
верхний левый дисплей返回上一页
+回到首页
кнопка -
非常规首页
верхний левый дисплей回到首页
кнопка
Высота панели навигации состоит из двух частей: панели инструментов и строки заголовка.Высота панели инструментов обычно составляет 20 пикселей, а высоту строки заголовка необходимо рассчитать.
Чтобы настроить содержимое панели навигации, необходимо определить характер текущей страницы и отобразить различный контент в зависимости от разных страниц.Вы можете определить характер текущей страницы, получив стек маршрутизации текущей страницы.
step3 Базовая структура компонента панели навигации
Текущая базовая структура мини-программы такси Куайгоу
// navBar.wxml
<cover-view class='place-holder'></cover-view>
<cover-view class='nav-bar'>
<cover-view class='tool-bar' style='height: 20px'></cover-view>
<cover-view class='title-bar'>
<cover-view class='left-cell'>
// scene0 常规首页 个人中心按钮
// scene1 非常规首页 回首页按钮
// scene2 嵌套页 返回上一页按钮 + 回首页按钮
</cover-view>
<cover-view class='center-cell'>
// scene0 常规首页 个性化title
// scene1 其他页 正常title
</cover-view>
<cover-view class='right-cell'>
// 占位用的
</cover-view>
</cover-view>
</cover-view>
Tips:
- В компоненте есть дополнительный блок-заполнитель, потому что на некоторых страницах есть требования, такие как прокручиваемые списки.Чтобы панель навигации всегда находилась в верхней части области просмотра, вам нужно использовать позиционирование.После позиционирования она отделяется от документа В начале Блок-заполнитель необходим, чтобы гарантировать, что последующее содержимое страницы не будет заблокировано панелью навигации.
- использовать
cover-view
Расположение связано с тем, что в бизнесе Куайгоу есть сходство.map
Собственный компонент , используяview
риск быть заблокированным
шаг 4 расчет высоты
нужно рассчитатьtitle-bar
высота
По умолчанию панель навигации на нижней панели вкладок и без регистра,wx.getSystemInfoSync
Получите информацию о мобильном телефоне, вы можете увидеть две части информации:
-
screenHeight
высота экрана, в пикселях -
windowHeight
Доступная высота окна, в пикселях
В этом случае разница между ними — это высота панели навигации по умолчанию, но после установки"navigationStyle": "custom"
После этого значения обоих одинаковы, поэтому нам нужно использовать эмпирическое значение статистики для высоты панели навигации.
По статистике получаются следующие результаты:
{
'iPhone': 64,
'iPhoneX': 88,
'Android': 68,
'samsung': 72
}
Высота панели инструментов может быть отрегулирована в соответствии сwx.getSystemInfoSync
в возвращаемом значенииstatusBarHeight
Получать.
На этом этапе мы получаем соответствующее значение высоты панели навигации.
// 导航栏总高度 & 占位块高度
placeHoder = totalBar = {
'iPhone': 64,
'iPhoneX': 88,
'Android': 68,
'samsung': 72
}
// 时间、信号等工具栏的高度
toolBar = systermInfo.statusBarHeight
// 页面title栏的高度
titleBar = totalBar - toolBar
шаг 5 Настройка контента
Функции жизненного цикла в компонентахattached
, мы можем получить текущий стек маршрутизации страницы
let pages = getCurrentPages()
let current_page = pages[pages.length - 1].route
const NORMAL_ENTRY = '常规的入口页路径'
// scene 0 常规入口页 个性化title、个人中心
pages.length === 1 && current_page === NORMAL_ENTRY
// scene 1 非常规入口页 回首页
pages.length === 1 && current_page !== NORMAL_ENTRY
// scene 2 嵌套页面 返回 + 回首页
pages.length > 1
Отображение разного контента в зависимости от разных условий
окончательный эффект
сцена 0 Общая Главная
сцена 1 нетрадиционная домашняя страница
сцена 2 вложенные страницы
В настоящее время 99 % моделей в производственной среде могут работать безукоризненно.
напиши в конце
- Настраиваемая панель навигации действует глобально. После настройки каждую собственную страницу апплета необходимо импортировать.
- В настоящее время версия микроканала 7+ поддерживает настраиваемую панель навигации для конкретной страницы, которую можно настроить в соответствии с индивидуальными потребностями.
- Пользовательская панель навигации не работает на веб-страницах
- Я попытался сделать панель навигации плагином, но столкнулся с проблемой, что стек маршрутизации страниц не мог быть получен в компоненте плагина, поэтому это было неудачно.