为什么 Jquery .prev() 比 .next() 多显示 1 个元素?

发布于 2024-11-25 21:36:49 字数 3509 浏览 0 评论 0原文

我正在创建一个简单的图像滑块/翻转器。我有一组带有文字的图像。使用下一个箭头显示下一个带有文本的图像,使用上一个箭头将显示上一个带有文本的图像。

“下一个箭头”效果完美。然而,“前一个箭头”的作用就好像多了一个图像。同样,这仅适用于前一个箭头,并且仅适用于图像(附件完整)而不是文本(frameData)。图像确实会循环播放,但之前会放入不存在的图像并丢弃文本(frameData)。

页面上的 HTML:

<div id="headerFrame"> 
    <span id="moveLeft"></span> 
    <span id="moveRight"></span> 
    <img width="329" height="239" src="http://beta.tortugatwins.com/wp-content/uploads/2011/07/hopeAvatar.png" class="attachment-full wp-post-image" alt="hopeAvatar" title="hopeAvatar" />
    <img width="329" height="239" src="http://beta.tortugatwins.com/wp-content/uploads/2011/06/firalicon.png" class="attachment-full wp-post-image" alt="firalicon" title="firalicon" />                                                            </div> 
<div id="featuredContent"> 
    <div class="frameData"> 
        <h1 class="headTitle">Test Me Again</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae mauris quis ligula mattis bibendum. Nam accumsan libero eget arcu aliquet pretium sit amet sed lorem. Mauris porttitor, ipsum in mollis sagittis, turpis justo ultricies eros, vitae pellentesque magna sem &hellip; <a href="http://beta.tortugatwins.com/?p=6" class="excerpt-more-link">Continue reading</a></p> 
    </div> 
    <div class="frameData"> 
        <h1 class="headTitle">Hello world!</h1>
        <p>Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!</p> 
    </div> 
</div>

页面上的 jquery:

$('#headerFrame .attachment-full, #featuredContent .frameData').css({'opacity':'0'});
$('#headerFrame .attachment-full:first, #featuredContent .frameData:first').addClass('show').css({'opacity':'1'});
$('#moveRight').click(function()
{
    var $currentFrame = $('#headerFrame .attachment-full.show');
    var $currentContent = $('#featuredContent .frameData.show');

    var $nextFrame = $currentFrame.next().length ? $currentFrame.next() : $('#headerFrame .attachment-full:first').addClass('show').animate({'opacity':'1'});
    var $nextContent = $currentContent.next().length ? $currentContent.next() : $('#featuredContent .frameData:first').addClass('show').animate({'opacity':'1'});

    $nextFrame.addClass('show').css({'display':'block'}).animate({'opacity':'1'});
    $currentFrame.removeClass('show').css({'display':'none'}).animate({'opacity':'0'});

    $nextContent.addClass('show').css({'display':'block'}).animate({'opacity':'1'});
    $currentContent.removeClass('show').css({'display':'none'}).animate({'opacity':'0'});
});
$('#moveLeft').click(function()
{
    var $currentFrame = $('#headerFrame .attachment-full.show');
    var $currentContent = $('#featuredContent .frameData.show');

    var $prevFrame = $currentFrame.prev().length ? $currentFrame.prev() : $('#headerFrame .attachment-full:last').addClass('show');
    var $prevContent = $currentContent.prev().length ? $currentContent.prev() : $('#featuredContent .frameData:last').addClass('show');

    $prevFrame.addClass('show').css({'display':'block'}).animate({'opacity':'1'});
    $currentFrame.removeClass('show').css({'display':'none'}).animate({'opacity':'0'});

    $prevContent.addClass('show').css({'display':'block'}).animate({'opacity':'1'});
    $currentContent.removeClass('show').css({'display':'none'}).animate({'opacity':'0'});
});

I'm creating what should be a simple image slider/flipper. I have a set of images with text. use the next arrow shows the next image with text and the previous arrow would show the previous image with text.

The "next arrow" works perfect. However, the "previous arrow" acts as though there is one more image than there is. Again, this is only with the previous arrow and ONLY on the images (attachment-full) NOT the text (frameData). The images do cycle through but previous tosses in a non-existant image in and throws the text (frameData) off.

HTML on the page:

<div id="headerFrame"> 
    <span id="moveLeft"></span> 
    <span id="moveRight"></span> 
    <img width="329" height="239" src="http://beta.tortugatwins.com/wp-content/uploads/2011/07/hopeAvatar.png" class="attachment-full wp-post-image" alt="hopeAvatar" title="hopeAvatar" />
    <img width="329" height="239" src="http://beta.tortugatwins.com/wp-content/uploads/2011/06/firalicon.png" class="attachment-full wp-post-image" alt="firalicon" title="firalicon" />                                                            </div> 
<div id="featuredContent"> 
    <div class="frameData"> 
        <h1 class="headTitle">Test Me Again</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae mauris quis ligula mattis bibendum. Nam accumsan libero eget arcu aliquet pretium sit amet sed lorem. Mauris porttitor, ipsum in mollis sagittis, turpis justo ultricies eros, vitae pellentesque magna sem … <a href="http://beta.tortugatwins.com/?p=6" class="excerpt-more-link">Continue reading</a></p> 
    </div> 
    <div class="frameData"> 
        <h1 class="headTitle">Hello world!</h1>
        <p>Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!</p> 
    </div> 
</div>

jquery on the page:

$('#headerFrame .attachment-full, #featuredContent .frameData').css({'opacity':'0'});
$('#headerFrame .attachment-full:first, #featuredContent .frameData:first').addClass('show').css({'opacity':'1'});
$('#moveRight').click(function()
{
    var $currentFrame = $('#headerFrame .attachment-full.show');
    var $currentContent = $('#featuredContent .frameData.show');

    var $nextFrame = $currentFrame.next().length ? $currentFrame.next() : $('#headerFrame .attachment-full:first').addClass('show').animate({'opacity':'1'});
    var $nextContent = $currentContent.next().length ? $currentContent.next() : $('#featuredContent .frameData:first').addClass('show').animate({'opacity':'1'});

    $nextFrame.addClass('show').css({'display':'block'}).animate({'opacity':'1'});
    $currentFrame.removeClass('show').css({'display':'none'}).animate({'opacity':'0'});

    $nextContent.addClass('show').css({'display':'block'}).animate({'opacity':'1'});
    $currentContent.removeClass('show').css({'display':'none'}).animate({'opacity':'0'});
});
$('#moveLeft').click(function()
{
    var $currentFrame = $('#headerFrame .attachment-full.show');
    var $currentContent = $('#featuredContent .frameData.show');

    var $prevFrame = $currentFrame.prev().length ? $currentFrame.prev() : $('#headerFrame .attachment-full:last').addClass('show');
    var $prevContent = $currentContent.prev().length ? $currentContent.prev() : $('#featuredContent .frameData:last').addClass('show');

    $prevFrame.addClass('show').css({'display':'block'}).animate({'opacity':'1'});
    $currentFrame.removeClass('show').css({'display':'none'}).animate({'opacity':'0'});

    $prevContent.addClass('show').css({'display':'block'}).animate({'opacity':'1'});
    $currentContent.removeClass('show').css({'display':'none'}).animate({'opacity':'0'});
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月寒剑心 2024-12-02 21:36:49

给你的 prev() 调用一个选择器,这样它就不会选择不是图像的同级(即组成当前实际上不可见的箭头的跨度)。

Give your prev() call a selector so it doesn't select siblings that aren't images (i.e. the spans that make up your arrows that aren't actually currently visible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文