gpt4 book ai didi

javascript - 寻找一种更有效的方式来编写这个 jquery 菜单

转载 作者:行者123 更新时间:2023-11-28 05:13:24 25 4
gpt4 key购买 nike

我是 Jquery 的新手,所以我浏览了 w3schools.com 上的一些示例,以了解如何编写更好的代码。出于好奇,我想到了这个非常简单的菜单,它有四个 div,一个名为 #main-slide 的主 div,它包含三个指向三个子幻灯片的链接 sub -slide-one, sub-slide-two, sub-slide-three.顺便说一下,这些实际上都没有滑入或滑出,我只是出于某种原因这样命名它们。

这是 HTML:

<body>


<div id="main-slide">

<a class="Subone" href="#">SUB ONE</a>
<a class="Subtwo" href="#">SUB TWO</a>
<a class="Subthree" href="#">SUB THREE</a>

</div>


<div id="sub-slide-one">

<h1>SUB ONE</h1>

<a class="BackMain1" href="#">BACK TO MAIN</a>

</div>

<div id="sub-slide-two">

<h1>SUB TWO</h1>

<a class="BackMain2" href="#">BACK TO MAIN</a>

</div>



<div id="sub-slide-three">

<h1>SUB THREE</h1>

<a class="BackMain3" href="#">BACK TO MAIN</a>

</div>

</body>

这是 CSS:

body {
background-color: antiquewhite;
}

h1 {
text-align: center;
padding-top: 30px;
}

a {
text-decoration: none;
color: #fff;
font-family: arial;
font-weight: bold;
text-align: center;
display: block;
padding-top: 30px;
}

#sub-slide-one,
#sub-slide-two,
#sub-slide-three {
display: none;
width: 90%;
height: 600px;
position: relative;
margin: 0 auto;
margin-top: 30px;
}

#main-slide {
width: 90%;
height: 600px;
position: relative;
margin: 0 auto;
margin-top: 30px;
background-color: aliceblue;
display: block;
}

#sub-slide-one {
background-color: cadetblue;
}

#sub-slide-two {
background-color: crimson;
}

#sub-slide-three {
background-color: cornflowerblue;
}

.Subone,
.Subtwo,
.Subthree {
width: 100%;
height: 200px;
display: block;
}

.Subone {
background-color: dodgerblue;
}

.Subtwo {
background-color: darkkhaki;
}

.Subthree {
background-color: darkgoldenrod
}

对于 JavaScript,每个链接都有一个淡入/淡出点击功能。例如,当 Subone 被点击时,#main-slide 淡出并且 sub-slide-one 淡入。每个子幻灯片包含一个链接回主幻灯片的反向链接。这是我最终遇到问题的地方,菜单按预期工作,尽管当我单击 SubThree 链接时,无论出于何种原因,它都会先跳到顶部。

但为了获得反向链接以正确淡入/淡出 div,我必须使用单独的类和单独的函数创建每个反向链接以获得所需的结果。

这是 Jquery:

$(document).ready(function() {


$(".Subone").click(function() {
$("#main-slide").fadeOut(1200);
$("#sub-slide-one").delay(1200).fadeIn(1200);

});

$(".Subtwo").click(function() {
$("#main-slide").fadeOut(1200);
$("#sub-slide-two").delay(1200).fadeIn(1200);

});

$(".Subthree").click(function() {
$("#main-slide").fadeOut(1200);
$("#sub-slide-three").delay(1200).fadeIn(1200);

});


$(".BackMain1").click(function() {
$("#sub-slide-one").fadeOut(1200);
$("#main-slide").delay(1200).fadeIn(1200);

});

$(".BackMain2").click(function() {
$("#sub-slide-two").fadeOut(1200);
$("#main-slide").delay(1200).fadeIn(1200);

});

$(".BackMain3").click(function() {
$("#sub-slide-three").fadeOut(1200);
$("#main-slide").delay(1200).fadeIn(1200);

});


});

我不得不相信有一种更有效的方法可以做到这一点,但我似乎无法弄清楚如何做到这一点。这是一个指向 JSfiddle 的链接,可以看到它的实际效果 https://jsfiddle.net/Dylancougar/k9f53wpp/

最佳答案

为父菜单定义一个通用类,并定义一个 ID 以将其用作父子菜单之间的关系。获取点击时的 ID 并使用它来决定哪个子菜单必须使用react:

 <div id="main-slide">

<a class="topmenu" id="1" href="#">SUB ONE</a>
<a class="topmenu" id="2" href="#">SUB TWO</a>
<a class="topmenu" id="3" href="#">SUB THREE</a>

</div>


<div id="sub-slide-1">

<h1>SUB ONE</h1>

<a class="Back" id="1" href="#">BACK TO MAIN</a>

</div>

j查询:

  $(".topmenu").click(function() {
var id=$(this).attr("id");
$("#main-slide").fadeOut(1200);
$("#sub-slide-"+id).delay(1200).fadeIn(1200);
});

并使用相同的方法关闭适当的子菜单。

  $(".back").click(function() {
var id=$(this).attr("id");
$("#sub-slide-"+id).fadeOut(1200);
$("#main-slide").delay(1200).fadeIn(1200);
});

请考虑不建议在单个页面中重复和 ID。所以你可以定义更复杂的 ID,例如open1 或 close1 并在计算前删除多余的单词。

var id=$(this).attr("id").replace("open","");

关于javascript - 寻找一种更有效的方式来编写这个 jquery 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39430062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com