请看看这个小提琴: http://jsfiddle.net/dhcyA/

尝试点击一个块.我想要的是,当其他元素消失时,所选的块将动画/放松给他的位置,而不是像现在这样跳跃.那么当再次点击框时,相同的动画重复自己,然后再回到位置.

也许要记住:
我使用的是一个reponsive设计,这意味着在缩放窗口之后,这些块可以是垂直和水平的.

小提琴或糖果的任何修改都会很棒!

解决方法

这是我的解决方案

在现有的标记上,我添加了一个包装器来计算包装器中的框的位置.喜欢这个

<div id="wrapper">
    <div class="block">
        <h2>I'm block 1</h2>
    </div>
    ....
</div>

为了保持块的流畅性,我创建了一个功能来将块定位在包装上.这是块的位置功能:

var reposition = function() {
    wrapper = $("#wrapper");
    console.log(wrapper.innerWidth());
    pLeft = 0;
    pTop = 0;
    maxRowHeight = 0;
    $(".block").each(function(){
        if($(this).data('active')) {
            $(this).data('top',pTop);
            $(this).data('left',pLeft);
        } else {
            $(this).stop(0,0).animate({
              'top' : pTop + 'px','left' : pLeft + 'px'
            });
        }
            pLeft += $(this).outerWidth() + parseInt($(this).css('marginLeft'));
            if($(this).height() > maxRowHeight) maxRowHeight = $(this).outerHeight() + parseInt($(this).css('marginTop')); //Find out the longest block on the row

            if(pLeft + $(this).next().outerWidth() + parseInt($(this).next().css('marginLeft')) >= wrapper.innerWidth()) {
               pLeft = 0;
               pTop += maxRowHeight;
               maxRowHeight = 0;
            }

    });    
};

最后,脚本切换块

$(".block").click(function() {

    $(this).siblings().slidetoggle('slow'); //Toggle other blocks

    if(!$(this).data('active')){ //if the block is not active
        $(this).data('left',$(this).position().left); //sets its left
        $(this).data('top',$(this).position().top);   // and top position
        $(this).animate({ //animate at the top and bottom
            top:0,left:0
        },'slow');

        $(this).data('active',true);

    }else{

        $(this).animate({ //animate to its last kNown position
            top:$(this).data('top'),left:$(this).data('left')
        },false);
    }
});

演示

> Demo[Full](调整大小以保持流体性)
> Demo[Full](显示可变高度的版本)

这是解决方案所提供的:

  • Remembers the last position and gradually animate to/from this position
  • Block positions are calculated and animated on load and every resize
  • Repositioning happens on $(window).resize() thus maintaining the fluid nature of the block,despite the use of position absolute
  • Support variable heights
  • Minor change on existing markup & CSS

Also fixed two issues extended by Gaby

  • Accounts for each block margin independently
  • Recalculates the position of the element after resize

javascript – Animate /在其他元素消失时轻松放置元素的更多相关文章

  1. ios – iPhone:一段时间后,所有动画都停止工作

    我最近有一些奇怪的行为.所有动画有时会突然停止工作.有时候一切顺利,其他时候就会发生.推送和弹出视图只是捕捉到位,UITableViewcellrow动画不起作用.该应用程序使用了很多后台线程,所以也许有东西在那里?我不能真正发布代码,因为我不知道问题在哪里.有人有同样的问题吗?解决方法你可以尝试在不同的后台线程中更新UI/animate吗?

  2. ios – SpriteKit中的Animate路径绘图

    我正在尝试使用SpriteKit在路径上绘制笔画的动画.我已经使用SKActions实现了一个工作解决方案,并使用CABasicAnimations实现了单独的实现.SKAction解决方案不是很优雅;它在SKAction.repeatAction(action:count:)调用的每次迭代中创建并描绘一个新路径,每个新路径比前一个略微更完整.虽然上面的代码有效,但它肯定不是很漂亮或有效,而且很可

  3. android – Animate Recycler在列数更改时查看网格

    我正在使用带有GridLayoutManager的RecyclerView.用户可以在2到4之间切换跨度计数,这将导致动画将每个单元格的内置翻译动画运行到其新位置.我到目前为止使用的代码是:这对我来说一直很好,但现在我需要为每个跨度计数设置不同的布局.为了支持这一点,我在RecyclerView中有2种视图类型,并且由于在移动到新的跨度计数时视图类型已更改,因此RecyclerView无法看到它是

  4. jQuery中animate的几种用法与注意事项

    在今天之前,我对jQuery的中的animate()方法还停留在最常见的用法,查了一下手册,发现在1.8的时候增加了几个比较有用的回调函数,想着就来总结下jQuery中animate的几种用法与注意事项,方便自己或者大家有需要的时候参考借鉴,下面来一起看看吧。

  5. 详解jQuery的animate动画方法及动画排队问题解决

    这篇文章主要介绍了jQuery的animate动画方法及动画排队问题解决的相关资料,帮助大家更好的理解和学习使用jQuery,感兴趣的朋友可以了解下

  6. jquery animate动画持续运动的实例

    下面小编就为大家分享一篇jquery animate动画持续运动的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  7. jQuery实现立体式数字动态增加(animate方法)

    本文主要分享了基于jQuery实现立体式数字动态增加(animate方法)的实例代码。有很好的参考价值,需要的朋友一起来看下吧

  8. animate 实现滑动切换效果【实例代码】

    下面小编就为大家带来一篇animate 实现滑动切换效果【实例代码】。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. 深入理解jquery自定义动画animate()

    下面小编就为大家带来一篇深入理解jquery自定义动画animate()。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. jQuery animate和CSS3相结合实现缓动追逐效果附源码下载

    这篇文章主要介绍了jQuery animate和CSS3相结合实现缓动追逐效果的相关资料,需要的朋友可以参考下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部