【问题标题】:Galleriffic Multiple thumbnail galleries with single slideshow containerGalleriffic 带有单个幻灯片容器的多个缩略图画廊
【发布时间】:2019-09-13 23:39:16
【问题描述】:

我设法将这个出色的例子应用到我的需求中:

http://code.google.com/p/galleriffic/issues/attachmentText?id=76&aid=-3045121742886940548&name=example-2.html&token=4nlvmgAfVpc5whcXC9UEqHZaSz0%3A1339257750721

有一点小改动:两个画廊都将图像应用到同一个幻灯片容器,因此不是让“#thumbs0”缩略图更改“#slideshow0”中的图像,而“#thumbs1”缩略图更改“#slideshow1”中的图像" ,我将它们都设置为更改 "#slideshow" 中的图像。

这是因为我使用标签来分隔 2 种不同类别的缩略图,这会更改单个幻灯片容器中的图像。

我通过将 imageContainerSel 设置为“#slideshow”而不是示例中的“#slideshow”+i 来做到这一点。

代码如下:

HTML:

<div id="tabs">
<div class="each-gallery">
    <div id="thumbs0" class="navigation">
        <ul>
            <li><a href="#tabs-1">Tab 1</a></li>
            <li><a href="#tabs-2">Tab 2</a></li>
        </ul>

            <div id="tabs-1">
                <ul class="thumbs noscript">
                    <li>
                        <a class="thumb" href="images/1.jpg" title="Title #0">
                        <img src="images/thumbs/1.jpg" alt="Title #0" />
                            Title 1
                        </a>
                        <div class="caption">
                            <div class="image-title">Title 1</div>
                            <div class="image-desc">Description 1</div>
                        </div>
                    </li>
                    <li>
                        <a class="thumb" href="images/2.jpg" title="Title #0">
                            <img src="images/thumbs/2.jpg" alt="Title #0" />
                            Title 2
                        </a>
                        <div class="caption">
                            <div class="image-title">Title 2</div>
                            <div class="image-desc">Description 2</div>
                        </div>
                    </li>

                </ul>
            </div>

        </div>
</div>

            <div id="tabs-2">
                <div class="each-gallery">
                    <div id="thumbs1" class="navigation">

                <ul class="thumbs noscript">
                    <li>
                        <a class="thumb" href="images/3.jpg" title="Title #0">
                        <img src="images/thumbs/3.jpg" alt="Title #0" />
                            Title 3
                        </a>
                        <div class="caption">
                            <div class="image-title">Title 3</div>
                            <div class="image-desc">Description 3</div>
                        </div>
                    </li>
                    <li>
                        <a class="thumb" href="images/4.jpg" title="Title #0">
                            <img src="images/thumbs/4.jpg" alt="Title #0" />
                            Title 4
                        </a>
                        <div class="caption">
                            <div class="image-title">Title 4</div>
                            <div class="image-desc">Description 4</div>
                        </div>
                    </li>

                </ul>
                    </div>
                </div>
            </div>

