Javascript jqueryinterval赢了';悬停退出后不能重新启动
调用生成HTML的PHP函数后, 我为特定的滑块id调用下面的函数。 这很好,悬停暂停幻灯片,也可以。 但当我悬停在该部分之外时,firebug会给出以下错误: TypeError:o.handler.apply不是函数 而且幻灯片放映不会继续。 提前谢谢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
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);
});