jQuery и Vimeo Foogaloop API

Я создаю плагин для WordPress, и пока у меня все хорошо с библиотекой PHP. Но у меня возникли проблемы с JavaScript API.

Я пытаюсь использовать его с jQuery, и я думаю, что версия jQuery для WordPress работает с ярлыком $f. Почему это не сработает?

var vimeoPlayer = {

    init: function() {
        var vimeoPlayers = document.querySelectorAll('iframe'),
        player;

        jQuery('iframe.vimeo-player').each(function(index, iframe){
            player = vimeoPlayers[index];
            $f(player).vimeoPlayer.addEvent('ready', vimeoPlayer.ready);
        });
    },

    addEvent: function(element, eventName, callback) {
        if (element.addEventListener) {
            element.addEventListener(eventName, callback, false);
        }
        else {
            element.attachEvent(eventName, callback, false);
        }
    },

    ready: function(player_id) {
        alert(player_id);
    }
}

jQuery(document).ready(function($){
    vimeoPlayer.init.call();
});

Вы можете увидеть его в действии на temp.woodshop.tv/?work/?dickies-campaign/?.

Я получаю эту ошибку:

TypeError: Результат выражения '$f(player).vimeoPlayer' [undefined] не является объектом.


person Drew Baker    schedule 14.05.2011    source источник


Ответы (2)


Одна из проблем заключается в том, что addEvent — это и функция, которую вы определили, и метод объекта $f(player). Похоже, вы их путаете. Метод addEvent объекта $f(player) принимает только два аргумента: имя события игрока и вызываемую функцию. Его следует использовать как $f(your-iframe).addEvent('vimeo event', your_function);

Ваша функция addEvent объединит события между методами IE и W3C. Это не нужно, потому что вы используете jQuery. jQuery(что угодно).click() делает то же самое. Я не вижу ни одной части вашего фрагмента, где он вам нужен, но если вы это сделаете, я бы просто использовал метод jQuery.

Кроме того, объект видеопроигрывателя должен быть $f(player) вместо $f(player).vimeoPlayer.

Попробуй это

jQuery('iframe.vimeo-player').each(function(){
    $f(this).addEvent('ready', ready);
});

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

function ready(player_id){
    $f(player_id).addEvent('play', play);
    $f(player_id).api('play');
    alert("Ready!!!");
}
function play(){
    alert("Playing!!!");
}

Мне было трудно найти нужную информацию в Vimeo Froogaloop API, но после тщательного изучения Игровая площадка Vimeo Froogaloop API около дюжины раз, когда я начинаю понимать, как это работает.

Удачи!

person Jon Kirkman    schedule 01.06.2011
comment
Эй, Джон, я превратил это в рабочий пример здесь: labs.funkhausdesign. ком/примеры/вимео/ - person Drew Baker; 18.08.2011
comment
Блестяще спасибо! Примеры собственного API Vimeo оставляют желать лучшего. - person Simon27; 01.07.2013
comment
Большое спасибо, это помогло мне лучше, чем пример с игровой площадкой vimeo (после того, как я провел с ним несколько часов). - person ShayneStatzell; 13.06.2014

Вместо $f(player).vimeoPlayer.addEvent попробуйте $(this).addEvent.

person seoul    schedule 14.05.2011
comment
Спасибо, но $f() — это ярлык для API Vimeo, поэтому он должен быть там. Однако я сделал это ближе: Foogaloop(this).addEvent('ready', vimeoPlayer.ready); Но это дает eventCallbacks[target_id] undefined в строке 22. Ошибка в их API. - person Drew Baker; 14.05.2011
comment
Давайте проанализируем: $f(player).vimeoPlayer.addEvent('ready', vimeoPlayer.ready), здесь $f(player) принимает тег iframe (или HTML) в качестве входных данных и должен возвращать что-то, что имеет vimeoPlayer в качестве объекта (потому что только тогда этот код правильный). . .но внимательно изучив его, я обнаружил, что ни $f(player) ничего не возвращает, ни vimeoPlayer не объявляется перед использованием в качестве объекта здесь.... Так что я не знаю, как вам помочь в этом случае :-( я могу только узнай проблему... прости Дрю - person seoul; 18.05.2011