转换jQuery函数,使其易于重用而无需重复
Converting jQuery function to be reused easily without repetition
我有以下函数,将无序列表的每一行淡入和淡出。现在它适用于#skills_hints,但我想把它用于其他#named_hints。是否有一种方法,我可以重用此代码在多个无序列表,而不复制和粘贴整个代码,只是改变id ?
$(document).ready(function(){
$('#skills_hints .hint');
setInterval(function(){
$('#skills_hints .hint').filter(':visible').fadeOut(800,function(){
if($(this).next('li.hint').size()){
$(this).next().fadeIn(800);
}
else{
$('#skills_hints .hint').eq(0).fadeIn(800);
}
});
},7000);
});
下面的代码将完全执行您所发布的内容,并且可以通过不同的id反复调用doit函数(显然您应该重命名它)。
function doit(id){
$('#'+id+' .hint');
setInterval(function(){
$('#'+id+' .hint').filter(':visible').fadeOut(800,function(){
if($(this).next('li.hint').size()){
$(this).next().fadeIn(800);
}
else{
$('#'+id+' .hint').eq(0).fadeIn(800);
}
});
},7000);
}
$(function(){
doit('skills_hints');
})
一个很好的技巧是把它变成一个闭包,以防你需要一个单独的函数来用作回调,等等
function doit(id_name){
var id = '#'+id_name + '.hint';
return (function(){
$(id);
setInterval(function(){
$(id).filter(':visible').fadeOut(800,function(){
if($(this).next('li.hint').size()){
$(this).next().fadeIn(800);
}
else{
$(id).eq(0).fadeIn(800);
}
}
},7000);
})
}
//examples
doit_skills = doit('skills_hint');
doit();
doit_foo = doit('foo');
doit_foo()
names = ['a', 'b'];
for(var i=0; i<names.length; i++){
doit(names[i])();
}
你可以把你的代码转换成jQuery Plugin (http://docs.jquery.com/Plugin)
相关文章:
- 停止对document.ready函数的重定向/刷新
- 将重定向URL链接添加到JS函数
- 阻止Javascript函数中的重定向循环
- 将网页上的链接重定向到javascript函数
- 重复调用的同一函数会重置setTimeout内部函数
- Javascript变量在函数运行后不断重置自身
- 对添加另一个选项卡的onsubmit函数停止重定向
- 调用JavaScript函数后,文件上载字段重置
- 调用函数后如何重置全局变量
- 我在画布中的鼠标按下函数在调用时不会重绘背景
- $location.search() 与外部函数一起使用,重置整个$scope.如何避免它
- 可用于重定向到任何 URL 的 JavaScript 函数
- 正在重置原型对象的构造函数属性
- 使用jQuery传递浏览器宽度后,重置切换的函数
- 如何删除/重置window.onfocus函数
- 如何在JavaScript中使用重置函数
- 如何将函数重置为AJAX响应
- 为什么要重置文档getter函数
- JS重试函数几次,看看它是否返回true
- 通过函数(动画)每次重新迭代时重置画布笔划.怎样