2016-09-15 4 views
-1

В настоящее время у меня есть JS ниже. Я пытаюсь запустить событие slideout.close(); с smoothstate onStart. Мой код ниже, и в настоящее время я получаю сообщение об ошибке в консоли. Может кто-то, пожалуйста, помогите мне.Функция не срабатывает правильно

Спасибо.

$(document).ready(function() { 
 
    slideout(); 
 
}); 
 

 
function slideout() { 
 
    var slideout = new Slideout({ 
 
     'panel': document.getElementById('slideout-content'), 
 
     'menu': document.getElementById('slideout-nav'), 
 
     'padding': 256, 
 
     'tolerance': 70, 
 
     'side': 'right' 
 
    }); 
 

 
    $('.mobile-nav__icon').on('click', function() { 
 
     slideout.toggle(); 
 
    }); 
 
} 
 

 
$(function(){ 
 
    'use strict'; 
 
    var options = { 
 
    prefetch: true, 
 
    cacheLength: 2, 
 
    onStart: { 
 
     duration: 860, 
 
     render: function ($container) { 
 
     $container.addClass('is-exiting'); 
 
     smoothState.restartCSSAnimations(); 
 
     slideout.close(); 
 
     } 
 
    }, 
 
    onReady: { 
 
     duration: 0, 
 
     render: function ($container, $newContent) { 
 
     $container.removeClass('is-exiting'); 
 
     $container.html($newContent); 
 
     } 
 
    }, 
 
    onAfter: function() { 
 
     slideout(); 
 
    } 
 
    }, 
 
    smoothState = $('#animate-wrapper').smoothState(options).data('smoothState'); 
 
});

+0

Я бы замечательно, если вы указали, что ошибки на самом деле были – Li357

+0

'script.js: 29 Uncaught TypeError: slideout.close не является функцией ' – Ryan

+0

' slideout' является функцией, а не объектом. Может быть, вы пытаетесь получить доступ к локальному? – Li357

ответ

1

Вы создали глобальную функцию под названием slideout, в которой у вас есть локальная переменная называется slideout, что это тот, который относится к Slideout объекта - вы не можете получить доступ, что местные переменная от других функций. Когда вы пытаетесь использовать slideout.close(), который ищет метод .close() на функции .

Одним из исправлений было бы изменить имя переменной или функции и сделать переменную глобальную, чтобы вы могли получить к ней доступ в любом месте. Но добавление большего количества глобалов беспорядочно.

Я думаю, что должно быть хорошо, чтобы объединить весь ваш код в один готовый обработчик документа, чтобы все было в одной области без каких-либо глобальных переменных (вам все равно нужно использовать другое имя для переменной).

я не могу проверить следующее, потому что я не то, что Slideout есть, но:

$(document).ready(function() { 
    'use strict'; 

    var slideout; // variable that is local to the doc ready handler function 
       // and accessible to all code within that handler 

    function initSlideout() { // function renamed 
    slideout = new Slideout({ // assign to variable declared above 
     'panel': document.getElementById('slideout-content'), 
     'menu': document.getElementById('slideout-nav'), 
     'padding': 256, 
     'tolerance': 70, 
     'side': 'right' 
    }); 
    } 
    initSlideout(); 

    $('.mobile-nav__icon').on('click', function() { 
    slideout.toggle(); 
    }); 

    var options = { 
    prefetch: true, 
    cacheLength: 2, 
    onStart: { 
     duration: 860, 
     render: function ($container) { 
     $container.addClass('is-exiting'); 
     smoothState.restartCSSAnimations(); 
     slideout.close(); 
     } 
    }, 
    onReady: { 
     duration: 0, 
     render: function ($container, $newContent) { 
     $container.removeClass('is-exiting'); 
     $container.html($newContent); 
     } 
    }, 
    onAfter: function() { 
     initSlideout(); 
    } 
    }, 
    smoothState = $('#animate-wrapper').smoothState(options).data('smoothState'); 
}); 
+0

все, кажется, работает сейчас, однако мне просто нужен слайд для повторной инициализации после того, как smoothstate будет завершен. Это работало до этого, но теперь этот бит не работает. 'onAfter: function() { slideout(); } ' – Ryan

+0

О, извините, я этого не заметил. (В моем ответе я сказал, что вы, похоже, не называете 'slideout()' в другом месте, но на самом деле вы это делаете.) Ответ обновлен. – nnnnnn

+0

спасибо, сильно приняв во внимание. – Ryan

Смежные вопросы