Я не могу сделать слушатель события внутри конструктора объекта для прослушивания - PullRequest
1 голос
/ 09 июня 2019

Когда я прокручиваю div, в основном ничего не происходит.Метод slideIt запускается один раз, когда объект инициируется, и это все.Это не прослушивание события прокрутки!любая причина, почему это случилось?

function fixed_column_or_row(container_name){
    this.container_div=$(container_name);

    this.scrollable_div=this.container_div.find(".simplebar-content-wrapper");
    this.fixed_row=this.container_div.find(".fixed-row")
    this.fixed_column=this.container_div.find(".fixed-column")

    //the issue in this line
    this.scrollable_div.scroll(this.slideIt())

}

fixed_column_or_row.prototype.slideIt=function(){
     var scrollTop      = this.scrollable_div.scrollTop(),
     scrollLeft      = this.scrollable_div.scrollLeft();
     console.log("scrollTop")
     this.fixed_row.css({
         "margin-left": -scrollLeft
     });

     this.fixed_column.css({
         "margin-top": -scrollTop
      }); 

}

1 Ответ

0 голосов
/ 09 июня 2019

Распространенной ошибкой JavaScript является ввод функции , вызывающей , когда требуется ссылка на функцию (обычно для настройки обработчика событий, но есть и другие подобные случаи).

Таким образом

  this.scrollable_div.scroll(this.slideIt());

вызовет , вызовет функцию this.slideIt() и передаст возвращаемое значение методу .scroll, и это явно не то, что нужно. () после this.slideIt это то, что вызывает это, поэтому this.slideIt без () необходимо.

Теперь, когда это сделано, следующая проблема будет в том, что связь с this будет потеряна. Существуют различные вопросы о Stackoverflow с длинными подробными ответами о том, как работает this. Здесь достаточно сказать, что необходимо убедиться, что this установлен правильно:

  this.scrollable_div.scroll(this.slideIt.bind(this));

(Есть другие способы сделать это, но это должно сработать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...