将多个jquery函数合并为一个
Merging multiple jquery functions into one
我对jquery很陌生。我似乎可以让东西发挥作用,但代码的长度很可怕,我发现自己在重复。。。
有人能用最短的方法写下以下内容吗。。。我尝试过各种方法,但它打乱了代码的工作方式。。。这基本上是一个循序渐进的过程中的一系列面板和按钮。。。单击一个按钮后,下一个按钮会淡入并自动滚动到特定高度。
<script>
$(".steptwobtn").on( "click", function(e){
$(".steptwo").fadeIn().css("display","block");
$(".costs").fadeIn().css("display","block");
var target = $( $(this).attr('href') );
if( target.length ) {
event.preventDefault();
$('html, body').animate({
scrollTop: (target.offset().top)-155
}, 1000);
}
});
$(".stepthreebtn").on( "click", function(e){
$(".stepthree").fadeIn().css("display","block");
$(".size-costs span").css("visibility","visible");
var target = $( $(this).attr('href') );
if( target.length ) {
event.preventDefault();
$('html, body').animate({
scrollTop: (target.offset().top)-155
}, 1000);
}
});
$(".stepfourbtn").on( "click", function(e){
$(".stepfour").fadeIn().css("display","block");
$(".worktop-costs span").css("visibility","visible");
var target = $( $(this).attr('href') );
if( target.length ) {
event.preventDefault();
$('html, body').animate({
scrollTop: (target.offset().top)-155
}, 1000);
}
});
$(".stepfivebtn").on( "click", function(e){
$(".stepfive").fadeIn().css("display","block");
$(".appliances-costs span").css("visibility","visible");
$(".install-costs span").css("visibility","visible");
$(".total-costs span").css("visibility","visible");
var target = $( $(this).attr('href') );
if( target.length ) {
event.preventDefault();
$('html, body').animate({
scrollTop: (target.offset().top)-155
}, 1000);
}
});
</script>
我想一定有一种更整洁的写作方式,而不必每次都重复滚动功能?
非常感谢。我要把头发扯掉了!
G
您可以将滚动逻辑移到一个单独的函数中,然后从每个jQuery点击处理程序中调用它:
<script>
$(".steptwobtn").on( "click", function(e){
$(".steptwo").fadeIn().css("display","block");
$(".costs").fadeIn().css("display","block");
scroll(this);
});
$(".stepthreebtn").on( "click", function(e){
$(".stepthree").fadeIn().css("display","block");
$(".size-costs span").css("visibility","visible");
scroll(this);
});
$(".stepfourbtn").on( "click", function(e){
$(".stepfour").fadeIn().css("display","block");
$(".worktop-costs span").css("visibility","visible");
scroll(this);
});
$(".stepfivebtn").on( "click", function(e){
$(".stepfive").fadeIn().css("display","block");
$(".appliances-costs span").css("visibility","visible");
$(".install-costs span").css("visibility","visible");
$(".total-costs span").css("visibility","visible");
scroll(this);
});
function scroll(btn) {
var target = $( $(btn).attr('href') );
if( target.length ) {
event.preventDefault();
$('html, body').animate({
scrollTop: (target.offset().top)-155
}, 1000);
}
}
</script>
或者,如果你想将它们合并在一起,你可以执行以下操作。问题是,每个函数都在做一些微妙的不同事情。为了实现以下功能,您需要为每个btn添加一个属性"data step number",并将每个按钮的css类更改为"stepbtn":
<script>
$(".stepbtn").click(function(e) {
var step = $(this).attr('data-step-number');
$(".step" + step).fadeIn().css("display","block");
switch (step) {
case 2:
$(".costs").fadeIn().css("display","block");
break;
case 3:
$(".size-costs span").css("visibility","visible");
break;
case 4:
$(".worktop-costs span").css("visibility","visible");
break;
case 5:
$(".appliances-costs span").css("visibility","visible");
$(".install-costs span").css("visibility","visible");
$(".total-costs span").css("visibility","visible");
break;
}
var target = $( $(this).attr('href') );
if( target.length ) {
event.preventDefault();
$('html, body').animate({
scrollTop: (target.offset().top)-155
}, 1000);
}
});
</script>
相关文章:
- 将两个Json提要合并为一个,并按时间排序
- 将javascript对象(属性+值)合并到一个对象中
- jQuery将代码合并为一个函数
- 将多个jquery函数合并为一个
- 将嵌套数组的元素合并到一个大数组中
- MongoDB聚合将两个不同的字段合并为一个并获取计数
- 如何将多个 Blender JSON 模型合并到一个 Three.js Object3D 对象中
- 在angularJS中合并来自一个服务的两个数组
- 如何使用ES6将两个具有函数的对象合并为一个新对象
- 将文档的MongoDB字段合并到一个文档中
- 将两个图像合并为一个,并使用javascript进行溢出隐藏
- 将值和属性从一个对象合并到另一个对象
- 将两个云代码函数合并为一个函数
- 如何在Three.JS中将两个BufferGeometry合并为一个BufferGeometrics
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中
- 如何将两个json对象合并为一个json
- 将json作为子文档合并到另一个json中
- 创建大量的js文件或者合并为一个文件是一种好的做法吗
- 将CSS和JavaScript合并到一个文件中并进行链接
- 我如何隐藏一个列在html表中,它有一个合并的标题