jQuery循环'destroy'命令(以及所有其他命令)被忽略

时间:2012-12-24 15:34:21

标签: jquery jquery-cycle

我遇到了jQuery循环的问题,只是忽略了所有命令(destory,stop等)。这个页面上还有很多其他的东西,可能会有所贡献,但我不确定有多少示例代码太多。

简而言之,我有两个同时在页面加载时初始化的幻灯片,当单击“.video-trigger”时,应该销毁循环实例。但是在点击时,循环会保持循环(并覆盖应该替换它的视频)。

我已经尝试了所有可能的方案,我可以想到尝试找到源 - 删除所有其他的javascript(只是循环和销毁点击事件剩余),只试图调用并销毁两个幻灯片中的一个(而不是两者都是,在单独的包装器中调用它们。我甚至删除了这两个循环实例,并在页面的完全不同的部分进行了一个超级简单的“测试”循环和单击事件,并且也无法销毁。不确定我错过了什么。

这里使用的另一个jQuery插件是videojs,如果这样的话。

这是除了与视频无关的fancybox之外的所有脚本。如果它有助于包含所有内容,请告诉我,但我想我可能已经包含太多了。

jQuery(document).ready(function($){

    /// fading background images and video trigger
    $('#background-image-wrapper,#trigger-fade').cycle();

    // handle videos
    $('.video-trigger').click(function() {
        $('#background-image-wrapper,#trigger-fade').cycle('destroy');

        var vidName = $(this).attr('id');           
        var vidID = 'video_' + vidName;

        $('#background-image-wrapper').append('<div id="vid-cont" class="video-container"></div>');
        $('#vid-cont').append('<video id="' + vidID + '" class="video-js vjs-default-skin" preload="auto" data-setup="{}">' +
            '<source src="http://domain.com/wp-content/themes/sapporo/v/sapporo-'+ vidName +'.mp4" type="video/mp4">' +
            '<source src="http://domain.com/wp-content/themes/sapporo/v/sapporo-'+ vidName +'.ogv" type="video/ogg">' +
            '<source src="http://domain.com/wp-content/themes/sapporo/v/sapporo-'+ vidName +'.webm" type="video/webm">' +
            '</video>');

        //alert(vidID);
        _V_(vidID).ready(function(){
          var myPlayer = this;
          var aspectRatio = 9/16;
          function resizeVideoJS(){
              //var width = document.getElementById(myPlayer.id).parentElement.offsetWidth; // Get the parent element's actual width -- this wasn't working with lower versions of FF
              var width = document.getElementById('vid-cont').offsetWidth; // Get the parent element's actual width
              myPlayer.width(width).height( width * aspectRatio ); // Set width to fill parent element, Set height
          }
         resizeVideoJS(); // Initialize the function
         window.onresize = resizeVideoJS; // Call the function on resize

            $('#trigger-fade').fadeOut();
            $('#video-controls').fadeIn();
            $('.video-container').css('left', '0');
            myPlayer.volume(0);
            myPlayer.play(); //start playing the video
            var endedEvent = function(){ 
                $('#video-controls').fadeOut(function(){ $('#trigger-fade').fadeIn(); });
                $('.video-container').css('left', '-9999em'); 
                $('.background-image').fadeIn('slow'); 
            };
            myPlayer.addEvent("ended", endedEvent);

         $('#pause-video').click(function(){
            myPlayer.pause();
            $(this).fadeOut(function(){ $('#play-video').fadeIn(); });
         });
         $('#play-video').click(function(){
            myPlayer.play();
            $(this).fadeOut(function() { $('#pause-video').fadeIn(); });
         });
         $('#mute-video').click(function(){
            myPlayer.volume(0);
            $(this).fadeOut(function(){ $('#unmute-video').fadeIn(); });
         });
         $('#unmute-video').click(function(){
            myPlayer.volume(.7);
            $(this).fadeOut(function() { $('#mute-video').fadeIn(); });
         });
         $('#close-video').click(function(){
            myPlayer.pause();
            $('#video-controls').fadeOut(function(){ $('#trigger-fade').fadeIn(); });
            $('.video-container').css('left', '-9999em'); 
            $('.background-image').fadeIn('slow'); 
         });
       });
    });
   });

更新: 我没有更接近解决问题(无论我使用Cycle还是Cycle2,都会发生这种情况)。我已经实现了一个我不满意的解决方法(只是隐藏了幻灯片,而在播放视频时它仍在运行)。但是我注意到,在自定义循环然后尝试在不同的单击事件上暂停相同的幻灯片放映时,是在触发命令时,不遵循命令,但是我之前为循环设置的所有自定义选项都被覆盖。

即。 如果我开始:

    $('#background-image-wrapper,#trigger-fade').cycle({{timeout: 4000, speed: 7000}});

然后,在点击事件中使用它:

    $('#background-image-wrapper,#trigger-fade').cycle('destroy');

    $('#background-image-wrapper,#trigger-fade').cycle('pause');

然后,它不是破坏或暂停,而是基本上只启动一个新的Cycle实例,好像'destroy / pause'不存在一样。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。这里似乎完全忽略了'destroy'命令:

http://brianleatart-art.com/

我只希望一次运行一个幻灯片,但由于'destroy'命令不起作用,它会继续运行隐藏的幻灯片。

答案 1 :(得分:-1)

我有一个类似的问题,对我来说,解决方案是将循环存储在变量中并调用此变量来销毁它。像这样:

var mycycle = $('#background-image-wrapper,#trigger-fade').cycle();
...
mycycle.cycle('destroy');

不确定你是否仍然需要这个,但也许有人愿意。