Javascript:

 <script type="text/javascript">
                    jQuery(document).ready(function($) {
                            // We only want these styles applied when javascript is enabled
                            // We only want these styles applied when javascript is enabled
                            $('div.navigation').css({'width' : '960px', 'float' : 'left'});
                            $('div.content').css('display', 'block');

                            $(".each-gallery").each(function(i){
                                    // Initially set opacity on thumbs and add
                                    // additional styling for hover effect on thumbs
                                    var onMouseOutOpacity = 0.67;
                                    $('#thumbs + i + ul.thumbs li').opacityrollover({
                                            mouseOutOpacity:   onMouseOutOpacity,
                                            mouseOverOpacity:  1.0,
                                            fadeSpeed:         'fast',
                                            exemptionSelector: '.selected'
                                    });

                                    // Initialize Advanced Galleriffic Gallery
                                    var gallery = $('#thumbs'+i).galleriffic({

                                            delay:                     2500,
                                            numThumbs:                 20,
                                            preloadAhead:              0,
                                            enableTopPager:            false,
                                            enableBottomPager:         false,
                                            maxPagesToShow:            7,
                                            imageContainerSel:         '#slideshow',
                                            controlsContainerSel:      '#controls',
                                            captionContainerSel:       '#caption',
                                            loadingContainerSel:       '#loading',
                                            renderSSControls:          true,
                                            renderNavControls:         true,
                                            playLinkText:              'Play Slideshow',
                                            pauseLinkText:             'Pause Slideshow',
                                            prevLinkText:              '&lsaquo; Previous Photo',
                                            nextLinkText:              'Next Photo &rsaquo;',
                                            nextPageLinkText:          'Next &rsaquo;',
                                            prevPageLinkText:          '&lsaquo; Prev',
                                            enableHistory:             false,
                                            autoStart:                 false,
                                            syncTransitions:           true,
                                            defaultTransitionDuration: 900,
                                            onSlideChange:             function(prevIndex, nextIndex) {
                                                    // 'this' refers to the gallery, which is an extension of $('#thumbs')
                                                    this.find('ul.thumbs').children()
                                                            .eq(prevIndex).fadeTo('fast', onMouseOutOpacity).end()
                                                            .eq(nextIndex).fadeTo('fast', 1.0);
                                            },
                                            onPageTransitionOut:       function(callback) {
                                                    this.fadeTo('fast', 0.0, callback);
                                            },
                                            onPageTransitionIn:        function() {
                                                    this.fadeTo('fast', 1.0);
                                            }
                                    });
                            });

                    });
            </script>

问题:

在页面加载时,两个画廊同时将它们的第一张图片加载到#slideshow,因此在初始页面加载时,图片出现两次,一个在另一个下方。只有在单击不同的缩略图后,第二个图像才会消失,并且一切都按预期工作。

我该如何解决?

【问题讨论】:

    标签: javascript jquery gallery image-gallery


    【解决方案1】:

    我自己解决了这个问题。

    如果有人感兴趣,这里是解决方案:

    我给第一个画廊中的第一个拇指起了一个独特的名字:

    <a class="thumb" name="first" href="images/1.jpg" title="Title #0">
    

    并修改jquery.galleriffic.js:

                    var buuga = this.data[nextIndex].hash;
                if(buuga !== 'first') {
                                var newSlide = this.$imageContainer
                    .append('<span class="image-wrapper current"><a class="advance-link" rel="history" href="#'+this.data[nextIndex].hash+'" title="'+imageData.title+'">&nbsp;</a></span>')
                    .find('span.current').css('opacity', '0');
                }
    

    我更改的是添加“buuga”变量来存储名称,并将为图像构建新隐藏跨度的部分包装在“if”条件中,如果名称为“first”则不会运行。

    【讨论】:

      【解决方案2】:

      在我的例子中,这样做只会隐藏 first 图像。我有不同数量的画廊/文件夹将被使用,所以在 3 个画廊的情况下,其他 2 个图像正在显示。

      现在,当我将其更改为:

      var buuga = this.data[nextIndex].hash;
      

      收件人:

      var buuga = this.data[imageData.index].hash;
      

      它在页面加载时完美运行。除了第一个图像是单击缩略图时显示的唯一图像。最终发生的事情是,galleriffic 试图将三个图像附加到第一个跨度。

      我最终做的是添加两个全局变量:一个计数和一个文件夹总数。

      firstImageCount = 0;  
      totalFolderCount = 3; // this number is generated with php
      

      我最终对 jquery.galleriffic.js 做了什么:

      // Construct new hidden span for the image
      var firstHash = this.data[nextIndex].hash; // I changed buuga to this more descriptive name
      if(firstImageCount >= totalFolderCount-1){  
          var newSlide = this.$imageContainer  
             .append('<span class="image-wrapper current"><a class="advance-link" rel="history" href="#'+this.data[nextIndex].hash+'" title="'+imageData.title+'">&nbsp;</a></span>')  
             .find('span.current').css('opacity', '0');  
      }  
      firstImageCount++;
      

      然后我让它首先显示系列中的最后一个文件夹,因为那是加载的图像。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        • 2016-09-03
        • 1970-01-01
        相关资源
        最近更新 更多