【问题标题】:jquery slideshow won't iterate over domjquery幻灯片不会遍历dom
【发布时间】:2017-08-20 21:48:00
【问题描述】:

我发现这个 Jquery 幻灯片 sn-p 非常适合我,只是它不会遍历 DOM。现在只有我文档中的第一个幻灯片可以工作。我已经搜索了一遍,我很确定我需要使用 .each() 以便它可以在我的文档中找到所有#slideframe DIV。不幸的是,我似乎无法正确使用它。任何有助于我的投资组合启动和运行的帮助都将是一个很大的帮助!

您可以在此处查看“工作”站点:LINK

这是我的 JQUERY

<script language="javascript">    $(document).ready(function () {
    var count = $('#slideframe').children().length;
    $("#total").text(count);
    // set display:none for all members of ".pic" class except the first
    var hidden = $('#slideframe').children();
    $('hidden:gt(0)').hide();

    // stores all matches for class="pic"
    var $slides = $('#slideframe').children();

    $slides.click(function () {

        // stores the currently-visible slide
        var $current = $(this);
        if ($current.is($slides.last())) {
            $("#current").text("1");
            $current.hide();
            $slides.first().show();
        }
        // else, hide current slide and show the next one
        else {
            $("#current").text($current.next().index()+1);
            $current.hide().next().show();
        }

    });
});</script>

这是我的 HTML:

<div class="projectcontainer">
<div id="slideframe">
            <video class="image" src="NEW/PHOTOS/AW17_FW_INSTA_LOCKUP_LO.mp4" type="video/mp4" autoplay loop></video>
            <img class="image" src="NEW/PHOTOS/AW17_LONDON_SQUARE.jpg" style="display: none;">
            <img class="image" src="NEW/PHOTOS/AW17_MILAN_SQUARE.jpg" style="display: none;">
            <img class="image" src="NEW/PHOTOS/AW17_NEWYORK_SQUARE.jpg" style="display: none;">
</div>


        <div class="imagetext">
            <div class="counter"><span id="current">1</span> / <span id="total">4</span></div>
            MAC Cosmetics AW17 Fashion Week Branding<br>
            ( Illustrations by <a href="culturesport.tv">culturesport.tv</a> )
        </div>

1 / 4 MAC Cosmetics AW17 时装周品牌推广
(插图来自culturesport.tv)

【问题讨论】:

    标签: javascript jquery html dom each


    【解决方案1】:

    首先,每个 DOM 元素应该只使用一个 ID。因此,如果您想引用多个幻灯片框架元素,请考虑使用类标识符,例如以下示例:

    &lt;div class="slideframe"&gt;

    (请注意,您还需要更新 #current#total 元素,以便它们的 ID 也不会重复。)

    然后,在 jQuery 中,您将按如下方式引用这些幻灯片:

    $('.slideframe')

    另外,就您的观点而言:您可能希望遍历两个幻灯片框,例如,对.last() 的调用将与正确的幻灯片框相关。

    var $frames = $('.slideframe');
    $frames.each(function() {
       var currentFrame = $(this);
       var currentSlides = currentFrame.children();
       currentSlides.click(function () {
    
            // stores the currently-visible slide
            var $current = $(this);
            if ($current.is(currentSlides.last())) {
                $(".current", currentFrame.next()).text("1"); // note this assumes you have set DOM element to use class="current"
                $current.hide();
                currentSlides.first().show();
            }
            // else, hide current slide and show the next one
            else {
                $(".current", currentFrame.next()).text($current.next().index()+1); // note this assumes you have set DOM element to use class="current"
                $current.hide().next().show();
            }
    
        });   
    });
    

    【讨论】:

    • 啊!太感谢了!!!这回答了我的问题。冒着听起来忘恩负义的风险,你介意告诉我如何将 .each 添加到柜台吗?谢谢谢谢谢谢!
    • 不客气!我认为您不需要为柜台添加.each();但是,请注意我确实更新了我的代码,以便对计数器的引用应该检索正确的 DOM 元素:$(".current", currentFrame.next())。 (这个更新的引用出现在代码中的两个地方。)
    • 再次感谢您!非常感谢您的帮助!
    【解决方案2】:

    您不能多次使用 id。您目前在多个位置拥有 id="slideframe"。 jQuery 只能看到第一个实例。尝试将 slideframe 更改为类。

    【讨论】:

    • 啊,你是对的。虽然如果我将它更改为一个类“$(”.slideframe").children()" 会抓取页面上的每个 .image 元素,而不是 .slideframe divs 直接子级。
    猜你喜欢
    • 2020-08-03
    • 2015-04-21
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2011-01-01
    相关资源
    最近更新 更多