1

(我很抱歉发了这么长的帖子。我在解释事情时往往非常透彻。)

首先,我想说我是 Jquery 的新手,我正在尝试通过创建自定义图像滑块来自学。我让滑块本身可以使用以下代码处理淡入淡出效果:

Javascript:

$(document).ready(
$(
    $(function(){
        $('.moonslide img:gt(0)').hide();
        setInterval(function(){$('.moonslide img:first').fadeOut(3000).next('img').fadeIn(3000).end().appendTo('.moonslide');}, 6000);
    })
));

HTML

<div id="viewport">
  <div id="topslider">
    <div class="moonslide">

    <img src="/images/Slider/filer.jpg" class="slimage" id="ms0">
    <img src="/images/Slider/greenroom.jpg" class="slimage" id="ms1">
    <img src="/images/Slider/ng1.png" class="slimage" id="ms2">
    <img src="/images/Slider/ngs.png" class="slimage" id="ms3">                                                                        
    <img src="/images/Slider/worldworks.jpg" class="slimage" id="ms4">

    </div>
  </div>
  <div id="linkul" class="moonslidelinks">
    <a href="#" id="ml0">Slide 1</a><br />
    <a href="#" id="ml1">Slide 2</a><br />
    <a href="#" id="ml2">Slide 3</a><br />
    <a href="#" id="ml3">Slide 4</a> <br />
    <a href="#" id="ml4">Slide 5</a><br />
  </div>
</div>

我想尝试的下一件事是用它为导航列表设置动画。我开始尝试的第一件事是在显示相应的图像时简单地将链接颜色从蓝色淡化为白色(我已经添加了 Jquery 颜色插件来动画 css)。我假设为每个动作添加两个效果需要我打破我为淡入淡出效果准备的链条。我开始只是确保我可以正确地分解它。到目前为止,我想我知道我需要如何分解它,但是在“a:first”之后我无法获得下一个锚对象。我编写了以下代码,适用于第一个和第二个图像以及第一个锚点,但不适用于第二个锚点。

$(document).ready($(
function(){

$('.moonslide img:gt(0)').hide();
$('.moonslidelinks a:first').css("color","#FFF");

$('.moonslide img:first').fadeOut(3000).next('img').fadeIn(3000);
$('.moonslidelinks a:first').animate({color: "#0083ff"}, 3000).next('a').animate({color: "#FFF"}, 3000);

}

));

当它不起作用时,我对其进行了更改以查看是否可以到达下一个 Anchor 对象:

$(document).ready($(
function(){

var nextImg = $('.moonslide img:first').next('img');
var nextA = $('.moonslidelinks a:first').next('a');
console.log(nextImg.attr('id'));
console.log(nextA.attr('id'));

}

));

这将第二张图像的 ID 输出到控制台就好了,但显示未定义的锚。

[00:02:11.080] "ms1"
[00:02:11.080] undefined

如果我在导航中添加一个列表并尝试获取下一个“li”ID,它就可以正常工作。

$(document).ready($(
function(){

var nextImg = $('.moonslide img:first').next('img');
var nextA = $('.moonslidelinks li:first').next('li');
console.log(nextImg.attr('id'));
console.log(nextA.attr('id'));

}

));

<ul class="moonslidelinks">     
        <li id="li0"><a href="#" id="0">Slide 0</a></li>
        <li id="li1"><a href="#" id="1">Slide 1</a></li>
        <li id="li2"><a href="#" id="2">Slide 2</a></li>
        <li id="li3"><a href="#" id="3">Slide 3</a></li>
        <li id="li4"><a href="#" id="4">Slide 4</a></li>
</ul>

输出:

[00:07:36.031] "ms1"
[00:07:36.031] "li1"

最后一个问题(再一次,很抱歉,很长的帖子):为什么这对主播不起作用,但对 LI 和 IMG 起作用?"a:first" 工作得很好,但将 ".next" 链接到它就不行了。难道我做错了什么?另外,我是在走正确的道路来创建带有导航效果的滑块,还是我把自己送进了兔子洞?提前感谢任何对此提供帮助的人,并且在看到我的长篇文章和过度解释时不会逃跑。

4

3 回答 3

0

下一个要锚定的元素是<br />没有 id 的标签。无论您是否将参数传递给该方法,该.next()方法都只返回它旁边的元素。

<div id="linkul" class="moonslidelinks">
    <a href="#" id="ml0">Slide 1</a><br />
    ------------------------------- ------
                   |                  |
          Selects this first     The Next to it.
                   |                  |
        $('.moonslidelinks a:first').next('a')
                                         -----
                                           |
                                     It will not help
于 2013-08-25T05:27:05.107 回答
0

问题是锚标签之间的“br”标签。最快的解决方案是:

$('.moonslidelinks a:first').animate({color: "#0083ff"}, 3000).next().next().animate({color: "#FFF"}, 3000);

请注意,您需要调用“next().next()”来获取“br”,然后是“a”。

在此处查看所选答案:在 jQuery 中获取下一个兄弟的最干净的方法

于 2013-08-25T05:34:34.033 回答
0

这是我到目前为止的结果。这里的两个答案都是正确的,因为指定“next('a')”不仅会寻找锚点。Ryan Henderson 建议使用“next().next()”来获得下一个锚点。尽管如此,我实际上最终还是放弃了在导航端使用“next()”。正如您在我原始帖子中的代码中看到的那样,我通过取出第一张图像并将其附加到 div 的末尾来旋转图像。这样,代码每次运行时都可以简单地抓取 div 中的第一个图像。我不确定这是否是最好的方法,但就像我说的那样,我只是想学习这个(这就是我当时想出的)。因此,我不必担心到达列表的末尾(带有图像)。当我使用“next().next()”获得代码时,我意识到它不会起作用,因为我不得不担心到达导航列表的末尾。在导航端使用“next()”会让我走到最后,然后在它回滚时跳过第一个动画。我最终使用了以下内容,这可能是也可能不是最好的解决方案:

JS

$(document).ready($(
function(){

    $('.moonslide img:gt(0)').hide();
    $('.moonslidelinks a:first').css("color","#FFF");

    setInterval(function(){
        var curClass = $('.moonslide img:first').attr('id');
        var sp = curClass.split('ms');
        var curIndex = parseInt(sp[1]);
        var linkID = 'ml' + curIndex;
        if (curIndex < $('.moonslide').find('img').length-1) {var nextID = 'ml' + (curIndex+1);}
        else {var nextID = 'ml0';}

        $('.moonslide img:first').fadeOut(3000).next('img').fadeIn(3000).end().appendTo('.moonslide');   
        $("#"+linkID).animate({color: "#0083ff"}, 3000);
        $("#"+nextID).animate({color: "#FFF"}, 3000);

    }, 6000);

}

));

我想对这个脚本做的下一件事是把鼠标放在暂停中。我不太确定从哪里开始,但我明天会开始深入研究。上面的两个回复都回答了我最初的问题,所以我会将此线程称为已解决(再次感谢你们俩!)。这是我用于测试的完整 HTML 页面。这包括所有的 CSS、HTML 和 Javascript。如果您发现我可以做得更好,我总是乐于接受建议。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style type="text/css">
a:link{color: #0083ff;}
a:active{color:#0083ff;}
a:visited{color:#0083ff;}
a:hover{color:#0083ff;}
.slimage {
    width: 650px;
    height: 410px;
}
.moonslide {
    position:relative;
    width: 650px;
    height: 410px;
}
.moonslide img{
    position:absolute;
    z-index: -1000;
}
.moonslidelinks a{
    font-size: 1.8em;
    text-decoration: none;
}
#viewport {
    margin: auto;
    width: 1024px;
    height: 800px;
    position: relative;
    background-color: #000;
}
#topslider {

    position: relative;
    top: 25px;
    left: 37px;
    height: 420px;
    width: 950px;
    z-index: 10;
}
#MoonslideNav {
    top: 235px;
    left: 675px;
    width: 150px;
    height: 160px;
    position: absolute;
}
</style>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <!-- Jquery 1.10.2 //-->
<script src="//code.jquery.com/color/jquery.color-2.1.2.js"></script> <!-- Jquery Color Plugin //-->
<script type="text/javascript">
$(document).ready($(
    function(){

        var fadeTime = 3000; // Time it takes to fade in and out in ms.
        var intTime = 6000; // Time before the next image effect starts in ms(counter starts as soon as fade in begins). 


        $('.moonslide img:gt(0)').hide();
        $('.moonslidelinks a:first').css("color","#FFF");
        setInterval(function(){
            var curID = $('.moonslide img:first').attr('id'); // Get first image (current image) ID
            var sp = curID.split('ms'); // Split first part of ID to leave only index number in sp[1]
            var curIndex = parseInt(sp[1]); // turn index number string into integer 
            var linkID = 'ml' + curIndex; // create string for current link ID
            if (curIndex < $('.moonslide').find('img').length-1) // Make sure current index is not the last image. 
            {var nextID = 'ml' + (curIndex+1);} // If it isn't, next index = current index + 1
            else {var nextID = 'ml0';} // If it is, next index = first link ID
            $('.moonslide img:first').fadeOut(fadeTime).next('img').fadeIn(fadeTime).end().appendTo('.moonslide');   // First Image Fade Out -> Next Image Fade In -> Move first Image to end
            $("#"+linkID).animate({color: "#0083ff"}, fadeTime); // Fade current navigation link out
            $("#"+nextID).animate({color: "#FFF"}, fadeTime); // Fade next navigation link in
        }, intTime); // Repeat after 6 seconds (includes the 3 seconds it takes to fade out / in). 
    }
));
</script>
</head>

<body>

<div id="viewport">
    <div id="topslider">
        <div class="moonslide">
            <img src="/images/Slider/filer.jpg" class="slimage" id="ms0">
            <img src="/images/Slider/greenroom.jpg" class="slimage" id="ms1">
            <img src="/images/Slider/ng1.png" class="slimage" id="ms2">
            <img src="/images/Slider/ngs.png" class="slimage" id="ms3">                                                                        
            <img src="/images/Slider/worldworks.jpg" class="slimage" id="ms4">
        </div>
        <div id="MoonslideNav" class="moonslidelinks">
            <a href="#" id="ml0">Slide 1</a><br />
            <a href="#" id="ml1">Slide 2</a><br />
            <a href="#" id="ml2">Slide 3</a><br />
            <a href="#" id="ml3">Slide 4</a><br />
            <a href="#" id="ml4">Slide 5</a><br />
        </div>
    </div>
</div>
</body>
</html>
于 2013-08-26T05:26:00.833 回答