bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Делегирование событий i-bem. #221

Open kompolom opened 9 years ago

kompolom commented 9 years ago

Задача. Есть такой bemjson

    {
      block:'nav-menu',
      items:[
         {block:'link'},
         {block:'link'},
         {block:'link'},
       ]
    }

По клику на ссылках, нужно прокручивать страницу. Для этого нужно подписаться на клик. Сейчас это сделано так:

BEMDOM.blocks['link'].on(this.domElem,'click', this._scrollto, this);

При этом, отрабатывает обычный клик, потом отрабатывает прокрутка. визуально страница быстро дергается к якорю, возвращается на исходную, и плавно прокручивается. Проблему можно решить подписавшись на DOM событие click. Но, некоторые ссылки могут быть disabled . Ожидается, что по клику на обычной ссылке будет прокрутка, по отключенной, ничего не произойдет. Как совместить эти события не дублируя функциональность блока link? На всякий случай приведу метод _scrollto:

_scrollto: function(e){
    var url = e.target.getUrl();
    var to = $(url).offset().top - this.offset;
    $('html, body').animate( {scrollTop: to}, this.speed );
    return false;
}
Guria commented 9 years ago

e.preventDefault() не поможет?

kompolom commented 9 years ago

@Guria К сожалению, нет. Эффект тот же

Guria commented 9 years ago

Не помешал бы живой пример, чтобы понять что именно у вас происходит

tadatuta commented 9 years ago

@kompolom возможно, подойдет _pseudo?

kompolom commented 9 years ago

@tadatuta спасибо, подошло.