【问题标题】:How to properly kill a function如何正确杀死一个函数
【发布时间】:2013-02-05 17:31:00
【问题描述】:

我有一个视频播放器,只要点击一个链接,它就会打开并播放,在观看了两个视频后,会出现一个表单,让您对所提供的信息进行评分。

我遇到的问题是视频播放完毕后会出现一个重播按钮。我目前已经设置了 setTimeout 来消除视频,它覆盖然后运行速率表单功能。但是,如果它单击 setTimeout 的重播按钮仍在运行,并且在视频重播的中途,该功能将运行。这是我的代码:

移除视频叠加层

fnVideoOverlayOff = function () {

    jQuery('#video, #block, .video-closebtn').css('display', 'none');

}

JW 播放器代码

jwplayer('videoScreen').setup({
        flashplayer: '/assets/js/lib/player.swf',
        allowscriptaccess: "always",
        width:972,
        height:547,
        controlbar: "none",
        autostart: true,
        playlistfile: "/assets/videos/playlist.xml",
        events: {
            onPlaylistItem: function (event) {

                jQuery(document).idleTimer('destroy');

            },
                            onPLay: function (event) {

                            },
            onComplete: function (event) {

                setTimeout(function () {

                    fnVideoOverlayOff();

                }, 10000);

                var clickCount = 0;

                if(jQuery.cookie('clickCount') == 2) {

                    fnRateOverlayOn();

                    jQuery('#video, .video-closebtn').css('display', 'none');

                }
            }
        }
    });

如果点击重播按钮,我想杀死 fnVideoOverlayOff();

【问题讨论】:

    标签: jquery function jwplayer die


    【解决方案1】:

    存储对 setTimeout 的引用,并在您想阻止它完成时调用 clearTimeout()

    fnVideoOverlayOffTimer = setTimeout(... 
    
    // and later on when you want to "kill" it,
    
    clearTimeout(fnVideoOverlayOffTimer);`
    

    理想情况下,您可以在某处声明 fnVideoOverlayOffTimer 以使其脱离全局范围,但这是可选的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2019-08-24
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多