2014-08-28 5 views
0

Я создаю скрипт, который создает и воспроизводит несколько видеороликов YouTube и Vimeo на одной странице с помощью swfobject. Этот скрипт создает контроллер на странице, который позволяет пользователям играть, приостанавливать, останавливать и т. Д. Мне уже удалось создать игроков YouTube и Vimeo Players на одной странице и управлять проигрывателем кнопками на контроллере.Как добавить функцию в api_addEventListener к игроку Vimeo с аргументами

То, что я собираю, добавляет api_addEventListener игрокам. Мне удалось добавить api_addEventListener в события, выпущенные из Vimeo, и выполнить его функцию обратного вызова, как я ответил в следующем вопросе. (How do I add an event listener?)

Однако я не могу определить способ добавления аргументов функции в api_addEventListener. Согласно этой странице (http://developer.vimeo.com/player/js-api), все события Vimeo возвращают player_id и событие, если я не ошибаюсь, но никогда не вернусь. Это необходимо для игры следующего игрока, когда текущий игрок закончил играть, останавливая других игроков, когда игрок играет видео и так далее.

function vimeo_player_loaded(id){ 
    var vimeo_player = document.getElementById(id); 
    vimeo_player.api_addEventListener('play', vimeo_play(id, eventName)); 
    vimeo_player.api_addEventListener('pause', vimeo_pause(id, eventName)); 
    vimeo_player.api_addEventListener('finish', vimeo_finish(id, eventName)); 
} 
function vimeo_play(id, eventName){ 
    console.log("Video is playing. id : " + id + " event: " + eventName); 
} 
function vimeo_pause(id, eventName){ 
    console.log('Video is paused. id :' + id + " event: " + eventName); 
} 
function vimeo_finish(id, eventName){ 
    console.log('Video finished. id :' + id + " event: " + eventName); 
} 

Английский - это не мой первый язык. Извините, если это трудно понять.

PS; Я пытаюсь не использовать какие-либо библиотеки для этого скрипта, если это не необходимо.

+0

Обратите внимание, что слушатель ожидает функцию, а не то, что возвращает функция, 'undefined' в этом случае – elclanrs

ответ

0

Слушатель ожидает функцию, но вы не передаете функцию, вы ее выполняете. У вас есть несколько вариантов, один, чтобы сделать ваши функции возвращают другую функцию, которая ожидает аргумент события:

function vimeo_play(id) { 
    return function(eventName) { 
    console.log("Video is playing. id : " + id + " event: " + eventName); 
    } 
} 

И вы бы вызвать функцию с id, которая будет возвращать функцию, что слушатель ожидает:

vimeo_player.api_addEventListener('play', vimeo_play(id)); 
// same with the others 

Другой вариант, чтобы оставить свои функции, как есть, и использовать bind частично применить id аргумент, так что вы получите функцию ожидающего для события:

vimeo_player.api_addEventListener('play', vimeo_play.bind(null, id)); 
// same with the others 

Помните, что функции являются объектами, когда вы используете (), вы фактически вызываете функцию, а не передаете ее.

+0

Я получил то, что вы указали относительно addEventListener. Однако код не работал, как я намеревался. Первый выполнил свою функцию обратного вызова, когда vimeo_player_loaded (id) даже игрок Vimeo не «играл». Второй просто не работал. Я думаю, что проблема скрывается вокруг api Vimeo. – Sho