[英]Tidy up and reduce JQuery code
我正在尝试建立一个视差滚动类型的网站(在单个html页面上隐藏和取消隐藏多个“幻灯片”)
我有可以正常使用的基本jQuery代码设置:
var main = function() {
$('.to-the-articles').click(function() {
var currentSlide = $('.active-slide');
var nextSlide = $('.active-slide').next();
currentSlide.fadeOut(1200).removeClass('active-slide');
nextSlide.fadeIn(1200).addClass('active-slide');
});
$('.nav-level1').click(function() {
var currentSlide = $('.active-slide');
var nextSlide = $('.active-slide').next();
currentSlide.fadeOut(0).removeClass('active-slide');
nextSlide.fadeIn(1200).addClass('active-slide');
});
$('.nav-level2').click(function() {
$('.active-slide').fadeOut(0).removeClass('active-slide');
$('.level2').fadeIn(1200).addClass('active-slide');
});
$('.nav-level3').click(function() {
$('.active-slide').fadeOut(0).removeClass('active-slide');
$('.level3').fadeIn(1200).addClass('active-slide');
});
$('.nav-level4').click(function() {
$('.active-slide').fadeOut(0).removeClass('active-slide');
$('.level4').fadeIn(1200).addClass('active-slide');
});
$('.back-home').click(function() {
$('.active-slide').fadeOut(0).removeClass('active-slide');
$('.home').fadeIn(1200).addClass('active-slide');
});
};
$(document).ready(main);
如您所见,我多次重复相同的操作,只是更改目标以制作活动幻灯片。
我可以减少代码:
var fade = function(target) {
var nextSlide = $(target);
$('.active-slide').fadeOut(0).removeClass('active-slide');
nextSlide.fadeIn(1200).addClass('active-slide');
};
var main = function() {
$('.to-the-articles').click(fade('.home'));
$('.nav-level1').click(fade('.level1'));
$('.nav-level2').click(fade('.level2'));
$('.nav-level3').click(fade('.level3'));
$('.nav-level4').click(fade('.level4'));
$('.back-home').click(fade('.home'));
};
$(document).ready(main);
在这里,我尝试创建一个函数fade
功能,当单击选定的类之一时会调用该fade
功能,但是相反,只要文档准备就绪,它就会立即运行该函数fade
功能。
有人可以解释为什么函数fade
在$(document).ready
上运行并且不等待.click()
吗?
编辑:
这是当前的工作代码,即上面的第一个代码: http : //jsfiddle.net/m924B/1/ (注意:不知道如何加载图像,但是如果单击较小的丢失图像,则会转到登陆页面。)
这是该代码的第二次尝试: http : //jsfiddle.net/m924B/2/
与您的html看起来像这样:
<div class="nav-level" data-level="1"></div>
<div class="nav-level" data-level="2"></div>
...
您可以使用HTML5
数据属性来构建jQuery
选择器字符串:
$('.nav-level').click(function() {
$('.active-slide').fadeOut(0).removeClass('active-slide');
$('.level' + $(this).data("level")).fadeIn(1200).addClass('active-slide');
});
因此,您只需对所有元素使用“导航级别”类,并通过在(自定义)数据属性“数据级别”中使用不同的值来区分它们。
要回答“为什么”问题:
因为您在click
处理程序分配中运行 fade
。
将()
放在函数引用之后会调用该函数 。
请注意与以下内容的区别:
$('.nav-level1').click(function() { fade('.level1'); });
这样会传递一个不会立即运行的函数-对匿名函数的引用。
在点击呼叫上调用匿名函数会fade
。
更多详情:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.