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
Вам нужно сделать замыкание что бы счетчик работал. Вы можете найти ответ тут
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы