Javascript jqueryinterval赢了';悬停退出后不能重新启动

Javascript jqueryinterval赢了';悬停退出后不能重新启动,javascript,jquery,slider,setinterval,Javascript,Jquery,Slider,Setinterval,调用生成HTML的PHP函数后, 我为特定的滑块id调用下面的函数。 这很好,悬停暂停幻灯片,也可以。 但当我悬停在该部分之外时,firebug会给出以下错误: TypeError:o.handler.apply不是函数 而且幻灯片放映不会继续。 提前谢谢 function CallSlider(sliderid){ var $slider = $('#'+sliderid); var $slide = 'li'; var $transition_time = 1000; // 1 second

调用生成HTML的PHP函数后, 我为特定的滑块id调用下面的函数。 这很好,悬停暂停幻灯片,也可以。 但当我悬停在该部分之外时,firebug会给出以下错误: TypeError:o.handler.apply不是函数 而且幻灯片放映不会继续。 提前谢谢

function CallSlider(sliderid){
var $slider = $('#'+sliderid);
var $slide = 'li';
var $transition_time = 1000; // 1 second
var $time_between_slides = 2000; // 4 seconds

function slides(){
return $slider.find($slide);
}

slides().fadeOut();

// set active classes
slides().first().addClass('active');
slides().first().fadeIn($transition_time);

$('#'+sliderid).hover(function() {
clearInterval(sliderid);

}, sliderid = setInterval(

function(){
  var $i = $slider.find($slide + '.active').index();
//alert('test');
  slides().eq($i).removeClass('active');
  slides().eq($i).fadeOut($transition_time);

  if (slides().length == $i + 1) $i = -1; // loop to start

  slides().eq($i + 1).fadeIn($transition_time);
  slides().eq($i + 1).addClass('active');
}
, $transition_time +  $time_between_slides 
)
);

}   

我相信这个错误与
hover()
期望参数是函数这一事实有关

Type:Function()-鼠标指针进入/离开元素时要执行的函数。

我建议将“hover off”代码放在它自己的函数中,如下所示:

$('#'+sliderid).hover(
  function() {
    // hover over
    clearInterval(sliderid);
  },
  function () {
    // hover off
    sliderid = setInterval(...);
  }
);
编辑: 下面是一个基于您提供的代码的示例,说明了如何保持事情的灵活性(例如,对于动态列表)


谢谢您的回复,这很有效,但是…滑块现在无法在页面加载时启动。您是否正在初始化页面加载时的
startInterval()
?否则,它将仅在您将鼠标悬停在元素外后启动。这是我的示例:这是一个很棒的代码,它可以工作,但它避免了我保持函数的动态性。因为你的小提琴里有静电测试。我想只使用1函数多次调用此滑块。我的示例不打算替换您的代码。这只是正确的
hover()
语法的一个示例。您可以使代码保持动态。只需修改调用
setInterval
的方式,将其放在匿名函数中,就像对
clearInterval(sliderid)
所做的那样。如果你可以建立一个工作,我将尝试为你编辑它。好:成功!两个滑块必须在页面加载时启动,悬停时暂停,悬停时继续。全部分开。
var slide = 'li';
var transition_time = 1000; // 1 second
var time_between_slides = 2000; // 4 seconds


function startCycle($slider, $slides) {
    return setInterval(
        function () {

            var $thisslide=jQuery(slide+'.active',$slider);
            var $nextslide=($thisslide.next(slide).length?$thisslide.next(slide):$slides.eq(0));
            $thisslide.removeClass('active').fadeOut(transition_time);
            $nextslide.fadeIn(transition_time).addClass('active');

        }, transition_time + time_between_slides
    );
}

jQuery('ul.slider').each(function () {

    var sliderid;

    var $slider = jQuery(this);
    var $slides = $slider.find(slide);

    $slides.fadeOut();

    // set active classes
    $slides.first().addClass('active').fadeIn(transition_time);

    $slider.hover(
        function () {
            // hover over
            clearInterval(this.sliderid);
        },
        function () {
            // hover off
            this.sliderid = startCycle($slider, $slides);
        }
    );

    this.sliderid = startCycle($slider, $slides);

});