jQuery 动画滑块

Posted

技术标签:

【中文标题】jQuery 动画滑块【英文标题】:jQuery animate slider 【发布时间】:2012-02-19 12:42:51 【问题描述】:

我在http://jsfiddle.net/aXVFR/ 上有一个滑块

当我点击一个项目时,所有图像都应该旋转。只需单击一下,它就可以正常工作。下一个不太好。我已经在 console.log 中写入并找到历史数据的重复项。它应该每次都改变,但它不会。

有什么想法吗?

【问题讨论】:

【参考方案1】:

好的,所以在检查了为什么每次点击图片都没有旋转之后,我决定稍微简化一下代码。如果您将它们存储在数组中,那么您实际上不需要重置任何值,就像您使用 reset_history() 函数所做的那样。

您真正需要的是一个变量来跟踪当前的正面项目,您可以通过快速计算获得所需的“step”值和“index ”您在 each 函数中使用。

这里是修改后的代码:

jQuery(document).ready(function($) 
    var side_item_count = 2;
    // ADDED CURRENT ITEM VAR
    var currItem = 1;
    var item_count = $("#showcase li").size();
    var history_width = get_history_width();
    var history_height = get_history_height();
    var history_margin = get_history_css("margin");
    var history_zindex = get_history_css("zindex");

    console.log(history_width);
    console.log(history_height);
    console.log(history_margin);

    // REMOVED get_next_index() THROUGHOUT TO SIMPLIFY SPECIFIC CALCULATIONS
    $("#showcase li").live("click", function()
        if(currItem == item_count)
            currItem = 1;
        else
            currItem++;
        
        step_loop( currItem );
    );

    function step_loop(this_index) 
        $('#showcase li').each(function(index) 
            counter = index + 1;
            step_animate(this_index, counter);
        );
    

    function step_animate( current_index, counter ) 
        // NEW CALCULATION USING currItem TO WORKOUT NEW ITEM POSITION
        current_object = $('#showcase li:nth-child(' + counter + ')');
        next_index = counter + 1 - currItem;
        if((counter - currItem) < 0)
            next_index = (counter - currItem) + item_count + 1;
            console.log("-- " + next_index);
        else
            console.log(counter + " + 1 - " + currItem + " = " + next_index);
        

        // ADDED NEW VAR next_zindex 
        var next_width = history_width[next_index];
        var next_height = history_height[next_index];
        var next_margin = history_margin[next_index];
        var next_zindex = history_zindex[next_index];

        // ADDED ZINDEX CHANGE BEFORE ANIMATION
        $(current_object).css("zIndex", next_zindex).animate(
            marginLeft: next_margin,
            width: next_width,
            height: next_height,
            , 500, function() 
                // Animation complete.
        );
    

    function get_history_width() 
        var width = new Array();
        $('#showcase li').each(function(index) 
            counter = index + 1;
            width[counter] = $('#showcase li:nth-child(' + counter + ')').css('width');
        );
        return width;
    
    function get_history_height() 
        var height = new Array();
        $('#showcase li').each(function(index) 
            counter = index + 1;
            height[counter] = $('#showcase li:nth-child(' + counter + ')').css('height');
        );
        return height;
    

    // CHANGED get_history_margin TO SERVE ZINDEX VALUES AS WELL 
    function get_history_css(property) 
        var margin = new Array();
        var zindex = new Array();
        $('#showcase li').each(function(index) 
            counter = index + 1;
            margin[counter] = $('#showcase li:nth-child(' + counter + ')').css('marginLeft');
            zindex[counter] = $('#showcase li:nth-child(' + counter + ')').css('zIndex');
        );
        switch(property)
            case "margin":
                return margin;
                break;
            case "zindex":
                return zindex;
                break;
        
    
);

这是 jsfiddle 上的实时示例:http://jsfiddle.net/aXVFR/3/

您可能会注意到 jsfiddle 更新,我对 css 进行了一些更改。这只是为了能够看到更多元素正在发生的事情。

我希望这对您有所帮助,并且与您的原始代码相差不远!

【讨论】:

它就像魔术一样工作。美丽的!当我检查代码时,我会接受这个答案。非常感谢! 好东西。很高兴我能帮忙:)

以上是关于jQuery 动画滑块的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 动画滑块

具有多个动画/效果的 JQuery 滑块

更改 jQuery UI 滑块值选项时动画滑块句柄?

如何使用 jQuery 自定义动画 <ul> 轮播滑块?

jQuery UI Slider - 手柄和滚动内容的动画不同步

使用jQuery hover() 使元素出现但不触发动画两次