6

我正在为 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/?.

我收到此错误:

类型错误:表达式'$f(player).vimeoPlayer' [undefined] 的结果不是对象。

4

2 回答 2

17

一个问题是 addEvent 既是您定义的函数,也是 $f(player) 对象的方法。看来您混淆了两者。$f(player) 对象的 addEvent 方法只接受两个参数,播放器事件的名称和要调用的函数。它应该用作 $f(your-iframe).addEvent('vimeo event', your_function);

您的 addEvent 函数将统一 IE 和 W3C 方法之间的事件。它不是必需的,因为您使用的是 jQuery。jQuery(whatever).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 Playground进行了十几次搜索之后,我开始了解它是如何工作的。

祝你好运!

于 2011-06-01T17:43:26.843 回答
0

而不是$f(player).vimeoPlayer.addEvent尝试$(this).addEvent

于 2011-05-14T03:43:00.983 回答