как лечится ошибка? Uncaught TypeError: Cannot read property 'top' of undefined

gordy

Мастер
Регистрация
25 Авг 2015
Сообщения
228
Реакции
32
подключаю функцию отдельным файлом,
ошибка в этой строчке

breakpoint = _.options.revealPosition !== 'bottom' ? _.revealElement.offset().top : _.revealElement.offset().top + _.revealElement.height();

а именно в этом месте .top + _.revealElement.height();

PHP:
(function($) {
    function mScrollTop(element, settings) {

        var _ = this,
            breakpoint;
        var scrollTo = 0;

        _.btnClass = '.material-scrolltop';
        _.revealClass = 'reveal';
        _.btnElement = $(_.btnClass);

        _.initial = {
            revealElement: 'body',
            revealPosition: 'top',
            padding: 0,
            duration: 600,
            easing: 'swing',
            onScrollEnd: false
        }

        _.options = $.extend({}, _.initial, settings);

        _.revealElement = $(_.options.revealElement);
        breakpoint = _.options.revealPosition !== 'bottom' ? _.revealElement.offset().top : _.revealElement.offset().top + _.revealElement.height();
        scrollTo = element.offsetTop + _.options.padding;

        $(document).scroll(function() {
            if (breakpoint < $(document).scrollTop()) {
                _.btnElement.addClass(_.revealClass);
            } else {
                _.btnElement.removeClass(_.revealClass);
            }
        });

        _.btnElement.click(function() {
            var trigger = true;
            $('html, body').animate({
                scrollTop: scrollTo
            }, _.options.duration, _.options.easing, function() {
                if (trigger) { // Fix callback triggering twice on chromium
                    trigger = false;
                    var callback = _.options.onScrollEnd;
                    if (typeof callback === "function") {
                        callback();
                    }
                }
            });
            return false;
        });
    }

    $.fn.materialScrollTop = function() {
        var _ = this,
            opt = arguments[0],
            l = _.length,
            i = 0;
        if (typeof opt == 'object' || typeof opt == 'undefined') {
            _.materialScrollTop = new mScrollTop(_, opt);
        }
        return _;
    };
}(jQuery));

в главный файл index.html добавляю

PHP:
   $(document).ready(function() {
      $('body').materialScrollTop({
          revealElement: 'header',
          revealPosition: 'bottom',
          onScrollEnd: function() {
              console.log('Scrolling End');
          }
      });
  });
 
с одной стороны ошибка понятна, с другой стороны, непонятно, что делать с данным top элементом
 
У тебя функция offset() для элемента revealElement возвращает undefined.
А вот почему это происходит - хз.
У тебя либо элемент отсутствует в принципе, либо скрипт находится перед элементом.
 
Что возвращает _.revealElement.offset()?
Есть элемент _.revealElement вообще?
 
Назад
Сверху