saytik
@saytik
Веб-разработчик

JS — Как получить значение переменной из функции выше?

Такой вот скрипт. Проблема что переменная не выводится после функции
function scaleBannerVideoSize(element){

    var windowWidth = $(window).width(),
        windowHeight = $(window).height() - 90,
        videoWidth,
        videoHeight;

    $(element).each(function(){
        $(this).bind("loadedmetadata", function () {
            videoHeight = this.videoHeight;
            videoWidth = this.videoWidth;
            console.log(videoWidth); // выводит
        });
        console.log(videoWidth); // не выводит
   });
});
  • Вопрос задан
  • 880 просмотров
Решения вопроса 1
saytik
@saytik Автор вопроса
Веб-разработчик
Все верно, поправил. Теперь похожая проблема, счетчик row всегда равен 5 в нужный мне момент

function scaleBannerVideoSize(element){

    
    var row = 0;
    $(element).each(function(){
        
        var windowWidth = $(window).width(),
            videoHeight,
            videoWidth;
        if(row == 0){var windowHeight = $(window).height()}else{var windowHeight = $(window).height() - 90}
        if(row == 1){var windowHeight = $(window).height() / 2}
        $(this).bind("loadedmetadata", function () {
            videoHeight = this.videoHeight;
            videoWidth = this.videoWidth;
        
            var videoAspectRatio = videoHeight/videoWidth,
                windowAspectRatio = windowHeight/windowWidth;
        
            if (videoAspectRatio > windowAspectRatio) {
                videoWidth = windowWidth;
                videoHeight = windowHeight;
                $(this).css({'top' : 0, 'margin-left' : 0});
            } else {
                videoHeight = windowHeight;
                videoWidth = videoHeight / videoAspectRatio;
                $(this).css({'margin-top' : 0, 'margin-left' : -(videoWidth - windowWidth) / 2 + 'px'});
            }
            if(row == 1){$(this).css({'margin-top' : 123 + 'px'});} // row всегда = 5
            
            $(this).width(videoWidth).height(videoHeight);

            $('section .video-container video').addClass('fadeIn animated');
        });
    ++row;
    });
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
byte916
@byte916
Скорее всего у вас выводится undefined в каждой итерации, дело в асинхронности работы - в момент выполнения функции событие еще не произошло, а js уже выполняется. А потом, когда событие произошло, то всё работает как надо.

Решение зависит от того, какой нужен результат.
Ответ написан
Комментировать
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
Читать тут: www.puzzleweb.ru/javascript/4_variables.php
Что бы понять какие бывают переменные, что такое глобальные переменные и что такое область видимости переменной.
Дочитав до конца - найдете 100% решение
Ответ написан
@ssumatokhin
Вам нужно сделать замыкание что бы счетчик работал. Вы можете найти ответ тут
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы