老师,我的图片显示顺序不对

老师,我的图片显示顺序不对

点击第1个按钮,显示第2张图片,第2个按钮显示第3张图片,以此类推......第11个按钮显示第12张图片。点击第12个按钮,没有变化。

我的程序目录如下:

http://img1.sycdn.imooc.com//climg/5e1bcf42096865d702400507.jpg


index.html文件如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

   <head>
      <title>his demo</title>
      <meta charset="UTF-8">
      <meta name="renderer" content="webkit">
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
      <link type="text/css" rel="stylesheet" href="css/base.css">
      <link type="text/css" rel="stylesheet" href="css/index.css">
   </head>

   <body>
        <!--  标题部分  -->
        <h1 class="heading">云南旅游相册</h1>
        <!--  白色圆圈  -->
        <div class="circle"></div>
        <!--  相册部分  -->
        <div class="gallery">
            <!--  相册导航栏  -->
            <nav class="gallery__nav">
                <!--  12个导航按钮  -->
                <div class="gallery__nav__bar"></div>
                <button class="gallery__nav__btn">泸沽湖</button>
                <button class="gallery__nav__btn">丽江古城</button>
                <button class="gallery__nav__btn">茶马古道</button>
                <button class="gallery__nav__btn">就这家·云逸客栈</button>
                <button class="gallery__nav__btn">西双版纳</button>
                <button class="gallery__nav__btn">云南红酒庄</button>
                <button class="gallery__nav__btn">轿子雪山</button>
                <button class="gallery__nav__btn">普者黑</button>
                <button class="gallery__nav__btn">海埂大坝</button>
                <button class="gallery__nav__btn">玉龙湾</button>
                <button class="gallery__nav__btn">昆明郊野公园</button>
                <button class="gallery__nav__btn">欧洲风琴小镇</button>
            </nav>
            <!--  相册盒子  -->
            <div class="gallery__box">
                <!--  相册列表  -->
                <div class="gallery__box__list">
                    <!--  12张图片  -->
                    <img class="gallery__box__list__item gallery__box__list__item-current" src="img/0.jpg">
                    <img class="gallery__box__list__item" src="img/1.jpg">
                    <img class="gallery__box__list__item" src="img/2.jpg">
                    <img class="gallery__box__list__item" src="img/3.jpg">
                    <img class="gallery__box__list__item" src="img/4.jpg">
                    <img class="gallery__box__list__item" src="img/5.jpg">
                    <img class="gallery__box__list__item" src="img/6.jpg">
                    <img class="gallery__box__list__item" src="img/7.jpg">
                    <img class="gallery__box__list__item" src="img/8.jpg">
                    <img class="gallery__box__list__item" src="img/9.jpg">
                    <img class="gallery__box__list__item" src="img/10.jpg">
                    <img class="gallery__box__list__item" src="img/11.jpg">
                </div>
            </div>
        </div>


      <script type="text/javascript" src="../../jquery/jquery-3.4.1.min.js"></script>
      <script type="text/javascript" src="js/index.js"></script>
   </body>

</html>


base.css文件如下:

body,
h1, h2, nav, button,
div, span
{
    margin: 0;
    padding: 0;
    font-weight: normal;
}

body
{
    font-family: "Microsoft YaHei", "微软雅黑";
    background-color: #90B0C5;
}


index.css文件如下:

/*标题部分*/
.heading
{
    margin: 20px auto;
    width: 240px;
    height: 40px;
    line-height: 40px;
    font-size: 26px;
    text-align: center;
    color: #F28;
}

/*白色圆圈*/
.circle
{
    margin: auto;
    box-shadow: 0 0 0 2px rgba(100, 100, 100, .4);
    border-radius: 50%;
    width: 14px;
    height: 14px;
    background-color: #FFF;
}

/*相册部分*/
.gallery
{
    margin: 20px auto;
    width: 1340px;
    text-align: center;
}

/*相册导航栏*/
.gallery__nav
{
    overflow: hidden;
    position: relative;
    display: flex; /*弹性盒子模型*/
    justify-content: space-between;
    width: 1340px;
    height: 40px;
    line-height: 40px;
}

/*相册导航按钮的长方条*/
.gallery__nav__bar
{
    position: absolute;
    left: 0;
    top: 14px;
    border-top: 1px solid #666;
    border-bottom: 1px solid #666;
    width: 100%;
    height: 10px;
    background-color: #FFF;
    z-index: 0;
}

/*相册导航按钮*/
.gallery__nav__btn
{
    float: left;
    border: 1px solid #4682B4;
    padding: 0 10px;
    height: 100%;
    font-size: 16px;
    color: #4682B4;
    z-index: 1;
}

/*相册导航按钮的鼠标悬停效果*/
.gallery__nav__btn:hover
{
    font-weight: bold;
    cursor: pointer;
}

.gallery__nav__btn:nth-of-type(4n):hover
{
    color: #F35;
}

.gallery__nav__btn:nth-of-type(4n+1):hover
{
    color: #1E90FF;
}

.gallery__nav__btn:nth-of-type(4n+2):hover
{
    color: #F80;
}

.gallery__nav__btn:nth-of-type(4n+3):hover
{
    color: #3D3;
}

/*相册盒子*/
.gallery__box
{
    border: 1px solid #4682B4;
    box-shadow: 0 0 2px 4px rgba(100, 100, 100, .4);
    margin: 26px auto 10px;
    padding: 10px;
    width: 1280px;
    height: 640px;
    background-color: #FFF;
}

/*相册列表*/
.gallery__box__list
{
    position: relative;
    width: 1280px;
    height: 640px;
}

/*相册图片*/
/*这里的每张图片必须都位于相同的位置,不能设置浮动*/
.gallery__box__list__item
{
    position: absolute;
    left: 0;
    top: 0;
    width: 1280px;
    height: 640px;
    opacity: 0; /*透明度0*/
    transition: all .8s;
}

/*当前图片:透明度1*/
.gallery__box__list__item-current
{
    opacity: 1;
}


index.js文件如下:

$(document).ready(function()
{
    // 对每个按钮绑定点击事件
    // 按钮的class名为gallery__nav__btn
    $(".gallery__nav__btn").click(function()
    {
        // 图片的class名为gallery__box__list__item
        // 若是当前显示的图片,则为其class名添加gallery__box__list__item-current
        // 其余兄弟元素则移除class名gallery__box__list__item-current
        $(".gallery__box__list__item").eq($(this).index()).addClass("gallery__box__list__item-current").siblings().removeClass("gallery__box__list__item-current");
    });
});


jQuery文件是在官网下载的,能够正确引入,没有问题。

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,因为index方法获取的是当前元素在所有兄弟元素中的索引值,你的导航多了一个div,所以导致图片与按钮没有对应。

示例:可以打印一下index值,第一个按钮的索引不为0,是1

http://img1.sycdn.imooc.com//climg/5e1be08709b08d6504050061.jpg

http://img1.sycdn.imooc.com//climg/5e1be08c090eb29b02240079.jpg

建议:可以不用去除html结构中div元素,可以将获取的索引值减一即可。

http://img1.sycdn.imooc.com//climg/5e1be0cf09cb2af911750428.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 原来如此
    2020-01-13 11:42:56
  • 按钮的class名为gallery__nav__btn,图片的class名为gallery__box__list__item。有什么办法获取到点击哪个按钮,获取对应的哪一张图片呢?
    2020-01-13 21:29:26
好帮手慕慕子 2020-01-14 09:44:06

同学你好,以同学粘贴的代码为例:

http://img1.sycdn.imooc.com//climg/5e1d1b2d09c879a313240884.jpg

点击按钮时,通过$(this).index()获取被点击按钮的索引,然后减去一,得到的值就是图片对应的索引值。即点击按钮获取到对应的图片。

http://img1.sycdn.imooc.com//climg/5e1d1cda09c09abc09100367.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

提问者 我学习太差被关起来了 2020-01-13 10:31:48

我发现问题了:当把HTML元素 <div class="gallery__nav__bar"></div> 删除后,

就能够实现按钮与对应图片正常显示。

看来这里不严谨,有bug。为什么有bug?jQuery的eq方法选择对应的下标为什么在这里会出错?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师