Поддержка изменения хэша URL-адреса iScroll

Это известная проблема для iScroll, и кажется, что это происходит только в iOS5, где меню полностью перестает работать. Все мои подссылки в iScroll являются хеш-якорями. У кого-нибудь есть обходной путь для этого?


person Ian Hoar    schedule 27.11.2012    source источник


Ответы (1)


Я справился с этим, перехватив сами якорные ссылки и заменив их вызовами scrollToElement.

// Hijack hash anchors and scroll to them
$('a').click ( function (e) {
    var id = $(this).attr('href');
    if (id.substr(0,1) == '#') {
        e.preventDefault();
        setTimeout( function() {
            scroller.scrollToElement ( id, 0 );
        }, 0);
        return false;
    } else {
        return true;
    }
});

Этот код должен перехватывать только ссылки, начинающиеся с #. Затем он обрабатывает scrollToElement в setTimeout, что исправляет некоторые другие прерывистые ошибки. Это хорошо работает с моей стороны, если ваши якоря правильно названы с идентификатором. Если вы используете атрибуты name вместо атрибутов id, вам потребуется переписать их.

Этот код скопирует атрибуты name и поместит их в атрибут id, если он пуст. Хотя, скорее всего, вам это не понадобится.

$('a').each (function (i, e) {
    var n = $(e).attr('name');
    var id = $(e).attr('id');
    if ( typeof id == 'undefined' || id === null || id === '') {
        $(e).attr('id', n);
    }
});
person James Tomasino    schedule 24.01.2013