2015-09-23 5 views
0

Ive создал функцию для приостановки видео с YouTube. Когда я вызываю функцию сразу после ее определения, она работает нормально.Вызов функции внутри функции, определяемой глобально?

Однако как я могу назвать эту функцию паузы из других функций? Как onYouTubeIframeAPIReady установлен в окне, делает ли это глобальной функцией? Итак, это должно позволить мне вызвать функцию паузы?

window.onYouTubeIframeAPIReady = function() { 
      $youtubeVideos.each(function() { 
       var player = new window.YT.Player(this.id, { 
       events: { 
        onReady: function (e) { 
        var state = e.target.getPlayerState(); 
        if (state === window.YT.PlayerState.BUFFERING || state === window.YT.PlayerState.PLAYING) { 
         $element.addClass('video-playing'); 
         activePlayer = player; 
        } 
        }, 
        onStateChange: function (e) { 
        if (e.data === window.YT.PlayerState.BUFFERING || e.data === window.YT.PlayerState.PLAYING) { 
         $element.addClass('video-playing'); 
         activePlayer = player; 
        } else { 
         $element.removeClass('video-playing'); 
         activePlayer = null; 
        } 
        } 
       } 
       }); 

       // Video pause function 
       function pauseTheVid() { 
       player.pauseVideo(); 
       } 

       // This works 
       $('#trigger').click(function() { 
       pauseTheVid(); 
       }); 

      }); 
      }; 


     // Some other function that is nested somewhere else in my file. 
     // This doesnt work: 
     $('#trigger2').click(function() { 
     window.onYouTubeIframeAPIReady().pauseTheVid(); 
     }); 

ответ

0
// Video pause function 
this.pauseTheVid = function() { 
    player.pauseVideo(); 
} 

При изменении его свойства объекта, вы должны быть в состоянии создать экземпляр onYouTubeIframeAPIReady и вызовите функцию. Чтобы отменить его из других функций внутри одного и того же объекта, вы должны использовать ссылку на ту же область.

var self = this; 
// This works 
$('#trigger').click(function() { 
    self.pauseTheVid(); 
}); 

создание экземпляра может быть выполнено с использованием new.

window.youtube = function(){ 
    var self = this; 
    this.play = function(){ 
     console.log('play'); 
    } 
    this.anotherFunction = function(){ 
     self.play(); 
    } 
} 
//use this syntax in whatever file or scope you are 
var yt = new youtube(); 
yt.play(); 
yt.anotherFunction(); 

JSFiddle

Или в вашем конкретном случае:

$('#trigger2').click(function() { 
    var yt = new onYouTubeIframeAPIReady(); 
    //pauseTheVid is an object property as told before. 
    yt.pauseTheVid(); 
    }); 
+0

Я думаю, вы могли бы меня не поняли. Функция щелчка # триггера уже работает. Что мне нужно сделать, так это вызвать функцию паузы из совершенно разных мест в моих файлах, которые могут быть вложены в совершенно разные функции. – Evans

+0

Да. см. последний обновленный пример. Если в совершенно другом файле вы просто создаете объект и вызываете нужную функцию. Пример также включает вызов его из той же области объекта. –

+0

IM, рассматривая это, но FYI, что ссылка JSFiddle не делает ничего. – Evans

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