【问题标题】:Flexslider: how to show thumbnails of slides before clicking?Flexslider:如何在点击前显示幻灯片的缩略图?
【发布时间】:2014-05-30 18:18:11
【问题描述】:

我正在尝试在http://residentialbylandsecurities.com/ 上复制效果 在他们的滑块上,如果您将鼠标悬停在箭头上,它会显示下一张幻灯片的缩略图。我安装了相同的滑块 (FlexSlider),但这是自定义的。我的示例网站是here(未完成)。

他们的脚本在this file 中运行,但它是如此之长且庞大,并且做的比我需要的要多得多,我只想编写自己的函数。

我的伪代码: 1. Mainpulate next/prev 控件添加 div.thumbnail 到每个 2.找到当前活动幻灯片前后的幻灯片,并保存在变量中(prevSlide,nextSlide) 3. 从这些幻灯片 img 元素中获取 data-thumb 属性,并将每个属性保存在变量中(prevThumbData 和 nextThumbData) 4. 找到 .next div.thumbnail 和 .prev div.thumbnail 5. 将 prevThumbData 和 nextThumbData 作为 CSS 背景图像应用到它们各自的元素。 6. CSS:当鼠标悬停在箭头元素上时,在 div.thumbnail 中滑动

我根本不需要使用其他网站的功能,除非它更简单,我只需要完成以上。我已经将我的 IMG 元素设置为具有 data-thumb 属性,但还没有弄清楚如何修改滑块以包含 div.thumbnail。

编辑:我想我想出了程序中的第二步和第三步:

2。找到当前活动幻灯片之前和之后的幻灯片,并将它们保存在变量中(prevSlide,nextSlide)

function flexThumbs() { 
var slider = $('.flexSlider div ul')
var slides = new Array(slider.children());
var images = slide.find('img'); 
var currentSlide = $("li.flex-active-slide");
// find next and previous slides
var totalSlides = slider.slides.length;
    var nextSlide = slider.currentSlide + 1;
    if (nextSlide >= totalSlides)
        nextSlide = 0;
    var prevSlide = slider.currentSlide - 1;
    if (prevSlide < 0)
        prevSlide = totalSlides - 1;

3.从这些幻灯片 img 元素中获取 data-thumb 属性,并将每个属性保存在变量中(prevThumbData 和 nextThumbData)

var prevThumbData = $(prevSlide > "img").attr("data-thumb");
var nextThumbData = $(nextSlide > "img").attr("data-thumb");
}

【问题讨论】:

  • 他们实际上只是通过 css hover 将背景图像从 right:88px 移动到 right:0 。不需要javascript
  • 这不是棘手的部分。棘手的部分是他们如何在那里获得背景图像。当您滑过时,会显示下一张幻灯片的缩略图。该缩略图是通过 JS 动态加载的,因为上一张/下一张幻灯片总是在变化。我的滑块有滑入和滑出,你可以看到,但我不知道如何添加这些缩略图。
  • 你的权利。我只是在考虑是什么让图像显示出来。图像本身正在为每张幻灯片动态加载。
  • 我是否在上面的代码示例中正确检索了该信息?完成后,如何将其应用于缩略图箭头?
  • 实际上,我什至还没有弄清楚如何操作 flexSlider 的默认箭头。脚本动态注入它们,我不知道如何修改该输出以添加元素(用于缩略图预览)

标签: jquery flexslider


【解决方案1】:

看起来答案在他们的scripts.jsfile 中。

首先在他们调用.flexslider() 的部分中,他们传递了一个after: 回调。这只是 flexslider 中默认的回调选项之一。

回调后:

            after: function (slider) {
                if (!isTouch) {
                    mainSlider.setThumbs(slider);
                    flexsliderCopy.fadeIn(300); // Fade text back in
                } else {
                    //mainSlider.removeBulk(slider.currentSlide);
                }
            }

所以我们看到他们正在调用.setThumbs() 方法。快速 ctrl + f 显示:

            mainSlider.setThumbs = function (slider) {
                var totalSlides = slider.slides.length;
                var nextSlide = slider.currentSlide + 1;
                if (nextSlide >= totalSlides)
                    nextSlide = 0;
                var prevSlide = slider.currentSlide - 1;
                if (prevSlide < 0)
                    prevSlide = totalSlides - 1;

                prevThumb.find('div').css({
                    backgroundImage: 'url(' + slider.slides.eq(prevSlide).attr('data-thumb') + ')'
                });
                nextThumb.find('div').css({
                    backgroundImage: 'url(' + slider.slides.eq(nextSlide).attr('data-thumb') + ')'
                });

                prevThumb.animate({
                    opacity: 1
                });
                nextThumb.animate({
                    opacity: 1
                });
            };

【讨论】:

  • 我会试试这个。谢谢!看起来他们也在调用一些 prevThumb 和 nextThumb 变量。
  • @authorandrew,是的,在他们的 script.js 第 164-165 行,他们定义了 prevThumb 和 nextThumb
  • 快速问题:我是否必须使用 mainSlider 对象(我认为它是一个对象。如果我从他们的代码中获取的只是这个函数,我不需要它,对吧?控制台正在传递这个:ReferenceError: mainSlider is not defined 编辑:我已经删除了它,但我不知道如何操作 flexSlider 上的箭头控件。HTML 在代码中,它是不是我可以手动添加的。如何操作它来添加 flex-thumb-wrap?
  • 我不这么认为。我认为您可能只是将其重命名为独立功能。他们有他们的 script.js 设置来做花哨的 OOP 东西,你可能不需要弄乱它。
  • 我已将代码添加到选项中,但我不知道如何或在何处操作箭头控件。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
  • 2014-02-15
相关资源
最近更新 更多