【问题标题】:jQuery Custom Element Rotate HelpjQuery 自定义元素旋转帮助
【发布时间】:2011-02-23 06:43:02
【问题描述】:

嘿! 我正在尝试编写一个简单的内容/图像旋转横幅,我可以单击左箭头或右箭头来旋转内容..

我对所有内容都进行了编码,并且它可以工作,但是以非常初学者的方式,并且非常希望有一种更好,更强大的方式来做到这一点。

jQuery("span.left-arrow").click(function() {
    var visible = jQuery("#home_slider .slide:visible").attr("id");
    var slide1 = jQuery("#home_slider #slide1");
    var slide2 = jQuery("#home_slider #slide2");
    var slide3 = jQuery("#home_slider #slide3");
    if (jQuery(visible == "slide1")) {
        jQuery("#home_slider #slide1:visible").fadeOut(function() {
            slide3.fadeIn();
        });
    }
    if (jQuery(visible == "slide2")) {
        jQuery("#home_slider #slide2:visible").fadeOut(function() {
            slide1.fadeIn();
        });
    }
    if (jQuery(visible == "slide3")) {
        jQuery("#home_slider #slide3:visible").fadeOut(function() {
            slide2.fadeIn();
        });
    }
});
// right arrow
jQuery("span.right-arrow").click(function() {
    var visible = jQuery("#home_slider .slide:visible").attr("id");
    var slide1 = jQuery("#home_slider #slide1");
    var slide2 = jQuery("#home_slider #slide2");
    var slide3 = jQuery("#home_slider #slide3");
    if (jQuery(visible == "slide1")) {
        jQuery("#home_slider #slide1:visible").fadeOut(function() {
            slide2.fadeIn();
        });
    }
    if (jQuery(visible == "slide2")) {
        jQuery("#home_slider #slide2:visible").fadeOut(function() {
            slide3.fadeIn();
        });
    }
    if (jQuery(visible == "slide3")) {
        jQuery("#home_slider #slide3:visible").fadeOut(function() {
            slide1.fadeIn();
        });
    }
});

感谢您的帮助!

【问题讨论】:

  • 如果它已经有效,那么您究竟在寻找什么样的改进?否则,如果您正在寻找插件,您可能需要查看sorgalla.com/projects/jcarousel/examples/static_simple.html
  • 工作是一回事,但代码太臃肿而且不是很健壮......我宁愿在一个数组中使用每个函数来动态获取要旋转的元素数量......等等……但需要一些指导……

标签: jquery rotation banner


【解决方案1】:

可能是这样的:

编辑:点击处理程序现在允许您向前和向后“循环”。

// a reference to the currently shown slide
// you will have to initialize this somewhere
var currentSlide;

jQuery("span.left-arrow").click(function() {
    currentSlide.fadeOut(function(){
        // if it has a previous sibling, use the previous sibling
        // otherwise set it to the last slide
        currentSlide = currentSlide.prev().length ? currentSlide.prev() : currentSlide.siblings().last();
        currentSlide.fadeIn();
    });
}

jQuery("span.right-arrow").click(function() {
    currentSlide.fadeOut(function(){
        currentSlide = currentSlide.next().length ? currentSlide.next() : currentSlide.siblings().first();
        currentSlide.fadeIn();
    });
}

使用此方法,您不必为每张幻灯片指定唯一 ID,但幻灯片元素必须是 #home_slider 的唯一子项。

您可以使用以下内容进行初始化:

jQuery(function(){
    // this loops through all slides when the page loads and
    // assigns the first slide to the variable currentSlide
    // and hides all the others
    jQuery("#home_slider").children().each(function(index){
        index == 0 ? currentSlide = jQuery(this) : jQuery(this).hide();
    });
}

【讨论】:

  • @ZDYN - 感谢代码,但我想了解的是为什么需要初始化它?我以为这只有在点击时才会触发?对不起,如果这是一个新手问题...
  • @Rick,我使用变量currentSlide 来跟踪哪张幻灯片是“可见的”。这样,在您的点击事件中,您无需检查每张幻灯片以查看哪一张是可见的,而是已经有了对它的引用(即currentSlide)。但是当页面第一次加载时,你需要分配给变量哪个幻灯片是活动的,否则它将为空。
  • @ZDYN - 这个只有 1 个问题......我对你的代码所做的就是在 next(".slide") 中添加了特定的选择器,所以它知道只去兄弟姐妹那个选择器。但是现在当我单击下一步并且没有其他“.slide”时,它只会停止并且不会循环到第一张幻灯片。如何让它循环回到第一张幻灯片?
  • @Rick,看看我的编辑。它现在将允许您向前循环到第一张幻灯片,并向后循环到最后一张幻灯片。如果您不想循环倒退,请根据需要将其还原为原始代码。
  • @ZDYN - 完美,但我仍然必须添加 next(".slide") 和 prev(".slide") 和兄弟姐妹(".slide") 才能工作,否则当我单击下一个/上一个时,链中的不同元素将开始淡出......那么我添加这些是否正确?再次感谢。
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2021-11-04
  • 1970-01-01
相关资源
最近更新 更多