使用caroufredsel插件同步和/或向图像添加字幕时出现问题

时间:2014-03-21 18:14:31

标签: javascript jquery caroufredsel

我是新手,所以如果我的问题显然很愚蠢,请耐心等待。我正在尝试使用caroufredsel http://coolcarousels.frebsite.nl/c/48/合并此网站中显示的幻灯片 现在我需要为图像添加标题。所以在尝试调试代码失败之后,我创建了一个解决方法,我只为字幕创建了另一个轮播并将其与主旋转木马同步。它的工作原理很好,但现在我无法将它与主旋转木马上的点击功能/功能同步。如果我评论点击功能,它的工作非常出色,但我需要点击功能。我做错了什么,或者有更简单的方法来做我想做的事。我通过文档并尝试合并一个id为“item”的新div。但随后整个“寻呼机”部分消失等。我将在此处包含完整的代码。提前感谢您的帮助。

我的css看起来像这样::

        html, body {
            height: 100%;
            padding: 0;
            margin: 0px;
        }
        body {

            min-height: 400px;
        }

        #wrapper {
            width: 697px;
            height: 400px;
            margin: -155px 0 0 -330px;
            position: absolute;
            top: 270px;
            left: 50%;
            box-shadow: 0px 1px 20px #c5a101;
            border:3px solid #c5a101;
            background-color: rgba(246,217,90,0.9);
        }

        #carousel {
            width: 580px;
            height: 360px;
            overflow: hidden;
            position: relative;
            z-index: 2;
            float:left;

        }

        #carousel img {
            display: block;
            float: left;

        }

        #pager {
            width: 112px;
            height: 350px;
            overflow: hidden;
            position: absolute;
            top: 0;
            right: 0;    
        }
        #pager div {
            height: 81px;
            width: 100px;
            box-shadow: 0px 0px 5px #c5a101;
        }
        #pager img {
            cursor: pointer;
            display: block;
            height: 81px;
            width: 112px;
            margin-bottom: 5px;
            float: left;
            border:3px solid #c5a101;
            cursor:default;
        }

        #texts-wrapper {
            width: 700px;
            height: 50px;
            float: left;

        }           

        #texts > div {
            width: 300px;
            height: 50px;
            position: relative;
            float: left;
            margin-top: auto;               
        }
        #texts > div > div {
            width: 700px;
            position: absolute;
            left: 2px;
            bottom: 5px;
            float: right;
            padding-top: 25px;
        }

        #texts a {
            color:#083377; 
            font-family:Trajan Pro;
            font-size: 16px;
            font-weight: bold;
            text-shadow: 0 1px 2px rgba(0,0,0,0.4);
            text-decoration: none;
            outline: none;
            display: block;
            background-color: rgba(248,229,145,0.4);
            border: 1px solid rgba(246,217,90,0.4);
            width: 700px;
            height: 85px;                
            padding-left: 10px;             

        }
        #texts a:hover {
            background-color: rgba(255,208,0,0.9);
            box-shadow: 0px 2px 15px #c5a101;
            color: rgba(227,75,76,0.7);

        } 

我的html代码看起来像这样::

<div id="wrapper">
            <div id="inner">
                <div id="carousel">
                    <img src="img/building.jpg" width="580" height="350" />
                    <img src="img/guytalkingtokids.jpg" width="580" height="350" />
                    <img src="img/group.jpg" width="580" height="350" />
                    <img src="img/oath.jpg" width="580" height="350" />
                    <img src="img/finalists.jpg" width="580" height="350" />
                </div>
                <div id="pager"></div>
            </div>

            <div id="texts-wrapper">

                <div id="texts">
                    <div>
                        <a style="text-decoration:none; " href="blank.html" >
                            <div><p>The red building across the street.</p> </div></a>
                    </div>

                    <div>
                        <a style="text-decoration:none;" href="blank.html" >
                            <div><p>How yall doin? blah blah</p> </div></a>
                    </div>

                    <div>
                        <a style="text-decoration:none;" href="blank.html" >
                            <div><p>Lotsa ppl!.</p></div></a>
                    </div>

                    <div>
                        <a style="text-decoration:none;" href="blank.html" >
                            <div><p>I put another caption!</p></div></a>
                    </div>

                    <div>
                        <a style="text-decoration:none;" href="blank.html" >
                            <div> <p>Yay! We won?! How?!</p></div></a>
                    </div>                      
                </div>
          </div>                
        </div>

我的脚本标签看起来像::

$(function() {
            var $carousel = $('#carousel'),
                $pager = $('#pager');

            //  gather the thumbnails
            var $thumb = $( '<div class="thumb" />' );
            $carousel.children().each(function() {
                var src = $(this).attr( 'src' );
                $thumb.append( '<img src="' + src.split('/large/').join('/small/') + '" />' );
            });

            //  duplicate the thumbnails
            for (var a = 0; a < $carousel.children().length - 1; a++) {
                $pager.append( $thumb.clone() );
            }

            //  create large carousel
            $carousel.carouFredSel({
                    items: {
                    visible: 1,
                    width: 580,
                    height: 350
                },
                //auto:false,/* temporary: to stop automatic scrolling */
                scroll: {
                    fx: 'directscroll',
                    pauseOnHover:true,
                    duration: 500,
                    timeoutDuration: 5500,
                    onBefore: function( data ) {
                        var oldSrc = data.items.old.attr('src').split('/large/').join('/small/'),
                            newSrc = data.items.visible.attr('src').split('/large/').join('/small/'),
                            $t = $thumbs.find('img:first-child[src="' + newSrc + '"]').parent();

                        $t.trigger('slideTo', [$('img[src="' + oldSrc + '"]', $t), 'next']);
                    }
                }
            });

            //  create thumb carousels
            var $thumbs = $('.thumb');
            $thumbs.each(function( i ) {
                $(this).carouFredSel({
                    auto: false,
                    scroll: {
                        fx: 'directscroll'
                    },
                    responsive:true,
                    items: {
                        start: i+1,
                        visible: 1,
                        width: 112,
                        height: 89.6
                    }
                });

                //  click the carousel---> comment out this portion to disable the click function on small images

                $(this).click(function() {
                    var src = $(this).children().first().attr('src').split('/small/').join('/large/');
                    $carousel.trigger('slideTo', [$('img[src="' + src + '"]', $carousel), 'next']);
                }); 

            });

            // comment out the click function and uncomment this section of #texts to have a synchronised carousel with captions but no click function
            $('#texts').carouFredSel({
                items: 1,
                direction: 'left',
                responsive:true,
                auto: {
                    play: true,
                    duration: 500,
                    easing: 'quadratic',
                    timeoutDuration: 5500
                }
             });

        });

现在我使用了jquery版本1.8.2和caroufredsel版本6.2.1。再次感谢您的帮助。抱歉,如果我的代码看起来也很混乱。

截至2014年3月22日的最新更新::我通过插件CarouFredSel的文档,偶然发现了一个名为“synchronize”的可设置参数/配置”。如果我理解正确,我可以同步2个轮播以响应同一事件。所以我将代码行“synchronize:{”#carousel“}添加到文本轮播中,告诉它将其与主旋转木马同步......

$('#texts').carouFredSel({
                items: 1,
                direction: 'left',
                responsive:true,
                synchronise:{"#carousel"},/*This is the new line I added*/
                auto: {
                    play: true,
                    duration: 500,
                    easing: 'quadratic',
                    timeoutDuration: 5500
                }
             });

不幸的是,这不起作用。现在也没有时间模式。每当我点击小图片时,它就会以随机的速度向前移动。所以如果不让它变得更糟,我仍然会遇到同样的问题。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在与问题斗争了一个多星期之后,我能够找到解决问题的方法。现在它可能不是最好的解决方案,但它有效,因此我发布它以便将来如果其他人有相同或类似的问题,它可能会有所帮助。

现在如果有人上来有了更好的解决方案,我仍然希望你在这里发布,因为我可能想知道你做了什么,为什么你这样做并从经验中学习。我不认为自己是专家程序员。我还在学习,到目前为止,这个网站对我来说是一个很好的学习工具。

无论如何回到这个问题,我添加了这段代码......

//sais try: synchronise texts and carousel to work together and on click
                        var index = $(this).triggerHandler( 'currentPosition' );
                        if ( index == 0 ) {
                            index = $(this).children().length;
                        }
                        //  trigger the titles carousel
                        $('#texts').trigger('slideTo', [ index, 'next' ]);

就在这里......

//  create large carousel
            $carousel.carouFredSel({
                    items: {
                    visible: 1,
                    width: 580,
                    height: 350
                },
                //auto:false,/* temporary: to stop automatic scrolling */
                scroll: {
                    fx: 'directscroll',
                    pauseOnHover:true,
                    duration: 500,
                    timeoutDuration: 3500,
                    onBefore: function( data ) {
                        var oldSrc = data.items.old.attr('src').split('/large/').join('/small/'),
                            newSrc = data.items.visible.attr('src').split('/large/').join('/small/'),
                            $t = $thumbs.find('img:first-child[src="' + newSrc + '"]').parent();

                        $t.trigger('slideTo', [$('img[src="' + oldSrc + '"]', $t), 'next']);
                        /* [ the code goes here!]*/

现在,我可以将旋转木马(#carousel,#texts)同步到一起使用点击功能/功能。此外,我曾尝试使用carouFredSel中的同步功能同步轮播。那就好吧。它不起作用。

我不知道这对其他人是否有用,但如果确实如此,那就太好了。但如果有人提出更好的解决方案,请告诉我。谢谢。保持好的工作