Chrome中无法解释的行为,是我的代码还是他们的代码?

时间:2011-09-03 21:23:31

标签: jquery html html5 google-chrome

我的网页上嵌有div class =“video-container”的视频元素以及div class =“video-control-bar”,我正在使用JQuery来制作动画。我也使用setInterval来查询视频元素的currentTime,并在视频控制栏中包含的进度条中反映出来。

JavaScript的:

$(function(){
  $(".video-container").each(function(){
    player_init($(this))
  })
})

function player_init(self)
{
  setInterval(function(){
    var video = self.find("video")[0]
    self.find(".video-control-bar").find(".video-position").find("input").val(video.currentTime / video.duration)
    self.find(".video-control-bar").find(".video-position").find("progress").val(video.currentTime / video.duration)
  }, 500)
  self.hover(function(){
    self.find(".video-control-bar").stop().animate({bottom: "0px"}, 25)
  }, function(){
    self.find(".video-control-bar").stop().animate({bottom: "-39px"}, 350)
  })
}

问题?好吧,在Chrome中,如果我加载页面,我的setInterval函数会像预期的那样每500毫秒被调用一次,直到我将鼠标移到播放器上,从而导致控制条动画。之后不再调用我的setInterval函数。

HOWEVER 如果我点击刷新,页面重新加载,我可以将鼠标悬停在我想要的所有内容上,一切都继续正常工作。但是如果我通过刷新加载页面,

在Firefox中不会发生这种情况。我怀疑它可能是Chrome中的一个错误,因为它类似于我提交的问题here

我真的不知道我的工作方式是否有问题,JQuery的问题或Chrome中的错误。我真的不在乎它是谁的错,我只想让事情发挥作用。

感谢。

2 个答案:

答案 0 :(得分:1)

self.hover()可能在完成后返回,从而结束了player_init()

尝试将超时功能与悬停功能分开的内容,如下所示:

$(function(){
    $(".video-container").each(function(){
        $this = $(this);  //small optimization
        hover_init($this);
        player_init($this);

        });
});
function player_init(self){
  var a = self.find(".video-control-bar .video-position");
  var video = self.find("video")[0]
  setInterval(function(){
    a.find("input").val(video.currentTime / video.duration)
    a.find("progress").val(video.currentTime / video.duration)
  }, 500)
}
function hover_init(self){
    selfhover(
            function(){
                self.find(".video-control-bar").stop().animate({bottom: "0px"}, 25)
            }, function(){
                self.find(".video-control-bar").stop().animate({bottom: "-39px"}, 350)
            });
}

答案 1 :(得分:0)

self.hover(function(){
    self.find(".video-control-bar").stop().animate({bottom: "0px"}, 25)
}, function(){
    self.find(".video-control-bar").stop().animate({bottom: "-39px"}, 350)
})

替换或删除stop()。这可能会解决它。