Я использую jQuery Mobile и создал что-то, чем-то напоминающее вкладки Android Holo:
Чтобы заставить жест смахивания работать для переключения между вкладками, я добавил следующий код:
$("#myPage #pageTabs").on('swipeleft swiperight', function(e){
e.stopPropagation();
e.preventDefault();
});
$("#myPage").on('swipeleft', function(){
ui.activities.swipe(1);
}).on('swiperight', function(){
ui.activities.swipe(-1);
});
С HTML вкладок, напоминающим:
<div id="pageTabs">
<div class="tab">
<a href="#" data-dayOfMonth="26">Thu</a>
</div>
<div class="tab">
<a href="#" data-dayOfMonth="27">Fri</a>
</div>
<div class="tab">
<a href="#" data-dayOfMonth="28" data-meridian="am">Sat AM</a>
</div>
<div class="tab">
<a href="#" data-dayOfMonth="28" data-meridian="pm">Sat PM</a>
</div>
<div class="tab">
<a href="#" data-dayOfMonth="29">Sun</a>
</div>
</div>
Я прислушиваюсь к жесту смахивания на уровне страницы, потому что div[data-role=content]
иногда может не заполнять экран по вертикали, если для этого недостаточно контента. Если бы я слушал этот div, и он не закрывал экран, а вы прокручивали ближе к низу, событие не срабатывало бы на этом div, оно было бы на корневой странице (div[data-role=page]
).
Вот 3D-рендеринг этой страницы в Firefox для доказательства приведенного выше утверждения. Я прокомментировал div[data-role=content]
:
По этой причине я слушаю его на уровне страницы; но поскольку количество вкладок может прокручиваться за пределы области просмотра (как показано выше: воскресенье находится за пределами экрана справа), я хотел бы, чтобы пользователь также мог прокручивать это по горизонтали. У меня уже работает горизонтальная прокрутка (это просто какой-то простой CSS), но проблема в том, что даже с моим e.stopPropagation()
, показанным выше, жест смахивания всплывает к элементу страницы, а мой жест смахивания препятствует плавной прокрутке, которая был доступен до того, как я добавил жест смахивания.
Я неправильно понимаю, как работает всплытие событий или как его остановить в этом сценарии?
e.target
может помочь? - person Omar   schedule 01.08.2013