javascript - jQuery 幻灯片放映代码不起作用

标签 javascript jquery html slideshow

我正在构建一个用于我的网站的简单 jQuery 幻灯片。

我在这里找到了代码(并做了一些调整):http://www.barrelny.com/blog/building-a-jquery-slideshow-plugin-from-scratch/ (我唯一的要求是代码必须从头开始构建,轻量级,使用 CSS3 Transitions 并每五秒自动滑动一次。)

问题是,我什至无法让我的代码发生任何事情。不管怎样,就在这里。

(function($){
function prefix(el){
    var prefixes = ["webkit", "moz", "o", "ms"];
    for (var i = 0; i < prefixes.length; i++){
        if (prefixes[i] + "transition" in el.style){
            return '-'+prefixes[i].toLowerCase()+'-'; 
        };
    }; 
    return "transition" in el.style ? "" : false;
};
s    var methods = {
    init: function(settings){
        return this.each(function(){
            var config = {
                slideDur: 7000,
                fadeDur: 800
            };
            if(settings){
                $.extend(config, settings);
            };
            this.config = config;
            var $container = $(this),
                slideSelector = 'article',
                fading = false,
                slideTimer,
                activeSlide,
                newSlide,
                $slides = $container.find(slideSelector),
                totalSlides = $slides.length,
                $pagerList = $container.find('#control');
                prefix = prefix($container[0]);
            function waitForNext(){
                slideTimer = setTimeout(function(){
                    changeSlides('next');
                },config.slideDur);
            };
            function animateSlides(activeNdx, newNdx){
                function cleanUp(){
                    $slides.eq(activeNdx).removeAttr('style');
                    activeSlide = newNdx;
                    fading = false;
                    waitForNext();
                };
                if(fading || activeNdx == newNdx){
                    return false;
                };
                fading = true;
                $pagers.removeClass('active').eq(newSlide).addClass('active');
                $slides.eq(activeNdx).css('z-index', 3);
                $slides.eq(newNdx).css({
                    'z-index': 2,
                    'opacity': 1
                });
                var styles = {};
                styles[prefix+'transition'] = 'opacity '+config.fadeDur+'ms';
                styles['opacity'] = 0;
                $slides.eq(activeNdx).css(styles);
                var fadeTimer = setTimeout(function(){
                    cleanUp();
                },config.fadeDur);
            };
            function changeSlides(target){
                if(target == 'next'){
                    newSlide = activeSlide + 1;
                    if(newSlide > totalSlides - 1){
                        newSlide = 0;
                    }
                } else if(target == 'prev'){
                    newSlide = activeSlide - 1;
                    if(newSlide < 0){
                        newSlide = totalSlides - 1;
                    };
                } else {
                    newSlide = target;
                };
                animateSlides(activeSlide, newSlide);
            };
            for(var i = 0; i < totalSlides; i++){
                $pagerList
                    .append('<nav id="control" data-target="'+i+'">'+i+'</nav>');
            };
            $container.find('#control').bind('click',function(){
                var target = $(this).attr('data-target');
                clearTimeout(slideTimer);
                changeSlides(target);
            });
            var $pagers = $pagerList.find('#control');
            $slides.eq(0).css('opacity', 1);
            activeSlide = 0;
            slideTimer = setTimeout(function(){
                changeSlides('next');
            },config.slideDur);
        });
    }
};
$.fn.easyFader = function(settings){
    return methods.init.apply(this, arguments);
};
})(jQuery);

这是 fiddle :http://jsfiddle.net/b7PLz/

我真的希望有人能帮助我——我们将不胜感激。谢谢

最佳答案

我已经更新了你的 jsfiddle现在它完美地工作了。除了代码中的拼写错误('var 方法'之前有一个's')以及您在 DOMready 事件处理程序中执行插件函数并在 body 标记末尾调用它之外,您的问题是您的问题幻灯片在幻灯片容器内垂直排列。由于幻灯片容器具有特定的高度和隐藏的溢出,因此它们是不可见的。我改变了它,将文章设置为绝对定位,这样文章现在一个接一个。此外,没有位置绝对或相对 z-index 不起作用。

#slideshow article { 
  height: 345px; 
  width: 700px; 
  position: absolute; 
  top: 0px; 
  left: 0px; 
}

关于javascript - jQuery 幻灯片放映代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22121187/

相关文章:

javascript - 使用javascript替换字符串值并保留部分替换字符串

元标记中的 javascript 不适用于 Firefox 和 Internet Explorer

javascript - 如何从维数组中获取最大值以及文本/名称?

JavaScript 基本变量返回用户输入的值

javascript - ViewBag 初始化后访问 Javascript 变量

javascript - 未捕获的类型错误(加载 jQuery 脚本)

php - 如何使用带有canvas元素的php打印到pdf

javascript - jQuery 选项卡/验证提交多个表单

javascript - 使用文本区域显示多行文本

html - 使用另一个背景图像问题在容器内缩放三个带有背景图像的 div