自定义 Jquery 插件自动前进错误
Custom Jquery plugin auto advance bug
我正在尝试将自动前进添加到我自己制作的 jquery 插件中。滑块有 下一个和上一个按钮。
我创建了一个点击模拟功能
var autoAdvance = function(){
$('#next').trigger('click');
};
我希望 autoAdvance 功能 如果 auto 设置为 true 则触发,如果 控件(下一个和上一个按钮)是点击。这部分 - 停止自动前进 - 不起作用
if(settings.auto === true){
setInterval(autoAdvance, settings.pause);
// Stop auto advance if controls are clicked
$('.controlls a').on('click', function(){
clearInterval(autoAdvance);
});
};
我哪里错了?
谢谢!
尝试这样的事情:
var interval;
if(settings.auto === true){
interval = setInterval(autoAdvance, settings.pause);
// Stop auto advance if controls are clicked
$('.controlls a').on('click', function(){
clearInterval(interval);
});
};
如果你能创建一些 jsFiddle 来检查它就完美了,但无论如何请尝试我的回答。
$(document).ready(function(){
var autoInterval = null;
var settings ={};
settings.auto = true;
settings.pause = 2000; //3 sec
$('.message span').fadeOut();
var autoAdvance = function(){
$('.next').data("auto", true);
$('.next').trigger('click');
};
autoInterval = setInterval(autoAdvance, 5000);
// Stop auto advance if controls are clicked
$('.next').on('click', function(){
$('.message span').fadeIn(400).delay( 1000 ).fadeOut(400);
var isAuto = $('.next').data("auto");
if(isAuto !==true){
clearInterval(autoInterval);
$('.message span').fadeIn();
}
$('.next').data("auto",false);
});
});
.message{
min-height:50px;
min-width:100px;
border:1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="message"><span>clicked</span></div>
<button class="next">Next</button>
setInterval 部分应该如下所示
settings.intervalHandler = setInterval(autoAdvance, settings.pause);
...
clearInterval(settings.intervalHandler);
而且 - 也许
- 控件 - 可能有错字?
- 如果代码运行不止一次,settings.auto仍然成立
这是我提出的工作解决方案,用于 模拟每 n 毫秒在 'Next' 按钮上单击 并在 [=13] 时停止自动前进=]真实 点击发生:
// Auto advance
if(settings.auto === true){
var autoAdvanceInterval = null;
$(window).load(function(){
autoAdvanceInterval = setInterval(function(){
$('#next').trigger('click');
}, settings.pause);
// When a control or dot is clicked by user
// stop autoadvance by clearInterval method
$('.controls a,.bullets li').click( function(event) {
if (event.originalEvent !== undefined) {
clearInterval(autoAdvanceInterval);
}
});
});
}
我正在尝试将自动前进添加到我自己制作的 jquery 插件中。滑块有 下一个和上一个按钮。
我创建了一个点击模拟功能
var autoAdvance = function(){
$('#next').trigger('click');
};
我希望 autoAdvance 功能 如果 auto 设置为 true 则触发,如果 控件(下一个和上一个按钮)是点击。这部分 - 停止自动前进 - 不起作用
if(settings.auto === true){
setInterval(autoAdvance, settings.pause);
// Stop auto advance if controls are clicked
$('.controlls a').on('click', function(){
clearInterval(autoAdvance);
});
};
我哪里错了? 谢谢!
尝试这样的事情:
var interval;
if(settings.auto === true){
interval = setInterval(autoAdvance, settings.pause);
// Stop auto advance if controls are clicked
$('.controlls a').on('click', function(){
clearInterval(interval);
});
};
如果你能创建一些 jsFiddle 来检查它就完美了,但无论如何请尝试我的回答。
$(document).ready(function(){
var autoInterval = null;
var settings ={};
settings.auto = true;
settings.pause = 2000; //3 sec
$('.message span').fadeOut();
var autoAdvance = function(){
$('.next').data("auto", true);
$('.next').trigger('click');
};
autoInterval = setInterval(autoAdvance, 5000);
// Stop auto advance if controls are clicked
$('.next').on('click', function(){
$('.message span').fadeIn(400).delay( 1000 ).fadeOut(400);
var isAuto = $('.next').data("auto");
if(isAuto !==true){
clearInterval(autoInterval);
$('.message span').fadeIn();
}
$('.next').data("auto",false);
});
});
.message{
min-height:50px;
min-width:100px;
border:1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="message"><span>clicked</span></div>
<button class="next">Next</button>
setInterval 部分应该如下所示
settings.intervalHandler = setInterval(autoAdvance, settings.pause);
...
clearInterval(settings.intervalHandler);
而且 - 也许
- 控件 - 可能有错字?
- 如果代码运行不止一次,settings.auto仍然成立
这是我提出的工作解决方案,用于 模拟每 n 毫秒在 'Next' 按钮上单击 并在 [=13] 时停止自动前进=]真实 点击发生:
// Auto advance
if(settings.auto === true){
var autoAdvanceInterval = null;
$(window).load(function(){
autoAdvanceInterval = setInterval(function(){
$('#next').trigger('click');
}, settings.pause);
// When a control or dot is clicked by user
// stop autoadvance by clearInterval method
$('.controls a,.bullets li').click( function(event) {
if (event.originalEvent !== undefined) {
clearInterval(autoAdvanceInterval);
}
});
});
}