jquery: can i animate the position:absolute to position:relative?

前端 未结 5 1375
时光说笑
时光说笑 2021-02-05 21:39

i have a bunch of images that are positioned absolutely, i want to be able to click a button and have them all animate to where they would normally be on the page if they had th

相关标签:
5条回答
  • 2021-02-05 22:02

    No.

    However, you could check the element's current location (call .position()), set the position to relative, and animate from the original location to the current one.

    0 讨论(0)
  • 2021-02-05 22:13

    You can try the css method to make it relative and then animate.

    $(".change_layout").click(function(){
    
        $(".book_img").css({'position': 'relative'}).animate({top:'0px', left:'0px'}, 1000)
    
    })
    0 讨论(0)
  • 2021-02-05 22:16

    No, you cannot animate it directly but you can find out the end point and animate the position there. Something like this might work when animation to the static position:

    $('img.foo').each(function() {
    
        var el = $(this);
    
        // Make it static
        el.css({
            visibility: 'hidden', // Hide it so the position change isn't visible
            position: 'static'
        });
    
        // Get the static position
        var end = el.position();
    
        // Turn it back to absolute
        el.css({
            visibility: 'visible', // Show it
            position: 'absolute'
        }).animate({ // Animate to the static position
            top: end.top,
            left: end.left
        }, function() { // Make it static
            $(this).css('position', 'static');
        });
    });
    

    It's a bit hacky, but it should work.

    0 讨论(0)
  • 2021-02-05 22:18

    I don't think you can do that. jQuery animate only works on any "numeric CSS property".

    0 讨论(0)
  • 2021-02-05 22:23

    I like Tatu's solution but found this reusable code to be better for my purposes:

    function specialSlide(el, properties, options){
        //http://stackoverflow.com/a/2202831/
        el.css({
            visibility: 'hidden', // Hide it so the position change isn't visible
            position: 'static'
        });
        var origPos = el.position();
        el.css({
            visibility: 'visible', // Unhide it (now that position is 'absolute')
            position: 'absolute',
            top: origPos.top,
            left: origPos.left
        }).animate(properties, options);
    }
    

    Let's say I want to slide $('#elementToMove') to a new position, and I want it to take 1000 milliseconds to move. I can call this:

    var props = {'top' : 200, 'left' : 300};
    var options = {'duration': 1000};
    specialSlide($('#elementToMove'), props, options);
    
    0 讨论(0)
提交回复
热议问题