整理和减少JQuery代码
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
在$(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');
});
所以你只需为所有元素使用"nav-level"类,并通过在(自定义)数据属性"data-level"中使用不同的值来区分它们。
回答"为什么"的问题:
因为您在click
处理程序赋值中运行 fade
。
将()
放在函数引用之后,将调用该函数。
注意与下面语句的区别:
$('.nav-level1').click(function() { fade('.level1'); });
这传递了一个不会立即运行的函数& & & &;一个匿名函数的引用。
在click上调用匿名函数会调用fade
。
更多细节:
- 调用函数和引用函数的区别?
- 我什么时候用括号,什么时候不用?
相关文章:
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 将 jQuery 代码添加到 Index.aspx 页面
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- Jquery:代码在rails中的页面加载时未执行
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- 我的jquery代码不起作用.为什么?
- 将javascript代码转换为jquery代码时出错
- 在CodeIgniter视图中将Javascript或jQuery代码作为PHP文件编写可以吗
- 按键时停止jquery代码
- 在Grails中的gsp中执行jquery代码
- 这个jquery代码是如何工作的
- 如何在加载角度函数后运行jQuery代码
- 如何使用Javascript或jQuery代码调用mousemove
- 如何使用我的Jquery代码创建委托事件侦听器
- 为什么jQuery代码段在没有IFrame的情况下可以工作,而在有IFrame时却不能工作
- 将JQuery代码转换为等效的JavaScript代码
- JQuery代码语法问题?(“不允许内联控制结构”)
- 使用一个 jquery 代码关闭多个模态
- 如何简化动画jQuery代码