jquery动画位置 - 绝对与相对

时间:2012-03-27 18:00:33

标签: jquery position jquery-animate relative absolute

我希望将一组“可拖动”图像的初始位置存储为图像中的数据属性。然后,当按下“putBack”按钮时,图像将返回其原始位置。问题是图像返回到相对位置。而不是Top&左边,它们位于2XTop和2XLeft。

    // assign data attributes x,y data attributes       
    $('li img').each(function(index) {
        $(this).data("Left", $(this).parent().position().left)
               .data("Top", $(this).parent().position().top);       
        console.log($(this).data("Top"));
    });

    // button to put images back where they started 
    $("#putBack").bind('click', function() {
        $('li img').each(function(index) {

        console.log($(this).data("Top"));
             $(this).parent().animate(
                     { "left": $(this).data("Left"), 
                             "top": $(this).data("Top")
                     }, "slow");                    
        });

    });

HTML ...

<ul>
<li id='apple'><img src="images/apple.png"/></li>
<li id='bread'><img src="images/bread.png"/></li>
<li id='banana'><img src="images/banana.png"/></li>
<li id='hot_dog'><img src="images/hot_dog.png"/></li>
<ul>

...的CSS

ul{
   width:100px;
   padding:0px;
   list-style:none;
   font-size:20px;
}

2 个答案:

答案 0 :(得分:1)

看起来你保持父li的位置而不是img。这是一个js小提琴,可以记住图像位置并相应地移回它们:jsfiddle.net/ps7WN

答案 1 :(得分:0)

这就是诀窍 -

$(document).ready(function(){ 
    $('li').draggable({
            // revert: true,
            cursor: 'pointer',
            opacity: .4,
            containment: 'document'
    });


    // turn on and off dragging 
    $('.toggle').click(function() {
        if ($( "li" ).draggable( "option", "disabled" ) == true){
            $( "li" ).draggable( "option", "disabled", false );             
            $('.toggle').val('Prevent Draggable');
        }
        else{
            $( "li" ).draggable( "option", "disabled", true );              
            $('.toggle').val('Allow Draggable');
        }
    });

    // assign data attributes x,y data attributes       
    $('li img').each(function(index) {
        $(this).data("Left", $(this).parent().offset().left)
               .data("Top", $(this).parent().offset().top);     
        console.log($(this).data("Top"));
    });

    // button to put images back where they started 
    $("#putBack").bind('click', function() {
        $('li img').each(function(index) {                      
             $(this).parent().animate(                   
                 { "left": 0, 
                         "top": 0
                 }, "slow");                    
        });
    });
});