我想摆脱一个滑块插件,所以我试着建立自己的,
一切都很好但是我坚持在悬停时停止整个事情并在mouseleave上重新启动它,
这是我的js:
function startPslider(val) {
if (!val) {
val = 0;
}
var holder = 'slideHolder';
var text = 'slideText';
startInterval(holder, text, val);
}
function startInterval(holder, text, val) {
var t;
var i = val;
if (i > 2) {
i = 0
}
$('#' + holder + i).animate({
opacity: 1,
}, function () {
$(this).addClass('active')
$('.' + text + i).animate({
opacity: 1,
left: 0
}, 1200);
t = setTimeout(function () {
$('.' + text + i).animate({
opacity: 0,
left: '-400px'
}, 1200);
$('#' + holder + i).animate({
opacity: 0,
}, 2200).removeClass('active');
startPslider(i + 1);
}, 4000)
});
// Here´s the not working hover-function
$('#hpCanvas').hover(function () {
clearTimeout(t);
}, function () {
var id = $('.active').attr('id');
var slide = id.substring(11, 22);
console.log(slide)
startPslider(slide);
});
}
$(function () {
startPslider();
});
尝试通过向当前持有者添加类'active'来解决此问题,并在悬停时尝试捕获当前幻灯片编号(val)并重新启动它,从正确的幻灯片开始,但它不起作用如我所愿,
看看这个小提琴,http://jsfiddle.net/zDh76/你会在那里找到html和css,因为你看到一切正常,只要你不悬停。
也许有人有一个帮助暗示如何停止动画,清除计时器并继续使用正确的鼠标滑动幻灯片?
更新
我分开了开始和结束间隔
function startPslider(i) {
if(!i){
i=0;
}
if(i >2){
i=0
}
console.log('started Slider with slide:'+i)
var holder = 'slideHolder';
var text = 'slideText';
startInterval(holder, text, i);
}
function startInterval(holder,text,i) {
var t;
var v;
console.log('started Interval with slide:'+i);
$('#'+holder+i).animate({
opacity:1,
}, function(){
$('.'+text+i).animate({
opacity:1,
left:0
},1200);
t= setTimeout(function(){endInterval(holder,text,i); },4000);
});
}
function endInterval(holder,text,i,cont){
console.log('end Interval with slide:'+i);
$('.'+text+i).animate({
opacity:0,
left:'-400px'
},1200);
$('#'+holder+i).animate({
opacity:0,
},2200, function(){
$('.slideHolder').css('opacity',0);
i = i+1;
startPslider(i);
});
}
答案 0 :(得分:0)
我自己发现了,
我需要在mouseleave函数内的#hpCanvas
上取消绑定悬停事件,如
$('#hpCanvas').hover(function(){
$('.slideHolder, .slideText').stop(true,true);
clearTimeout(t)
},function(){
endInterval(holder,text,i);
$('#hpCanvas').unbind('mouseenter mouseleave')
})
因为下一次将它与hover事件绑定的调用是在第一个悬停事件的mouseleave部分内。
非常感谢所有阅读此内容的人