Клиентский роутинг позволяет управлять состоянием веб-приложения без перезагрузки страницы, используя изменения URL или хэша. В отличие от серверного роутинга, где каждый запрос обрабатывается на сервере, клиентский роутинг динамически загружает контент и обновляет DOM, обеспечивая плавный пользовательский опыт.
В Zepto.js нет встроенной системы роутинга, как в Angular или React,
поэтому реализация опирается на работу с событием
hashchange, управлением URL через
location.hash и обработку переходов вручную.
Хэш в URL начинается с символа # и используется для
идентификации состояния приложения. Основные методы для работы с
хэшами:
// Получение текущего хэша без #
var currentHash = window.location.hash.slice(1);
// Установка хэша
window.location.hash = 'home';
Изменение хэша не вызывает перезагрузку страницы, что делает его идеальным для клиентского роутинга.
Zepto.js предоставляет событие hashchange, которое
срабатывает при изменении хэша:
$(window).on('hashchange', function() {
var hash = window.location.hash.slice(1);
handleRoute(hash);
});
Функция handleRoute отвечает за переключение состояния
приложения в зависимости от текущего хэша.
Для упрощения работы с роутингом часто создают объект маршрутов:
var routes = {
home: function() {
$('#content').html('<h1>Главная страница</h1>');
},
about: function() {
$('#content').html('<h1>О сайте</h1>');
},
contact: function() {
$('#content').html('<h1>Контакты</h1>');
}
};
Обработка маршрутов через объект позволяет легко добавлять новые страницы:
function handleRoute(route) {
if(routes[route]) {
routes[route]();
} else {
routes['home']();
}
}
Для корректной работы роутинга нужно обработать текущий хэш при загрузке страницы:
$(function() {
var initialHash = window.location.hash.slice(1) || 'home';
handleRoute(initialHash);
});
Это гарантирует, что при прямом переходе на URL с хэшем отображается соответствующий контент.
Для управления переходами внутри приложения удобно использовать ссылки с хэшем:
<a href="#home">Главная</a>
<a href="#about">О сайте</a>
<a href="#contact">Контакты</a>
Zepto.js автоматически отлавливает изменения хэша через
hashchange, поэтому дополнительные обработчики на клики не
обязательны.
// Пример: #profile/123
$(window).on('hashchange', function() {
var hash = window.location.hash.slice(1).split('/');
var route = hash[0];
var param = hash[1];
if(route === 'profile') {
$('#content').html('<h1>Профиль пользователя ' + param + '</h1>');
}
});
window.history для навигации без хэша:// Добавление состояния в историю
window.history.pushState({page: 'home'}, 'Главная', '/home');
// Обработка события popstate
$(window).on('popstate', function(event) {
var state = event.originalEvent.state;
if(state) {
handleRoute(state.page);
}
});
function fadeContent(html) {
$('#content').fadeOut(200, function() {
$(this).html(html).fadeIn(200);
});
}
pushState для
улучшения SEO и контроля истории.Клиентский роутинг в Zepto.js является легковесным и гибким решением для SPA, позволяя управлять страницами через хэши, динамически обновлять контент и интегрировать анимации без громоздких библиотек.